根据已排序的列添加序列列

时间:2014-10-28 11:39:12

标签: postgresql

我有一个表,其中一列具有无序值。我想命令此列降序并添加一列来记录其顺序。我的SQL代码是:

select *
into newtable
from oldtable
order by column_name desc;

alter table newtable add column id serial;

这会实现我的目标吗?我知道PostgreSQL中的行没有固定的顺序。所以我不确定这一点。

2 个答案:

答案 0 :(得分:3)

而不是(ab)使用SERIAL通过ALTER TABLE,而不是在插入时生成它。

CREATE TABLE newtable (id serial unique not null, LIKE oldtable INCLUDING ALL);

INSERT INTO newtable 
SELECT nextval('newtable_id_seq'), *
FROM oldtable
ORDER BY column_name desc;

这可以避免表格重写,并且与之前的方法不同,可以保证产生正确的顺序。

(如果您希望它是PK,并且前一个表没有PK,请将unique not null更改为primary key。如果前一个表中有PK,则您需要使用排除LIKE)的constraints变体。

答案 1 :(得分:0)

您可以首先创建一个新表,并根据您要使用的列进行排序:

CREATE TABLE newtable AS
SELECT * FROM oldtable
ORDER BY column_name desc;

此后,由于要从最大到最小排序,可以在表中添加一个新列:

ALTER TABLE newtable ADD COLUMN id serial unique;