加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 在Postgres中向现有列添加“serial”

发布时间:2020-12-13 16:50:17 所属栏目:百科 来源:网络整理
导读:我有一个小表(约30行)在我的Postgres 9.0数据库与一个整数ID字段(主键)当前包含从1开始,但不是使用’serial’关键字创建的唯一顺序整数。 我如何改变这个表,从现在开始插入到这个表将导致这个字段的行为好像它是用’serial’作为一个类型创建的? 看看下面
我有一个小表(约30行)在我的Postgres 9.0数据库与一个整数ID字段(主键)当前包含从1开始,但不是使用’serial’关键字创建的唯一顺序整数。

我如何改变这个表,从现在开始插入到这个表将导致这个字段的行为好像它是用’serial’作为一个类型创建的?

看看下面的命令(特别是注释的块)。
DROP TABLE foo;
DROP TABLE bar;

CREATE TABLE foo (a int,b text);
CREATE TABLE bar (a serial,b text);

INSERT INTO foo (a,b) SELECT i,'foo ' || i::text FROM generate_series(1,5) i;
INSERT INTO bar (b) SELECT 'bar ' || i::text FROM generate_series(1,5) i;

-- blocks of commands to turn foo into bar
CREATE SEQUENCE foo_a_seq;
ALTER TABLE foo ALTER COLUMN a SET DEFAULT nextval('foo_a_seq');
ALTER TABLE foo ALTER COLUMN a SET NOT NULL;
ALTER SEQUENCE foo_a_seq OWNED BY foo.a;    -- 8.2 or later

SELECT MAX(a) FROM foo;
SELECT setval('foo_a_seq',5);  -- replace 5 by SELECT MAX result

INSERT INTO foo (b) VALUES('teste');
INSERT INTO bar (b) VALUES('teste');

SELECT * FROM foo;
SELECT * FROM bar;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读