pg_restore 错误:扩展安装顺序不正确

dev*_*eam 5 plpgsql pg-dump postgresql-9.5 pg-restore

我有一个安装了 pg_cron 扩展的 PostgreSQL 9.5 服务器。testdb我正在使用以下命令创建名为的数据库的备份:

$ pg_dump -c -U postgres -Fc -f test.dump testdb
Run Code Online (Sandbox Code Playgroud)

当我尝试在已通过 yum 安装的干净 PostgreSQL 9.5 上恢复数据库时pg_cron,我看到错误消息,指出pg_cron无法安装扩展,因为plpgsql扩展不存在:

$ pg_restore -Fc -d testdb -c -U postgres test.dump
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 4; 3079 18235 EXTENSION pg_cron
pg_restore: [archiver (db)] could not execute query: ERROR:  extension "pg_cron" does not exist
    Command was: DROP EXTENSION pg_cron;

pg_restore: [archiver (db)] could not execute query: ERROR:  language "plpgsql" does not exist
HINT:  Use CREATE LANGUAGE to load the language into the database.
    Command was: CREATE EXTENSION IF NOT EXISTS pg_cron WITH SCHEMA testschema;

pg_restore: [archiver (db)] Error from TOC entry 3795; 0 0 COMMENT EXTENSION pg_cron
pg_restore: [archiver (db)] could not execute query: ERROR:  extension "pg_cron" does not exist
    Command was: COMMENT ON EXTENSION pg_cron IS 'Job scheduler for PostgreSQL';

pg_restore: [archiver (db)] Error from TOC entry 3537; 0 18239 TABLE DATA job postgres
pg_restore: [archiver (db)] could not execute query: ERROR:  relation "job" does not exist
    Command was: COPY job  FROM stdin;

WARNING: errors ignored on restore: 4
Run Code Online (Sandbox Code Playgroud)

在查看 pg_dump 的文本输出时,我注意到CREATE EXTENSION命令是乱序的——文件pg_cron在安装之前尝试安装plpgsql

DROP EXTENSION plpgsql;
DROP EXTENSION pg_cron;
-- Name: pg_cron; Type: EXTENSION; Schema: -; Owner:
CREATE EXTENSION IF NOT EXISTS pg_cron WITH SCHEMA testschema;
-- Name: EXTENSION pg_cron; Type: COMMENT; Schema: -; Owner:
COMMENT ON EXTENSION pg_cron IS 'Job scheduler for PostgreSQL';
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
Run Code Online (Sandbox Code Playgroud)

有没有办法强制 pg_dump 确保CREATE EXTENSION命令以正确的顺序保存?我是否需要更改备份流程来为每个架构创建备份并始终pg_catalog先恢复?