如何在postgres中的现有列中有效地添加自动递增主键?

时间:2019-03-14 14:54:41

标签: postgresql postgresql-9.5

问题

我可以将自动递增的主键添加到postgres中的空表中的预先存在的列中,但是我想知道这样做是否可以更有效。

我做了什么

在填充表之前,我需要更改一列以添加自动递增的主键。与对this question的回答类似,以下操作将起作用(假设表名为test,相关列名为col1

ALTER TABLE test ADD PRIMARY KEY (col1);
CREATE SEQUENCE seq OWNED BY test.col1;
ALTER TABLE test ALTER COLUMN col1 SET DEFAULT nextval('seq');
UPDATE test SET col1 = nextval('seq');

四行距离世界的尽头。但是,根据该答案,如果我们要添加一列而不是更改先前存在的列,则可以在一行中完成:

ALTER TABLE test ADD COLUMN col1 SERIAL PRIMARY KEY;

问题

除了预先存在的列外,是否可以在一行中执行此操作?似乎SERIAL仅限于添加新列的时间,但我认为问这个问题不会有任何伤害。我的幼稚尝试包括以下内容:

  • ALTER TABLE test ALTER COLUMN col1 SERIAL PRIMARY KEY;
  • ALTER TABLE test ADD SERIAL PRIMARY KEY (col1);

谢谢!

编辑:尽管我读过这两个问题,但都立即将其标记为重复。我觉得他们俩都使用了与我已经使用过的方法相同的方法(除非我误解了正在使用的方法),我的问题是要查看是否存在更有效的方法,尤其是在创建新列时。

0 个答案:

没有答案