PostgreSQLでbigintのid列を後付けでbigserialに変換する方法
短い記事です。
PostgreSQLのバージョンは、9.4.5です。
create as select ...
でテーブルを作ったら、bigserial
にすべきid
がbigint
のままになっていて、アプリがコケていたというお粗末な話。
後からbigserial
にできるのかどうか知らなかったので、とりあえずalter table column ...
で変えようとしたけど、上手く行きませんでした。
調べた結果、参考にしたページはこちら。
- sql - PostgreSQL column type conversion form bigint to bigserial - Stack Overflow
求めていた答そのものがありました。
bigserial
は実際のデータ型ではなく、create
文のときに使える一種のコマンドのようなものらしいです。
スキーマをschema1
、テーブルをtable1
とすると、以下のようにすれば
schema1.table1.id
は、bigint
でpkey
です。
create sequence schema1.table1_id_seq; select setval('schema1.table1_id_seq', 1500); -- idを1500から始める alter table schema1.table1 alter column id set default nextval('schema1.table1_id_seq'); alter sequence schema1.table1_id_seq owned by schema1.table1.id;
シーケンスの開始値は、キリの良い数値にしたかったので固定値をセットしましたが、select max(id) + 1 from ...
で取った方が良いかもですね。