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

PostgreSQLで一意の列値をシフト(更新)します

    他のすべての制約はステートメントレベルで評価され、DML操作中に行ごとのレベルで評価されるのはPK /一意制約のみであるため、これは確かに少し混乱します。

    ただし、主キー制約を延期可能として宣言することで、これを回避できます。

    create table tbl_test 
    (
      testkey   INTEGER,
      constraint pk_tbl_test primary key (testkey) deferrable initially immediate
    );
    
    insert into tbl_test values (1), (2);
    
    set constraints all deferred;
    
    update tbl_test
       set testkey = testkey +1;
    

    遅延制約にはある程度のオーバーヘッドがあるため、initially immediateとして定義します。 このオーバーヘッドは最小限に抑えられます。 set constraintを使用すると、必要なときに制約評価を延期できます。 。

    ただし、本当の問題は、主キー値に対してこれを行う必要があるのはなぜかということです。 PK値はまったく意味がないため、(使用されているDBMSに関係なく)すべての値をインクリメントする必要はないようです。



    1. Oracleでdistinctとsumの両方を一緒に使用する方法は?

    2. テーブルが2つの異なるデータベースシステムからのものである左外部結合

    3. 北欧PGDayの準備はできていますか?

    4. Python+MySQL-一括挿入