如何解决Postgres 9.6 到 12.7 pg_upgrade 错误 - 由于管理员命令而终止连接
我目前正在将 Centos 机器上运行的 Postgres 集群从 9.6.22 版升级到 12.7 版。发布 12.7 二进制文件的安装后,我正在运行 pg_upgrade 命令:
/usr/pgsql-12/bin/pg_upgrade -b /usr/pgsql-9.6/bin/ -B /usr/pgsql-12/bin/ -d /<path>/9.6/data.old -D /<path>/12/data/ -j 12 -r -v -k
但是,我在“在新集群中恢复数据库架构”步骤中遇到多个错误:
pg_restore: creating TABLE "schema1.table1"
pg_restore: creating TABLE "schema1.table2"
pg_restore: creating TABLE "schema1.table3"
pg_restore: while PROCESSING TOC:
pg_restore: from TOC entry 358; 1259 793395 TABLE table3 postgres
pg_restore: error: could not execute query: FATAL: terminating connection due to administrator command
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Command was:
-- For binary upgrade,must preserve pg_type oid
SELECT pg_catalog.binary_upgrade_set_next_pg_type_oid('793397'::pg_catalog.oid);
-- For binary upgrade,must preserve pg_type array oid
SELECT pg_catalog.binary_upgrade_set_next_array_pg_type_oid('793396'::pg_catalog.oid);
-- For binary upgrade,must preserve pg_class oids
SELECT pg_catalog.binary_upgrade_set_next_heap_pg_class_oid('793395'::pg_catalog.oid);
CREATE TABLE "schema1"."table3" (
"date_key" integer NOT NULL,"col1" character varying(32),"col2" character varying(32),"col3" character varying(32) NOT NULL
);
-- For binary upgrade,set heap's relfrozenxid and relminmxid
UPDATE pg_catalog.pg_class
SET relfrozenxid = '1491955518',relminmxid = '1'
WHERE oid = '"schema1"."table3"'::pg_catalog.regclass;
另一个日志文件:
pg_restore: creating TABLE "schema99.table1"
pg_restore: creating SEQUENCE "schema99.sequence1"
pg_restore: creating SEQUENCE OWNED BY "schema99.sequence1"
pg_restore: creating TABLE "schema99.table2"
pg_restore: creating SEQUENCE "schema99.sequence2"
pg_restore: creating SEQUENCE OWNED BY "schema99.sequence2"
pg_restore: creating SEQUENCE "schema99.sequence2"
pg_restore: while PROCESSING TOC:
pg_restore: from TOC entry 347; 1259 1949074 SEQUENCE sequence2 postgres
pg_restore: error: could not execute query: ERROR: relation "sequence2" already exists
Command was:
-- For binary upgrade,must preserve pg_class oids
SELECT pg_catalog.binary_upgrade_set_next_heap_pg_class_oid('1949074'::pg_catalog.oid);
-- For binary upgrade,must preserve pg_type oid
SELECT pg_catalog.binary_upgrade_set_next_pg_type_oid('1949075'::pg_catalog.oid);
CREATE SEQUENCE "schema99"."sequence2"
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
从日志中恢复命令:
"/usr/pgsql-12/bin/pg_restore" --host /var/lib/pgsql --port 50432 --username postgres --create --exit-on-error --verbose --dbname template1 "pg_upgrade_dump_16405.custom" >> "pg_upgrade_dump_16405.log" 2>&1
同样,每次运行不同的转储文件都会失败 (pg_upgrade_dump_16405.custom
/pg_upgrade_dump_16404.custom
)。
有没有人在升级到 Postgres 12.7 的过程中遇到过类似的问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。