我有一个表有一个无序值的列。我想降序排列此列,并添加一列以记录其顺序。我的SQL代码是:添加一个基于排序列的序列列
select *
into newtable
from oldtable
order by column_name desc;
alter table newtable add column id serial;
这会实现我的目标吗?我知道PostgreSQL中的行没有固定的顺序。所以我不确定这一点。
我有一个表有一个无序值的列。我想降序排列此列,并添加一列以记录其顺序。我的SQL代码是:添加一个基于排序列的序列列
select *
into newtable
from oldtable
order by column_name desc;
alter table newtable add column id serial;
这会实现我的目标吗?我知道PostgreSQL中的行没有固定的顺序。所以我不确定这一点。
而不是(ab)通过ALTER TABLE
使用SERIAL
,在插入时生成它。
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
)。
请不要使用'select .. into'来创建一个新表。这是一种陈旧和不赞成的语法。改用标准的SQL:'create table ... as select ...'。 – 2014-10-28 11:41:07
只要做一个简单的测试,你就会得到答案。到目前为止,我没有看到你的代码的问题。 – vyegorov 2014-10-28 11:41:56
你正在努力解决什么问题?新列也可以变得“无序”(你可以在不创建新表的情况下做到这一点)。 – 2014-10-28 11:41:57