PostgreSql:错误:从转储文件恢复时不存在关系"序列"

Sal*_*aly 5 postgresql pg-dump postgresql-9.6 postgresql-10

从服务器上的转储文件恢复数据库时出现以下错误:

错误:关系"table_id_seq"不存在第
1行:SELECT pg_catalog.setval('table_id_seq',362,true);

  • 我的本地psql版本是10.2
  • server psql版本是9.6.8

这是我的dump命令:

pg_dump -U username -h localhost db_name > filename.sql
Run Code Online (Sandbox Code Playgroud)

这是我在服务器上的恢复命令:

psql -U username -h localhost db_name < filename.sql
Run Code Online (Sandbox Code Playgroud)

请帮忙,谢谢.

Sal*_*aly 10

在我从@clemens获得信息并进行一些研究之后,我发现在我的转储文件中CREATE SEQUENCE table_id_seq有一个声明AS integer,说明为什么当我恢复到新数据库时它没有nextval()为序列创建.如果我AS integer从该CREATE SEQUENCE部分中删除该语句,则查找.

在我的转储文件中:

CREATE SEQUENCE table_id_seq
    AS integer
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;
Run Code Online (Sandbox Code Playgroud)

AS integer从转储文件中删除

CREATE SEQUENCE table_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;
Run Code Online (Sandbox Code Playgroud)

  • 问题是您在postgres 10上生成了转储,并在语法“ AS data_type”不可用的较低版本上恢复了该转储 (3认同)

Fır*_*ÇÜK 5

就我而言,序列检查区分大小写。这就是我收到关系错误的原因。所以也许它可以帮助像我这样绝望地来到这里的人。我在 SQL 语句中的单引号内使用了双引号。

SELECT nextval('"USER_ID_seq"');
Run Code Online (Sandbox Code Playgroud)

官方文档中有一些示例: https://www.postgresql.org/docs/9.1/functions-sequence.html