如何在PostgreSQL中将自动编号id字段更改为串行类型
我有一个从如何在PostgreSQL中将自动编号id字段更改为串行类型,postgresql,autonumber,Postgresql,Autonumber,我有一个从MSSQL迁移到PostgreSQL(9.2)的数据库。 这个数据库有100多个表,这些表有自动编号字段(主键字段),下面给出的是一个表的示例 CREATE TABLE company ( companyid integer NOT NULL DEFAULT nextval('seq_company_id'::regclass), company character varying(100), add1 character varying(100), add2 char
MSSQL
迁移到PostgreSQL(9.2)
的数据库。
这个数据库有100多个表,这些表有自动编号字段(主键字段),下面给出的是一个表的示例
CREATE TABLE company
(
companyid integer NOT NULL DEFAULT nextval('seq_company_id'::regclass),
company character varying(100),
add1 character varying(100),
add2 character varying(100),
add3 character varying(100),
phoneoff character varying(30),
phoneres character varying(30)
CONSTRAINT gcompany_pkey PRIMARY KEY (companyid)
)
样本数据
INSERT INTO company (company, add1, add2, add3, phoneoff, phoneres) VALUES
('company1','add1','add2','add3','00055544','7788848');
INSERT INTO company (company, add1, add2, add3, phoneoff, phoneres) VALUES
('company2','add9','add5','add2','00088844','7458844');
INSERT INTO company (company, add1, add2, add3, phoneoff, phoneres) VALUES
('company5','add5','add8','add7','00099944','2218844');
下面是此表的顺序
在阅读PostgreSQL文档时,我读到了有关的内容,因此我希望将所有现有的自动编号字段更改为串行。 怎么做
我试过了
确实没有数据类型
serial
。它只是从序列填充的默认值的简写符号(有关详细信息,请参阅),基本上就是您现在拥有的
设置与定义为序列的列之间的唯一区别在于序列与列之间存在链接,您也可以手动定义该链接:
alter sequence seq_gcompany_id owned by company.companyid;
有了该链接,您就无法再将您的列与最初定义为
serial
的列区分开来。此更改所做的是,如果删除使用序列的表(或列),序列将自动删除 我已经阅读了答案,但在我的情况下,我已经有序列!!好的,运行时有一个问题:获取错误:序列必须和它链接到的表有相同的所有者。
@keet:这很清楚,不是吗?显然,您创建的序列的所有者与表的所有者不同。可能是使用错误的用户运行脚本的情况。
alter table company alter column companyid type serial
ERROR: type "serial" does not exist
********** Error **********
alter sequence seq_gcompany_id owned by company.companyid;