恢复后,从Postgresql中的列中删除我的数据库序列号

恢复后,从Postgresql中的列中删除我的数据库序列号,postgresql,Postgresql,Postgresql在还原后丢失了自动增量功能。我的数据库是在Windows10(V10.1)上创建的,我在Ubuntu(V9.6)上将它恢复到Postgresql。现在我发布了这个问题,我看到了不同的版本。我没有使用任何晦涩难懂的特性,只使用带有序列的表、函数和列。而且,恢复过程没有任何抱怨。我检查了转储选项,但找不到任何导致问题的原因 使用Pgadmin右键单击表格>脚本>在我的原始表格上创建脚本,可获得以下信息: CREATE TABLE public.produto ( prod

Postgresql在还原后丢失了自动增量功能。我的数据库是在Windows10(V10.1)上创建的,我在Ubuntu(V9.6)上将它恢复到Postgresql。现在我发布了这个问题,我看到了不同的版本。我没有使用任何晦涩难懂的特性,只使用带有序列的表、函数和列。而且,恢复过程没有任何抱怨。我检查了转储选项,但找不到任何导致问题的原因

使用Pgadmin右键单击表格>脚本>在我的原始表格上创建脚本,可获得以下信息:

CREATE TABLE public.produto
(
    produto_id integer NOT NULL DEFAULT nextval('produto_produto_id_seq'::regclass),
    ...

);
在我的服务器中,还原的数据库。它似乎失去了功能

CREATE TABLE public.produto
(
        produto_id integer NOT NULL,
        ...

);

在数据库还原过程中未检查错误;应该有一些

像您这样的表的转储在PostgreSQL v10中看起来是这样的(这是10.3,在10.1中看起来略有不同,但这与本例无关):

现在的问题是,在PostgreSQL v10中,
AS integer
被引入了
创建序列
,因此该语句将在9.6中失败,并出现语法错误

后果如何

  • 该表的创建方式与第一条语句类似

  • 创建序列的第三条语句失败

  • 以下所有需要该序列的语句也将失败

注意:不支持使用dump和restore降级PostgeSQL


解决方案是手动编辑转储,直到它工作为止,特别是您必须删除
创建序列中的
AS integer
AS bigint
子句

当我的函数开始失败时,我注意到了这个问题。“produto_id”不能为空。您正在导入旧版本(可能会忽略某些错误)。请参阅:解决方法可以是:分别转储DDL和副本/数据,并进行一些认真的编辑。或者:将目标升级到Postgres-10.x
CREATE TABLE public.produto (
    produto_id integer NOT NULL
);

ALTER TABLE public.produto OWNER TO laurenz;

CREATE SEQUENCE public.produto_produto_id_seq
    AS integer
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

ALTER TABLE public.produto_produto_id_seq OWNER TO laurenz;

ALTER SEQUENCE public.produto_produto_id_seq
    OWNED BY public.produto.produto_id;

ALTER TABLE ONLY public.produto
    ALTER COLUMN produto_id
    SET DEFAULT nextval('public.produto_produto_id_seq'::regclass);