首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Postgres中实现列值更改约束

如何在Postgres中实现列值更改约束
EN

Stack Overflow用户
提问于 2014-07-30 13:43:51
回答 2查看 488关注 0票数 1

我希望确保列的值可能仅以一种定义的方式更改。例如,包含状态值的列只能根据定义的状态转换进行更改),或者列可以从NULL设置为仅一次。

我想避免在应用层上实现这些检查。

我无法找到使用常规约束的解决方案。是否有另一种方法来实现这一点,或者这样的约束在数据库层上是不受支持的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-30 13:51:30

约束只能根据行的当前值强制执行规则(检查约束)

  • 或不同表中相关行的当前状态之间的引用完整性(外键约束)
  • 或在一定程度上限制表中所有行的当前值(排除约束)。

您希望在前一状态和当前状态之间强制执行约束。这通常是用trigger实现的。

示例:

这里有很多例子。Try a search.

票数 2
EN

Stack Overflow用户

发布于 2020-10-21 18:52:13

我编写了一个python脚本,它根据所需的限制生成一个检查约束。这些约束强制为每个状态设置空列。

例如,当我有"Orders“表,而一个订单可以有”已付款“或”未支付“的状态时,让我们假设有一个类型为text的列"Invoice_number”。如果要将任何订单更新为“付费”状态,则check约束将不允许这样做,除非您将"Invoice_number“从NULL设置为非空值。

简单的检查如下所示:

代码语言:javascript
复制
ALTER TABLE orders ADD CONSTRAINT orders_state_paid_check CHECK ( CASE WHEN state = 'paid' AND (invoice_number is null) THEN false ELSE true END);

您可以在这里查看该工具:gen

现在,它正在与postgres > 9.4一起工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25038478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档