« PostgreSQLでもconcatできた | トップページ | 若い子たちのFacebook »

2014.09.12

シリアル型は実はデータ型ではない

シーケンスに関するメモー。
公式マニュアルに明記されているが、serial型というのは実際には型ではなくinteger型のデータ列に新規シーケンスとDefault値にシーケンスのnextvalを割り当てているだけである。

このため、

ALTER TABLE ALTER COLUMN hogehoge TYPE serial;
はエラーになる。
既存カラムのシリアル型への変更は、CREATE SEQUENCE とALTER COLUMN hogehoge SET DEFAULT nextval('test_col2_seq'::regclass);をセットで実行する形となる。

PostgreSQLの連番型は一意制約をもっていないので、既存のInteger列を連番にした場合は値が重複しているかもしれない点に注意である。(そんなことをするケースがあるかどうかはやや不明だが(^^;)
一意性制約がないのでサイクリック設定も矛盾無くできる、と考えればいいだろう。

|

« PostgreSQLでもconcatできた | トップページ | 若い子たちのFacebook »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2022/60299460

この記事へのトラックバック一覧です: シリアル型は実はデータ型ではない:

« PostgreSQLでもconcatできた | トップページ | 若い子たちのFacebook »