作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有“货币”列的表格。
我想防止进一步插入某些货币,而不删除现有货币。
最初我在考虑验证触发器。
然后我发现了NOT VALID
ALTER TABLE ADD CONSTRAINT
的选项,这会阻止验证现有数据。
The documentation似乎暗示NOT VALID
选项主要是出于性能原因,以允许用户将验证推迟到以后。但没有明确说明它不能用于保留旧(无效)数据的目的。
在 this post ,这家伙说:“您甚至可以将约束保留在 NOT VALID
状态,因为这更好地反射(reflect)了它的实际作用:检查新行,但不对现有数据提供任何保证。NOT VALID
检查没有任何问题约束。”
那么,可以NOT VALID
选项可用于此目的?或者做一个验证触发器会更好吗?
最佳答案
引用遗漏的部分是这样的:
https://www.postgresql.org/docs/current/sql-altertable.html
“约束仍将针对后续插入或更新强制执行(也就是说,除非引用表中有匹配的行,否则它们将失败,在外键的情况下,或者除非新行与指定的行匹配,否则它们将失败检查条件)。”
因此,如果有人再次更新旧行,则将应用约束。 NOT VALID
只是随着时间的推移传播验证的一种方式。如果您想在列上维护多个验证状态,您将需要一个触发器来根据您选择的任何条件执行此操作。
关于PostgreSQL : NOT VALID constraint vs validation trigger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62968292/
我是一名优秀的程序员,十分优秀!