PostgreSQLにおけるUNSIGNEDについて
データベースで使用してカラムに正の整数制約をつけたい場合、CREATE TABLE文やALTER TABLE 文でUNSIGNEDを入力して制約設定を行うかと思う。
しかしPostgreSQLにUNSIGNEDはない。ないのである。
CREATE TABLE文やALTER TABLE 文で「UNSIGNED」をつけて実行すると構文エラーとなる。
じゃあPostgreSQLで正の整数にはできないのか?運用回避でなんとかするしかないのか?というとそれは違う。
CHECK制約を使用すればよいのだ。
ALTER TABLE文で記載すると以下のようになる。
ALTER TABLE [テーブル名] ADD CHECK ( [カラム名] >=1 );
これを実行した後に指定したカラムで0以下の値をインサートしようとするとエラーが発生してはじかれるようになる。ちなみにだがCHEKC制約をつける前に0以下としてインサートしたカラムがあった場合は特に問題なく動いたままになるようだ。過去分に影響は及ぼさないらしい(外部キー等で制約を追加した場合の動きについてはわからないが)。
ちなみにUNSIGNEDがPostgreSQLで使用できないとかCHECK制約を使用すればいいいとかはググっても確認できなかった。検索するワードに問題があったかもしれないが、おそらく他にも検索してもたどり着けなかった方もいるかと思う。
ググっても分からなかったことが分かったのは本を買ったからだ。参考にしたのはPostgreSQL徹底入門。PostgreSQLについてとてもわかりやすく説明してある。ググってもあまり分からない場合は購入した方がよいと思う。値段は少し高いが検索時間と悩むリソースを考えたら買うべきである。そもそもググってもわからない = 知識の下地がないため理解が薄いということだと思うので入門本を買って読みながら作業した方が効率が良い(自戒をふくめてこのような記載とする)。
本の後半はPHPを使用してPostgreSQLのDBにアクセスする手順について書いてある。PostgreSQLの本なのにPHPについてもとても分かりやすく丁寧に書いてあるので「PostgreSQL使用したいけど使用方法がわからない、構築するサービスも思いつかない」という時は本のそのまま真似るだけでできるので開発環境を作成したことがない人でもやりやすいかと思う。
転職したいが個人の実績がなくて経歴書が弱いという人は本書を購入して作成してみるのもよいのではないだろうか。