恢复 PostgreSQL 数据库时创建 SEQUENCE 出错
Error in creating SEQUENCEs when restoring the PostgreSQL database
UserX 获得以下资助:
CREATE ROLE "UserX" LOGIN PASSWORD 'pass';
CREATE DATABASE "DBX" WITH OWNER="UserX" ENCODING='UTF8' TABLESPACE=pg_default CONNECTION LIMIT=-1;
GRANT CONNECT ON DATABASE "DBX" TO "UserX";
GRANT USAGE ON SCHEMA public TO "UserX";
GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO "UserX";
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO "UserX";
ALTER DEFAULT PRIVILEGES GRANT ALL ON SEQUENCES TO "UserX";
我在尝试将其转储恢复到其他数据库时遇到以下错误:
pg_restore: creating SEQUENCE "public.tblX_Id_seq"
pg_restore: [archiver (db)] Error from TOC entry 218; 1259 438745 SEQUENCE tblX_Id_seq UserX
pg_restore: [archiver (db)] could not execute query: ERROR: syntax error at or near "AS"
LINE 2: AS integer
^
Command was: CREATE SEQUENCE "tblX_Id_seq"
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACH...
pg_restore: [archiver (db)] could not execute query: ERROR: relation "tblX_Id_seq" does not exist
Command was: ALTER TABLE "tblX_Id_seq" OWNER TO "UserX";
pg_restore: creating SEQUENCE OWNED BY "public.tblX_Id_seq"
pg_restore: [archiver (db)] Error from TOC entry 3569; 0 0 SEQUENCE OWNED BY tblX_Id_seq UserX
pg_restore: [archiver (db)] could not execute query: ERROR: relation "tblX_Id_seq" does not exist
Command was: ALTER SEQUENCE "tblX_Id_seq" OWNED BY "tblX"."Id";
...
pg_restore: creating DEFAULT "public.tblX Id"
pg_restore: [archiver (db)] Error from TOC entry 2995; 2604 438750 DEFAULT tblX Id UserX
pg_restore: [archiver (db)] could not execute query: ERROR: relation "tblX_Id_seq" does not exist
Command was: ALTER TABLE ONLY "tblX" ALTER COLUMN "Id" SET DEFAULT nextval('"tblX_Id_seq"'::regclass);
...
pg_restore: executing SEQUENCE SET tblX_Id_seq
pg_restore: [archiver (db)] Error from TOC entry 3607; 0 0 SEQUENCE SET tblX_Id_seq UserX
pg_restore: [archiver (db)] could not execute query: ERROR: relation "tblX_Id_seq" does not exist
LINE 1: SELECT pg_catalog.setval('"tblX_Id_seq"', 1573, true);
^
Command was: SELECT pg_catalog.setval('"tblX_Id_seq"', 1573, true);
对我做错了什么有什么建议吗?
您正在尝试将转储从 v10 数据库恢复到旧版本的 PostgreSQL(CREATE SEQUENCE ... AS
是 v10 中的新版本)。
这不受支持且无法使用。您可以使用 pg_restore
创建一个 SQL 脚本并手动编辑它。或者升级目标数据库。
我做了这些笔记:
SUPPORT ALL COMPRESSED DATABASE
pg_dump -U {usuario} -h {host} -W {database} | gzip -c > archivo.gz
RESTORE FROM BACK GZIP
gunzip -c {archivo.gz} | psql -h {host} -U postgres {database}
RESTORE FROM GZIP BACKUP FROM v10 to v9.x
gunzip -c {archivo.gz} | sed -e '/AS integer/d' | psql -U postgres -h {host} -W {database}
我得到了将数据库从高版本还原到低版本的解决方案。
如果在还原数据库期间发生序列错误,只需从 dump.sql 文件中删除 As integer 并还原它即可解决序列错误。
例如:
CREATE SEQUENCE "tblX_Id_seq"
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACH...
删除 AS 整数
CREATE SEQUENCE "tblX_Id_seq"
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACH...
UserX 获得以下资助:
CREATE ROLE "UserX" LOGIN PASSWORD 'pass';
CREATE DATABASE "DBX" WITH OWNER="UserX" ENCODING='UTF8' TABLESPACE=pg_default CONNECTION LIMIT=-1;
GRANT CONNECT ON DATABASE "DBX" TO "UserX";
GRANT USAGE ON SCHEMA public TO "UserX";
GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO "UserX";
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO "UserX";
ALTER DEFAULT PRIVILEGES GRANT ALL ON SEQUENCES TO "UserX";
我在尝试将其转储恢复到其他数据库时遇到以下错误:
pg_restore: creating SEQUENCE "public.tblX_Id_seq"
pg_restore: [archiver (db)] Error from TOC entry 218; 1259 438745 SEQUENCE tblX_Id_seq UserX
pg_restore: [archiver (db)] could not execute query: ERROR: syntax error at or near "AS"
LINE 2: AS integer
^
Command was: CREATE SEQUENCE "tblX_Id_seq"
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACH...
pg_restore: [archiver (db)] could not execute query: ERROR: relation "tblX_Id_seq" does not exist
Command was: ALTER TABLE "tblX_Id_seq" OWNER TO "UserX";
pg_restore: creating SEQUENCE OWNED BY "public.tblX_Id_seq"
pg_restore: [archiver (db)] Error from TOC entry 3569; 0 0 SEQUENCE OWNED BY tblX_Id_seq UserX
pg_restore: [archiver (db)] could not execute query: ERROR: relation "tblX_Id_seq" does not exist
Command was: ALTER SEQUENCE "tblX_Id_seq" OWNED BY "tblX"."Id";
...
pg_restore: creating DEFAULT "public.tblX Id"
pg_restore: [archiver (db)] Error from TOC entry 2995; 2604 438750 DEFAULT tblX Id UserX
pg_restore: [archiver (db)] could not execute query: ERROR: relation "tblX_Id_seq" does not exist
Command was: ALTER TABLE ONLY "tblX" ALTER COLUMN "Id" SET DEFAULT nextval('"tblX_Id_seq"'::regclass);
...
pg_restore: executing SEQUENCE SET tblX_Id_seq
pg_restore: [archiver (db)] Error from TOC entry 3607; 0 0 SEQUENCE SET tblX_Id_seq UserX
pg_restore: [archiver (db)] could not execute query: ERROR: relation "tblX_Id_seq" does not exist
LINE 1: SELECT pg_catalog.setval('"tblX_Id_seq"', 1573, true);
^
Command was: SELECT pg_catalog.setval('"tblX_Id_seq"', 1573, true);
对我做错了什么有什么建议吗?
您正在尝试将转储从 v10 数据库恢复到旧版本的 PostgreSQL(CREATE SEQUENCE ... AS
是 v10 中的新版本)。
这不受支持且无法使用。您可以使用 pg_restore
创建一个 SQL 脚本并手动编辑它。或者升级目标数据库。
我做了这些笔记:
SUPPORT ALL COMPRESSED DATABASE
pg_dump -U {usuario} -h {host} -W {database} | gzip -c > archivo.gz
RESTORE FROM BACK GZIP
gunzip -c {archivo.gz} | psql -h {host} -U postgres {database}
RESTORE FROM GZIP BACKUP FROM v10 to v9.x
gunzip -c {archivo.gz} | sed -e '/AS integer/d' | psql -U postgres -h {host} -W {database}
我得到了将数据库从高版本还原到低版本的解决方案。 如果在还原数据库期间发生序列错误,只需从 dump.sql 文件中删除 As integer 并还原它即可解决序列错误。
例如:
CREATE SEQUENCE "tblX_Id_seq"
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACH...
删除 AS 整数
CREATE SEQUENCE "tblX_Id_seq"
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACH...