0
と要旨を使用したノンオーバーラップ期間、私は要旨Postgresの制約
CREATE TABLE foo(
id serial,
company_id int NOT NULL,
primarylisting boolean NOT NULL,
validrange daterange NOT NULL,
CONSTRAINT foo_primarykey PRIMARY KEY (id)
) WITH (OIDS=FALSE);
を用いた通常の「非重畳」の期間にひねりを持って、私は(外部キー)company_idsとIを有している上記の表を持っていますsecurityidsを作成しています。
各社はいつでも多くの証券を保有できますが、1つのセキュリティだけがプライマリセキュリティになります。私は次のようにその何かを疑うが、フォローする例を見つけることができません:それは= WITH primarylistingすることができないこと
ALTER TABLE foo ADD CONSTRAINT unique_primarylisting_daterange
EXCLUDE USING gist (company_id WITH =,validrange WITH &&) where primarylisting=1;
または
ALTER TABLE foo ADD CONSTRAINT unique_primarylisting_daterange
EXCLUDE USING gist (company_id WITH =,validrange WITH &&, primarylisting WITH =1);
ノート私は複数を持つことができない一方であるためいずれかの時点で第一次証券を取得すると、複数の非主要証券を保有することができます。
おかげ
'(のcompany_id WITH =、validrange WITH &&)WHERE(primarylisting)' [要旨をすべき使用したEXCLUDE仕事](https://www.postgresql.org/docs/current/static/sql-createtable.html#SQL-CREATETABLE-EXCLUDE)。 (これは部分的な除外の制約になります) - [btree_gist'モジュール](https://www.postgresql.org/docs/current/static/btree-gist.html)も使いたいでしょう。 – pozs
受賞者!ありがとうございます - 答えとしてマークする方法がわからない... – user1487861