PSQL 阻止 "COMMENT ON" 数据库转储
PSQL prevent "COMMENT ON" on the DB dump
我们正在迁移一些产品,其中一个步骤是迁移产品数据库。
我有步骤
导出现有数据库 pg_dump --no-owner --clean --blobs --no-privileges -U dbuser old_dbname -f bkpfile.sql
将转储导入不同的数据库psql -U dbuser2 new_dbname -f bkpfile.sql
问题是旧数据库包含语句 COMMENT ON DATABASE old_dbname IS 'Rxxxxx';
新数据库用户不得对旧数据库拥有权限,恕我直言,无论如何在转储中引用旧数据库名称都不好。
有没有办法在没有 COMMENT ON DATABASE
语句的情况下创建完整的数据库转储?
编辑:
PostgreSQL 9.6
重现步骤:
CREATE DATABASE testdb;
COMMENT ON DATABASE testdb IS 'some comment';
CREATE TABLE xx (id int);
然后转储数据库,转储包含对数据库名称的引用 COMMENT ON DATABASE testdb IS 'some comment';
,这会阻止将备份导入新数据库
pg_dump --no-owner --clean --blobs --no-privileges testdb
我们可以手动删除评论语句或使用不同的工具 (grep) 过滤评论,但在备份之上进行手动干预或基于文本的过滤可能会导致数据损坏。
此评论仅在 v11.1 以下的 PostgreSQL 版本中转储。请参阅 release notes 中的此条目:
pg_dump and pg_restore, without --create
, no longer dump/restore database-level comments and security labels; those are now treated as properties of the database.
反正9.6很快就会停止支持,所以这是一个升级的好机会。
我们正在迁移一些产品,其中一个步骤是迁移产品数据库。
我有步骤
导出现有数据库
pg_dump --no-owner --clean --blobs --no-privileges -U dbuser old_dbname -f bkpfile.sql
将转储导入不同的数据库
psql -U dbuser2 new_dbname -f bkpfile.sql
问题是旧数据库包含语句 COMMENT ON DATABASE old_dbname IS 'Rxxxxx';
新数据库用户不得对旧数据库拥有权限,恕我直言,无论如何在转储中引用旧数据库名称都不好。
有没有办法在没有 COMMENT ON DATABASE
语句的情况下创建完整的数据库转储?
编辑:
PostgreSQL 9.6 重现步骤:
CREATE DATABASE testdb;
COMMENT ON DATABASE testdb IS 'some comment';
CREATE TABLE xx (id int);
然后转储数据库,转储包含对数据库名称的引用 COMMENT ON DATABASE testdb IS 'some comment';
,这会阻止将备份导入新数据库
pg_dump --no-owner --clean --blobs --no-privileges testdb
我们可以手动删除评论语句或使用不同的工具 (grep) 过滤评论,但在备份之上进行手动干预或基于文本的过滤可能会导致数据损坏。
此评论仅在 v11.1 以下的 PostgreSQL 版本中转储。请参阅 release notes 中的此条目:
pg_dump and pg_restore, without
--create
, no longer dump/restore database-level comments and security labels; those are now treated as properties of the database.
反正9.6很快就会停止支持,所以这是一个升级的好机会。