Hi all,
Would it be possible (or reasonable) to add support for changing the type of
a column to serial or bigserial (yes, yes, I know they're not actual
types)? In effect this would mean that users who forgot to set up a
sequence could change it's type so that a new implicit sequence will be
created, set with its current value set to the highest value of whatever
column it was bound to. This thought was triggered by a user on IRC wishing
to migrate from MySQL, but had tables with some sort of ID column without
any associated sequence.
So if you had:
CREATE TABLE stuff (id int, content text);
INSERT INTO stuff (id, content) values (1,'alpha'),(2,'beta'),(5,'gamma');
You could just issue:
ALTER TABLE stuff ALTER COLUMN id TYPE serial;
And continue as so:
INSERT INTO stuff (content) values ('delta');
SELECT id from stuff;
id
----
1
2
5
6
(4 rows)
This would be instead of having to do:
CREATE SEQUENCE id_stuff_seq;
SELECT setval('id_stuff_seq', (SELECT max(id) FROM stuff))
ALTER TABLE stuff ALTER COLUMN id SET DEFAULT
nextval('id_stuff_seq'::regclass);
Which would also mean the sequence would not get dropped with the table.
Abhorrent idea, or acceptable?
--
Thom Brown
Twitter: @darkixion
IRC (freenode): dark_ixion
Registered Linux user: #516935