我可以将自动递增的主键添加到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);
谢谢!
编辑:尽管我读过这两个问题,但都立即将其标记为重复。我觉得他们俩都使用了与我已经使用过的方法相同的方法(除非我误解了正在使用的方法),我的问题是要查看是否存在更有效的方法,尤其是在创建新列时。