我有一个表,其中一列具有无序值。我想命令此列降序并添加一列来记录其顺序。我的SQL代码是:
select *
into newtable
from oldtable
order by column_name desc;
alter table newtable add column id serial;
这会实现我的目标吗?我知道PostgreSQL中的行没有固定的顺序。所以我不确定这一点。
答案 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;