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

PostgreSQL9.4-EXCLUDE制約でカスタム演算子を使用する

    あなたは本当の試練を選びました。一意のインデックスを使用します。これは、はるかに簡単、安全、高速です。

    CREATE TABLE foo (
        foo_id serial PRIMARY KEY,
        foo text NOT NULL,
        bar timestamptz,
        baz timestamptz
    );
    CREATE TABLE
    
    CREATE UNIQUE INDEX foo_foo_bar_baz_idx ON foo 
    (foo, coalesce(bar, 'infinity'), coalesce(baz, 'infinity'));
    CREATE INDEX
    
    INSERT INTO foo VALUES
    (default, '', null, null),
    (default, '', now(), null),
    (default, '', null, now());
    INSERT 0 3
    
    INSERT INTO foo VALUES
    (default, '', null, null);
    ERROR:  duplicate key value violates unique constraint "foo_foo_bar_baz_idx"
    DETAIL:  Key (foo, (COALESCE(bar, 'infinity'::timestamp with time zone)), (COALESCE(baz, 'infinity'::timestamp with time zone)))=(, infinity, infinity) already exists.
    



    1. Javaでバイト配列をBlobに変換する最も簡単な方法

    2. このSQLがユニオンを使用した理由すべてがデータを返さなかった

    3. DataFrameをpostgresテーブルに書き込む方法は?

    4. jsonキーでグループ化されたMySQLSUMjson値