有没有办法在不删除表的情况下将现有主键类型从 int 更改为串行?我表里已经有很多数据了,我不想删除它。
将 int 转换为序列或多或少仅意味着向值添加序列默认值 http://www.postgresql.org/docs/9.3/static/datatype-numeric.html#DATATYPE-SERIAL,所以要把它做成连续剧;
为序列选择一个起始值,该值大于表中任何现有值
SELECT MAX(id)+1 FROM mytable
为序列创建一个序列(tablename_columnname_seq是一个好名字)
CREATE SEQUENCE test_id_seq MINVALUE 3
(假设您想从 3 开始)
更改列的默认值以使用序列
ALTER TABLE test ALTER id SET DEFAULT nextval('test_id_seq')
更改表/列所拥有的序列;
ALTER SEQUENCE test_id_seq OWNED BY test.id
一个非常简单的 SQLfiddle 演示 http://sqlfiddle.com/#!15/7427c/1.
一如既往,养成运行完整备份的习惯before运行来自 Internet 上随机人员的更改 SQL 查询;-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)