导入 AWS RDS 时的 PostgreSQL 转储问题



我一直在努力对pg_dump输出进行多次调整(使用sed)以匹配AWS RDS对用户/角色的限制,但已经到了禁止pg_catalog架构访问的地步,并且在重新创建所需的数据库结构时弄乱了搜索路径。

最初我们有:

错误:架构pg_catalog的权限被拒绝

触发自:

SET search_path = reports, pg_catalog;
--
-- Name: entrada_salida; Type: TYPE; Schema: reports; Owner: waypoint
--
CREATE TYPE entrada_salida AS (
entrada timestamp with time zone,
salida timestamp with time zone
);

当前的 pg_dump 命令已演变为:

pg_dump -U waypoint -h $PGHOST --schema-only $PGDATABASE | sed  -- 's/COMMENT ON EXTENSION/-- COMMENT ON EXTENSION/g' | sed  -- 's/, pg_catalog;/;/g' | tr -d $'r' > /tmp/schema.sql

但是从pg_dump生成的脚本(SET search_path行)中删除pg_catalog会导致以下结果:

ERROR:  no schema has been selected to create in

有什么可行的解决方法吗?

笔记

  • 起源:PostgreSQL 9.4.9
  • COMMENT ON EXTENSION行添加了前导--(注释掉),因为不允许在 RDS 中修改现有扩展

  • tr用于过滤掉某些用户定义函数中剩余的嵌入 CTRL-M 字符。

编辑手动编辑转储以强制使用entrada_salida类型的reports,我得到:

ERROR:  permission denied for schema reports

所以我想有一些权限没有被迁移,我必须在转储中寻找它们

在AWS RDS 中似乎禁止使用"创建类型",因为它需要超级用户访问权限。 https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.MasterAccounts.html

最新更新