sql >> データベース >  >> RDS >> PostgreSQL

フィールド(レコードのIDではない)へのPostgreSQLシーケンスの作成

    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を検討してください。 列:

    • テーブル列の自動インクリメント


    1. SQL Serverシステムデータベース–MSDBのメンテナンス

    2. JDBC-Oracle ArrayIndexOutOfBoundsException

    3. PostgreSQL論理レプリケーションの落とし穴

    4. PostgresのRails配列列に新しいデータが保持されない