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

这就是你需要的一切:

  1. 添加id
  2. 用从1到count(*)的序列填充它。
  3. 将其设置为主键/不为空。

信用给@resnyanskiy谁给了这个答案的评论。