在postgresql中结合UNIQUE和EXCLUSION约束

时间:2013-01-24 08:39:05

标签: database postgresql constraints

对于数据库而言,我是真正的初学者,所以任何建议都是适当的。 必须有一种方法可以在PostgreSQL中组合UNIQUE约束和EXCLUSION约束。 。 我写的下面的一个是不正确的。 (在语法上肯定,也可能在逻辑上也是如此)

我正在努力实现以下目标:

  • 单个身份验证器在给定时间可以属于1个useridx。 (因此需要UNIQUE约束)
  • 但是,身份验证者可以在不同的时间属于不同的useridx(因此需要某种EXCLUSION约束)
  • 不同的时间意味着在validform和validuntil的区间之外。

我尝试了什么:

  ALTER TABLE authentication 
  ADD CONSTRAINT lenient_constraint UNIQUE (useridx, authenticator)
  EXCLUDE USING gist(validfrom WITH =, validuntil WITH &&);

1 个答案:

答案 0 :(得分:0)

如果您询问是否可以在单个alter table语句中执行此操作,则答案为否。如果你问你是否可以在同一张桌子上做,答案是肯定的。见下文:

mydb# alter table test add unique(test);
NOTICE:  ALTER TABLE / ADD UNIQUE will create implicit index "test_test_key" for table "test"
ALTER TABLE
mydb# alter table test add exclude (test with =);
NOTICE:  ALTER TABLE / ADD EXCLUDE will create implicit index "test_test_excl" for table "test"
ALTER TABLE