问题描述
我的任务是将一些表从 prod 环境复制到 dev 环境。这些表显然不包括任何用户/帐户相关的表。数据库位于单独的 RDS 实例中。数据库为 datawarehouse_production
和 datawarehouse_development
。
我目前面临的问题是我正在使用 DBeaver 并且能够创建数据库转储,例如,当我尝试使用该转储并将其恢复到表“响应”时,我现在创建了一个转储开发环境,我收到一条错误消息:
pg_restore: error: Could not execute query: ERROR: must be owner of relation responses
Command was: ALTER TABLE public.responses OWNER TO datawarehouse_production;
我什至无法打开该死的转储文件,因为它们是二进制文件。转储文件如下所示:
我希望摆脱那些查询,例如:Drop database datawarehouse_production
因为我想将数据复制到的数据库是 datawarehouse_development。
我知道 DBeaver 具有传输数据功能,但速度非常慢(20,000 行需要 50 分钟)。我已经将它用于较小的表,但是我需要复制的数据是 1100 万行。
我还尝试将数据从 prod 表导出到 CSV,然后将它们加载到 dev 表中,但它同样慢。
编辑: 添加 --data-only 标志后:
并且在恢复转储时,必须在额外的命令标志字段中添加 --data-only
标志!
解决方法
您的数据库转储包含复制转储表的确切状态所需的大量信息,其中包括权限设置查询,例如正在爆炸的查询。如果您已经在本地拥有架构并且不想复制这些类型的东西,请尝试 pg_restore --data-only
将数据加载到您现有的架构中。