Add a serial column to a table based on a sort clause
От | Igor Katson |
---|---|
Тема | Add a serial column to a table based on a sort clause |
Дата | |
Msg-id | 4A9E67AD.3040100@gmail.com обсуждение исходный текст |
Ответы |
Re: Add a serial column to a table based on a sort clause
|
Список | pgsql-general |
I have a table, which has a creation_ts (timestamp) column, but does not have a id (serial) column. I want to add such a one, but, AFAIK, if I enter ALTER TABLE table ADD COLUMN id serial it will randomly put the sequence numbers. I wrote a function, which uses a cursor and UPDATE WHERE CURRENT OF, and it works, but is there any other, more "elegant", way? CREATE OR REPLACE FUNCTION newsfeed_seq_add_cursor () RETURNS void AS $$ DECLARE curs refcursor; rec record; BEGIN create sequence seq; ALTER TABLE table ADD COLUMN id int; OPEN curs FOR SELECT * FROM table ORDER BY creation_ts FOR UPDATE; FETCH curs INTO rec; WHILE FOUND IS TRUE LOOP UPDATE table SET id = nextval('seq') WHERE CURRENT OF curs; END LOOP; ALTER TABLE table ALTER COLUMN id SET NOT NULL, ALTER COLUMN id SET DEFAULT nextval('seq'); END; $$ language plpgsql;
В списке pgsql-general по дате отправления: