postgres:插入新行

时间:2016-11-30 14:09:08

标签: sql postgresql

我有一张这样的表:

id  | person | supporter | referredby|
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
0   | ABC    | DEF       |           |
1   | ABC    | GHI       | DEF       |
2   | CBA    | FED       |           |
3   | CBA    | IHG       | FED       |

我想要完成的是,如果referredby列中supporter列中的值不是特定人员,我希望postgres拒绝INSERT 。 (null referredby没问题)

例如,使用上面的数据:

  • 4, 'ABC', 'JKL', null:已接受(可以为空)
  • 4, 'ABC', 'JKL', 'IHG':拒绝(IHG未列为ABC的支持者)
  • 4, 'ABC', 'JKL', 'DEF':已接受(DEF被列为ABC的支持者)

可能是检查约束?我不知道怎么把它拼凑起来

1 个答案:

答案 0 :(得分:0)

添加引用person,supporter的外键。 (需要是独一无二的钥匙。)

alter table t add constraint cname unique(person, supporter);

alter table t add constraint fk foreign key (person, referredby)
    references t (person, supporter);

(ANSI SQL语法,但Postgresql可能也支持。)