を記入されている場合にのみ:POSTGRES - 挿入特定の列が持って
ID start_date end_date account
1 2016-06-30 null 123
1 2017-04-19 null 111
1 2017-04-26 2017-07-30 789
達成したいと思います:
はその意志制約/インデックス/他のメカニズムを作成する方法はあります次の点を確認してください:
- IDとアカウントが存在し、終了日がnullの場合 - >何もしない
- IDとアカウントが存在し、終了日がnullでない場合 - >だから、
行を挿入:
insert into table (ID, start_date, account) values (1,2016-08-01,123)
- > INSERT ROW - >何も
insert into table (ID, start_date, account) values (1,2017-04-26, 789)
を起こりません
私はおそらくCHECK制約があります。私は上記のようなものか、それとも何かをチェックしますか?またはインデックス:
create unique index unique_account on table (ID, account) where end_date is null
あなたは、ストアドプロシージャへの挿入をラップすることにより、それを達成することができます。そして、テーブルへの書き込みアクセスを拒否します。したがって、すべての書き込みは、必要なすべてのチェックを適用する手順を経なければなりません。ああ、あなたはすでにそれについて考えていた。 –
私はあなたが実際には重複しない日付範囲({id、account}に従う)を強制するという気持ちを持っています。その場合、* open *間隔に '+ infinity'を使用する方がNULLよりも実用的でしょう。 – wildplasser