恢复后,从Postgresql中的列中删除我的数据库序列号
Postgresql在还原后丢失了自动增量功能。我的数据库是在Windows10(V10.1)上创建的,我在Ubuntu(V9.6)上将它恢复到Postgresql。现在我发布了这个问题,我看到了不同的版本。我没有使用任何晦涩难懂的特性,只使用带有序列的表、函数和列。而且,恢复过程没有任何抱怨。我检查了转储选项,但找不到任何导致问题的原因 使用Pgadmin右键单击表格>脚本>在我的原始表格上创建脚本,可获得以下信息:恢复后,从Postgresql中的列中删除我的数据库序列号,postgresql,Postgresql,Postgresql在还原后丢失了自动增量功能。我的数据库是在Windows10(V10.1)上创建的,我在Ubuntu(V9.6)上将它恢复到Postgresql。现在我发布了这个问题,我看到了不同的版本。我没有使用任何晦涩难懂的特性,只使用带有序列的表、函数和列。而且,恢复过程没有任何抱怨。我检查了转储选项,但找不到任何导致问题的原因 使用Pgadmin右键单击表格>脚本>在我的原始表格上创建脚本,可获得以下信息: CREATE TABLE public.produto ( prod
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中失败,并出现语法错误
后果如何
- 该表的创建方式与第一条语句类似
- 创建序列的第三条语句失败
- 以下所有需要该序列的语句也将失败
解决方案是手动编辑转储,直到它工作为止,特别是您必须删除
创建序列中的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);