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 по дате отправления: