如何在PostgreSQL中添加一个自动递增的主键到现有的表?
我有一个现有的数据表。 有没有办法添加主键而不删除和重新创build表?
( 更新 – 感谢评论的人 )
PostgreSQL的现代版本
假设你有一个名为test1
的表,你想添加一个自动递增的主键id
(代理)列。 在PostgreSQL的最新版本中,以下命令应该足够了:
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
旧版本的PostgreSQL
在PostgreSQL的旧版本(在8.x以前),你必须做所有的肮脏的工作。 下面的命令序列应该做的伎俩:
ALTER TABLE test1 ADD COLUMN id INTEGER; CREATE SEQUENCE test_id_seq OWNED BY test1.id; ALTER TABLE test ALTER COLUMN id SET DEFAULT nextval('test_id_seq'); UPDATE test1 SET id = nextval('test_id_seq');
同样,在Postgres的最新版本中,这大致相当于上面的单个命令。
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
这就是你需要的一切:
- 添加
id
列 - 用从1到count(*)的序列填充它。
- 将其设置为主键/不为空。
信用给@resnyanskiy谁给了这个答案的评论。