我有一个从MSSQL
迁移到PostgreSQL(9.2)
的数据库。
这个数据库有100多个表,这些表有自动编号字段(PRIMARY KEY字段),下面给出的是一个表的例子
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');
及以下是此表的sequence
CREATE SEQUENCE seq_company_id
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
ALTER TABLE seq_company_id
OWNER TO postgres;
在阅读PostgreSQL文档时我读到了Serial Types
所以我希望将所有现有的自动编号字段更改为serial。
怎么做?
我试过了
alter table company alter column companyid type serial
ERROR: type "serial" does not exist
********** Error **********
答案 0 :(得分:1)
确实没有数据类型serial
。它只是从序列填充的默认值的简写表示法(有关详细信息,请参阅the manual),基本上就是您现在所拥有的。
您的设置与定义为serial
的列之间的唯一区别是序列和列之间存在链接,您也可以手动定义:
alter sequence seq_gcompany_id owned by company.companyid;
使用该链接,您无法再将列与最初定义为serial
的列区分开来。此更改的作用是,如果删除使用它的表(或列),则会自动删除序列。