PostgreSql : ERROR: relation "sequence" does not exist while restoring from dump file
PostgreSql : ERROR: relation "sequence" does not exist while restoring from dump file
从服务器上的转储文件恢复数据库时出现以下错误:
ERROR: relation "table_id_seq" does not exist
LINE 1: SELECT pg_catalog.setval('table_id_seq', 362, true);
- 我本地的psql版本是10.2
- 服务器 psql 版本为 9.6.8
这是我的转储命令:
pg_dump -U username -h localhost db_name > filename.sql
这是我在服务器上的恢复命令:
psql -U username -h localhost db_name < filename.sql
请帮忙,谢谢。
您可以使用任何文本编辑器(记事本、Vim 等)打开转储文件。搜索 table_id_seq
。你应该找到像
这样的语句
CREATE SEQUENCE table_id_seq ...
如果它丢失了,那么你的转储有一些奇怪的东西。您可以通过添加
来解决这个问题
CREATE SEQUENCE table_id_seq;
紧跟前面的语句
SELECT pg_catalog.setval('table_id_seq', 362, true);
来自错误信息。
但这只是一个技巧。你应该找出转储为什么会犯那个错误。但这需要更多信息。
在我从@clemens 获得信息并进行一些研究后,我发现,在我的 CREATE SEQUENCE table_id_seq
部分的转储文件中有一个声明 AS integer
为什么当我恢复到新数据库时它没有为序列创建 nextval()
。如果我从 CREATE SEQUENCE
部分删除语句 AS integer
,它会找到。
在我的转储文件中:
CREATE SEQUENCE table_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
从转储文件中删除 AS integer
CREATE SEQUENCE table_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
就我而言,序列检查区分大小写。这就是我收到关系错误的原因。所以也许它可以帮助一些像我这样最终绝望地来到这里的人。在 SQL 语句中,我在单引号内使用了双引号。
SELECT nextval('"USER_ID_seq"');
官方文档中有一些示例:
https://www.postgresql.org/docs/9.1/functions-sequence.html
从服务器上的转储文件恢复数据库时出现以下错误:
ERROR: relation "table_id_seq" does not exist
LINE 1: SELECT pg_catalog.setval('table_id_seq', 362, true);
- 我本地的psql版本是10.2
- 服务器 psql 版本为 9.6.8
这是我的转储命令:
pg_dump -U username -h localhost db_name > filename.sql
这是我在服务器上的恢复命令:
psql -U username -h localhost db_name < filename.sql
请帮忙,谢谢。
您可以使用任何文本编辑器(记事本、Vim 等)打开转储文件。搜索 table_id_seq
。你应该找到像
CREATE SEQUENCE table_id_seq ...
如果它丢失了,那么你的转储有一些奇怪的东西。您可以通过添加
来解决这个问题CREATE SEQUENCE table_id_seq;
紧跟前面的语句
SELECT pg_catalog.setval('table_id_seq', 362, true);
来自错误信息。
但这只是一个技巧。你应该找出转储为什么会犯那个错误。但这需要更多信息。
在我从@clemens 获得信息并进行一些研究后,我发现,在我的 CREATE SEQUENCE table_id_seq
部分的转储文件中有一个声明 AS integer
为什么当我恢复到新数据库时它没有为序列创建 nextval()
。如果我从 CREATE SEQUENCE
部分删除语句 AS integer
,它会找到。
在我的转储文件中:
CREATE SEQUENCE table_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
从转储文件中删除 AS integer
CREATE SEQUENCE table_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
就我而言,序列检查区分大小写。这就是我收到关系错误的原因。所以也许它可以帮助一些像我这样最终绝望地来到这里的人。在 SQL 语句中,我在单引号内使用了双引号。
SELECT nextval('"USER_ID_seq"');
官方文档中有一些示例: https://www.postgresql.org/docs/9.1/functions-sequence.html