如何在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;