[PostgreSQL] ALTER文でserial型に変えることはできないみたい。
ALTER TABLE tablename ALTER colname TYPE serial;
ERROR: type "serial" does not exist
integerで定義したものを後からserialに変更することはできないようです。そもそもserialは「型」ではなくて、「create tableする際のマクロというか呪文のようなもの」だからでしょうか。
(実際、CREATE TABLE文でserial型を指定したとき、作成された列の型はintegerになります。)
既存のカラムをserialに変更したい場合
既存の列をあとからserialにしたいときは、下記のように手動でシーケンスを作って対処するしかないようです。CREATE SEQUENCE tablename_colname_seq;
ALTER TABLE tablename ALTER colname SET DEFAULT nextval('tablename_colname_seq');
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
途中からシーケンスを使う場合は、連番の値を進めておくのを忘れずに。例えば既存のデータの連番が100で終っている場合はこのようにします。
SELECT setval('tablename_colname_seq', 100);
詳細はシーケンスについての公式マニュアルをご覧ください。http://www.postgresql.jp/document/current/html/datatype-numeric.html#DATATYPE-SERIAL
http://www.postgresql.jp/document/current/html/functions-sequence.html
カテゴリ:
PostgreSQL