0

我有一个从迁移MSSQLPostgreSQL(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');

下面是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,我希望将所有现有的自动编号字段更改为串行。怎么做?


我试过了

alter table company alter column companyid type serial 

 ERROR:  type "serial" does not exist
     ********** Error **********
4

1 回答 1

1

确实没有数据类型serial。它只是从序列填充的默认值的简写符号(有关详细信息,请参阅手册),基本上就是您现在所拥有的。

您的设置和定义为的列之间的唯一区别serial是序列和列之间存在链接,您也可以手动定义:

alter sequence seq_gcompany_id owned by company.companyid;

有了该链接,您就无法再将您的列与最初定义为 的列区分开来serial。此更改的作用是,如果删除使用它的表(或列),则将自动删除该序列。

于 2014-08-01T05:47:31.483 回答