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

ONCONFLICT句で複数のconflict_targetを使用する

    ON CONFLICT 競合検出を行うには、一意のインデックス*が必要です。したがって、両方の列に一意のインデックスを作成する必要があります:

    t=# create table t (id integer, a text, b text);
    CREATE TABLE
    t=# create unique index idx_t_id_a on t (id, a);
    CREATE INDEX
    t=# insert into t values (1, 'a', 'foo');
    INSERT 0 1
    t=# insert into t values (1, 'a', 'bar') on conflict (id, a) do update set b = 'bar';
    INSERT 0 1
    t=# select * from t;
     id | a |  b  
    ----+---+-----
      1 | a | bar
    

    *一意のインデックスに加えて、除外制約を使用することもできます。これらは、一意の制約よりも少し一般的です。テーブルにidの列があるとします。 およびvalid_time (およびvalid_time tsrangeです )、重複するidを許可したい s。ただし、期間が重複している場合は除きます。一意の制約は役に立ちませんが、除外制約を使用すると、「idの場合は新しいレコードを除外する」と言うことができます。 古いidと同じ また、valid_time そのvalid_timeと重複しています 。"



    1. 結合を使用したOracleUpdateクエリ

    2. n分ごとに関数を呼び出すようにタイマーを設定するにはどうすればよいですか?

    3. 10進数のデータ型(MySQL / Postgres)を使用するとパフォーマンスが低下しますか?

    4. 10進数(s、p)または数値(s、p)?