我需要在表中添加约束,以使列ab始终大于列h。我试过了
ALTER TABLE batting
ADD constraint possibleHits check (ab>h);
但是返回
ERROR: check constraint "possiblehits" is violated by some row
********** Error **********
ERROR: check constraint "possiblehits" is violated by some row
SQL state: 23514
是一个错误。
我跑了
select * from batting where ab<h
并且它不返回任何行。
关于我做错的任何想法?或者有办法做一些像添加
的事情NOT VALID
到语句,以便它不会对现有行强制执行约束? 我知道这在mysql中有效,但在postgres中它只适用于键。
编辑:
正如所指出的,有些情况下ab = h但是有没有办法从约束中排除现有的行?
答案 0 :(得分:4)
答案 1 :(得分:3)
如果你想列ab总是大于列h,那么你需要删除那些ab = h的6000行,如果不想删除这6000行,你可以试试这个。
ALTER TABLE batting
ADD constraint possibleHits check(ab>=h);