CREATE SEQUENCE
を使用する :
CREATE SEQUENCE scores_job_id_seq; -- = default name for plain a serial
次に、デフォルトの列をscores.job_id
に追加します :
ALTER TABLE scores ALTER COLUMN job_id SET DEFAULT nextval('scores_job_id_seq');
バインドする場合 列へのシーケンス(列が削除されると削除されるため)、次も実行します:
ALTER SEQUENCE scores_job_id_seq OWNED BY scores.job_id;
これらはすべて、疑似データ型 serial
を使用して置き換えることができます。 列job_id
の場合 そもそも:
- Postgresのシリアル主キー列を使用するテーブルの名前を安全かつクリーンに変更しますか?
テーブルにすでに行がある場合は、SEQUENCE
を設定することをお勧めします 次に高い値に移動し、テーブルに不足しているシリアル値を入力します:
SELECT setval('scores_job_id_seq', COALESCE(max(job_id), 1)) FROM scores;
オプション:
UPDATE scores
SET job_id = nextval('scores_job_id_seq')
WHERE job_id IS NULL;
- PostgreSQLで使用済みおよび未使用の値のシーケンスを効率的にチェックする方法
- Postgresは手動でシーケンスを変更します
- 同期が外れたときにpostgresの主キーシーケンスをリセットするにはどうすればよいですか?
残っている唯一の違いは、serial
列もNOT NULL
に設定されます 。あなたもそれを望むかもしれないし、望まないかもしれません:
ALTER TABLE scores ALTER COLUMN job_id SET NOT NULL;
しかし できません 既存のinteger
のタイプを変更するだけです :
ALTER TABLE scores ALTER job_id TYPE serial;
serial
実際のデータ型ではありません。これは、CREATE TABLE
の単なる表記上の便利な機能です。 。
Postgres10以降では、IDENTITY
を検討してください。 列:
- テーブル列の自動インクリメント