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

Postgresの日付の重複制約

    わかりました、私はこれをすることになりました:

    CREATE TABLE test (
        from_ts TIMESTAMPTZ,
        to_ts TIMESTAMPTZ,
        account_id INTEGER DEFAULT 1,
        product_id INTEGER DEFAULT 1,
        CHECK ( from_ts < to_ts ),
        CONSTRAINT overlapping_times EXCLUDE USING GIST (
            account_id WITH =,
            product_id WITH =,
            period(from_ts, CASE WHEN to_ts IS NULL THEN 'infinity' ELSE to_ts END) WITH &&
        )
    );
    

    無限大、トランザクションプルーフで完全に機能します。

    postgres 9.2でネイティブになる一時的な拡張機能と、9.1で拡張機能として利用できるbtree_gistをインストールする必要がありました。CREATE EXTENSION btree_gist;

    nb:nullタイムスタンプがない場合は、私の質問で指定されているように、boxメソッドを使用できる一時的な拡張を使用する必要はありません。



    1. MySQLで空の値を許可する一意の制約

    2. MySQLクエリのフィールドを分割/展開できますか?

    3. PHP、ORM、MSSQL、Unicode、これらを一緒に機能させることは可能ですか?

    4. plpgsqlを使用して関数内の現在の関数の名前を取得する