PostgreSQL的列值必须在一个序列中[英] PostgreSQL column values must be in a sequence

本文是小编为大家收集整理的关于PostgreSQL的列值必须在一个序列中的处理方法,想解了PostgreSQL的列值必须在一个序列中的问题怎么解决?PostgreSQL的列值必须在一个序列中问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

如何在 PostgreSQL 中定义一个列,使得每个值都必须在一个序列中,而不是使用类型 serial 时得到的序列,而是一个不能插入值 2 的序列,除非其中已经存在值 1列?

推荐答案

理论上,您可以使用这样的约束.(但它在实践中行不通.)

  1. 计算行数.
  2. 评估max(column) - min(column) + 1.
  3. 比较结果.

您可能必须在创建 CHECK 约束之前插入一行.如果没有,max(column) 将返回 NULL.一排,

  1. 计算行数 (1).
  2. 评估max(column) - min(column) + 1.(1 - 1 + 1 = 1)
  3. 比较结果.(1 = 1)

有 10 行..

  1. 计算行数 (10).
  2. 评估max(column) - min(column) + 1.(10 - 1 + 1 = 10)
  3. 比较结果.(10 = 10)

序列是否从 1 开始无关紧要;如果存在间隙,这种检查方式将始终显示间隙.如果您需要保证无间隙序列从 1 开始,您可以将其添加到 CHECK 约束中.

据我所知,没有任何方法可以声明性地使用任何当前的 dbms.为此,您需要对 CREATE ASSERTION 的支持.(但我可能是错的.)在 PostgreSQL 中,我认为您对此的唯一尝试涉及多个 AFTER 触发器中的过程代码.

我只有一张需要无缝的桌子.这是一个日历表.我们每晚运行一次查询来进行这些计算,它让我知道我是否有差距.

本文地址:https://www.itbaoku.cn/post/1764125.html