[postgresql][sql]PostgreSQL上でオートナンバーを使う
Accessで作った既存のデータベースをPostgreSQLにエクスポートすると、オートナンバー型がinteger型に変更されます。
これをPostgreSQL上でもオートナンバーになるように、デフォルト値を直前の数値をインクリメントした値に設定します。
カラムを新規作成するときにはデータ型[SERIAL]を選べばいいのですが、途中で変更するのはちょっと面倒な処理が必要です。
SQLのCREATE SEQUENCEを使うわけですが、phpPgAdminだとGUIから登録可能。
簡単な流れは以下のとおり。
- [シーケンス]に開始値を指定して登録
- 該当カラムの[デフォルト]に「nextval('"[作成したシーケンス名]"'::regclass)」を追加
詳細な処理は以下。
[シーケンス]に開始値を指定して登録
該当データベースからスキーマを選択します。何も指定せずエクスポートした場合には「public」になっているはず。
[シーケンス]をクリックし、[シーケンスを作成する]をクリック、以下を入力する。カッコ内はPostgreSQLのdocsに載っている名前。
名前(name) | シーケンスの名前。新規にSERIAL型のカラムを登録すると[テーブル名]_[カラム名]_seqという名前のシーケンスができます。 |
---|---|
増加値(increment) | 直前の数値からいくつ増加するか。ここでは[1]を。 |
最小値(minvalue) | 番号の最小値。デフォルトは1。 |
最大値(maxvalue) | 番号の最大値。long int なのでここでは9223372036854775807を入力。 |
開始値(start) | 番号の開始値。デフォルトは最小値と同じ。ここでは100番から開始するので[100]を入力。 |
キャッシュ(cache) | アクセスを早くするためにキャッシュしておく番号の数。新規にSERIAL型のカラムを登録すると32になるので[32]と入力してますがイマイチ有用性が分からないですすいません。 |
Can cycle?(CYCLE) | 番号が最大値を超えた場合に最小値に戻るかどうか。long intを使い切るとかあり得ない。 |