PostgreSQL 约束,在提交时检查,而不是更早检查[重复]

2023-11-22

是否可以在 PostgreSQL 中创建唯一索引或其他类型的约束,这将在事务 COMMIT 上进行检查,而不是提前一毫秒?

我需要一对 (record_id, ordering) 的索引,因此我确保在给定的 record_id 中只有一个且不超过一个记录具有相同的顺序。问题出在哪里?好吧,问题在于我使用的 Web 框架处理重新排序项目的方式。看起来,当移动一个项目时,当其排序顺序发生更改时,框架会使用新的排序值写入新项目,然后不久之后它会更新另一个项目,从而创建一种临时情况,其中多个记录具有相同的订购值。重新排序所有内容后,所有记录都会更新,并且在事务提交时,一切都应该再次正常。

如果重要的话,我正在使用 PostgreSQL 10。


Use 设定限制命令:

设定限制

SET CONSTRAINTS — 设置当前事务的约束检查时间

Synopsis

SET CONSTRAINTS { ALL | name [, ...] } { DEFERRED | IMMEDIATE }

描述

SET CONSTRAINTS 设置当前事务中约束检查的行为。直接约束是 在每个语句的末尾进行检查。 DEFERRED 约束不是 检查直到事务提交。每个约束都有自己的 立即或延迟模式。

创建时,约束被赋予以下三个特征之一: 可延迟初始延迟、可延迟初始立即或不可 可延期。第三类始终是 IMMEDIATE 并且不受 设置约束命令。前两节课每 以指定模式进行交易,但其行为可以更改 在事务内通过 SET CONSTRAINTS。

带有约束名称列表的 SET CONSTRAINTS 会更改 只是这些约束(都必须是可推迟的)。每个约束 名称可以是模式限定的。使用当前架构搜索路径 如果未指定模式名称,则查找第一个匹配的名称。放 CONSTRAINTS ALL 更改所有可延迟约束的模式。

当 SET CONSTRAINTS 将约束模式从 DEFERRED 更改为 新模式立即追溯生效:任何未完成的 数据修改将在结束时检查 相反,交易是在 SET 执行期间检查的 约束命令。如果违反任何此类约束,则 SET CONSTRAINTS 失败(并且不会更改约束模式)。因此,设置 CONSTRAINTS 可用于强制检查约束发生在 交易中的特定点。

目前,只有 UNIQUE、PRIMARY KEY、REFERENCES(外键)和 EXCLUDE 约束受此设置的影响。 NOT NULL 并检查 插入行或插入行时总是立即检查约束 修改(不在声明末尾)。独特性和排他性 还检查尚未声明 DEFERRABLE 的约束 立即地。

声明为“约束触发器”的触发器的触发是 也受此设置控制——它们在 应检查相关约束。


您还可以在(例如)的参考文档中找到创建表

[ CONSTRAINT constraint_name ]
{ NOT NULL |
  NULL |
  CHECK ( expression ) [ NO INHERIT ] |
  DEFAULT default_expr |
  GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ] |
  UNIQUE index_parameters |
  PRIMARY KEY index_parameters |
  REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
    [ ON DELETE action ] [ ON UPDATE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

约束可以是:

  • 最初推迟|最初立即
  • 可延期|不可延期
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL 约束,在提交时检查,而不是更早检查[重复] 的相关文章

  • 获取mysql中逗号分隔行中不同值的计数

    一个表 Jobs 有 2 列 JobId 城市 当我们保存工作时 工作位置可能是多个城市 如下所示 JobId City 1 New York 2 New York Ohio Virginia 3 New York Virginia 我如何
  • 更改mysql数据库表中的日期格式

    大家早上好 只是一个简单的问题 在我现有的 MySql 数据库中 我几乎没有包含日期 的列 目前这些是年 月 日格式 但现在我需要将其全部更改为年 月 日格式 我试过了select date format curdate d m Y 但它不
  • 从 call_log 中获取最大并发通话数

    我需要帮助在 MySQL 5 0 77 中编写一个查询 根据下面所示的数据 办公室一天的通话量 返回并发电话呼叫的峰值数量 我只是想知道一天中任何特定时间同时打电话的人数最多是多少 首先 这是 MySQL 表 CREATE TABLE ca
  • postgresql 不同的不工作

    我使用以下代码从数据库获取值 但是当我编写这段代码时 测试看看问题出在哪里 我注意到查询没有从数据库中获取不同的值 这是查询 select distinct ca id as id acc name as accName pIsu name
  • meta_query,如何使用关系 OR 和 AND 进行搜索?

    已解决 请参阅下面的答案 我有一个名为的自定义帖子类型BOOKS 它有几个自定义字段 名称为 TITLE AUTHOR GENRE RATING 我该如何修复我的meta query下面的代码以便仅books在自定义字段中包含搜索词 tit
  • 处理与不同相关实体的一对多的正确模式

    我有一个 C 项目 我使用实体框架作为 ORM 我有一个User 可以向多家银行付款 每家银行都是一个独立的实体 并且每家银行都由不同的字段描述 问题是 一User可以没有或有很多不同的Banks 我不太确定如何对此进行建模 临时解决方案是
  • 如何在 PostgreSQL 中返回不同时区的当前日期

    我正在开发一个使用东部时间并将数据库设置为太平洋时间的应用程序 这已经引起了一些问题 但我们被告知不可能有其他方式 所以我们只能解决它 不管怎样 我遇到的麻烦之一就是获取今天的约会 由于数据库位于太平洋 如果我使用以下命令询问今天的日期cu
  • 向带有检查约束 SQL 的表添加列

    我想向表中添加一列 然后添加一个检查约束以确保其大于 0 我似乎无法让它在 oracle sl Developer 中运行 Alter TABLE store101 add column Base salary Number 7 2 con
  • SQL Server 中离线索引重建和在线索引重建有什么区别?

    重建索引时 有一个选项ONLINE OFF and ONLINE ON 我知道当ONLINE模式打开时 它会复制索引 切换新查询以利用它 然后重建原始索引 使用版本控制跟踪两者的更改 如果我错了 请纠正我 但是 SQL 在离线模式下会做什么
  • PostgreSQL:删除数据库但数据库仍然存在[重复]

    这个问题在这里已经有答案了 我是 PostgreSQL 的新手 我尝试着理解它 我熟悉数据库和MySQL 我正在尝试删除我创建的数据库 因为 psql 似乎忽略了我尝试通过 Django 推送的更改 当我执行时 l我得到以下回复 List
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • 使用用户定义函数 MySql 时出错

    您好 请帮我解决这个问题 提前致谢 我在数据库中定义了这些函数 CREATE FUNCTION levenshtein s1 VARCHAR 255 s2 VARCHAR 255 RETURNS INT DETERMINISTIC BEGI
  • 如何确定层级组织中的权限?

    我正在尝试创建高性能逻辑来确定分层组织内的权限 员工被分配到一个或多个单位 单元是分层的 理论上 无限深度 实际上不超过 6 层 例如 员工Jane可能是Supervisor of the Accounts Receivable单元 的子单
  • MySQL InnoDB 约束不起作用

    我偶然发现 innoDB 约束的奇怪行为 但找不到原因 我有包含数据的表格 下面列出了它们的结构 CREATE TABLE contents id int 10 unsigned NOT NULL AUTO INCREMENT title
  • 如何将今天的日期返回到 Oracle 中的变量

    我想做这个 DECLARE today as smalldatetime SELECT today GetDate 但我需要一个oracle翻译 甲骨文使用SYSDATE 还有 ANSI 标准CURRENT TIMESTAMP 除其他外 S
  • JPA 支持查询 Postgres JSON 字段

    JPA 是否已经支持处理 JSON 字段的查询 如下所示 select from person where info gt gt age numeric 40 select from person where info gt gt firs
  • 使用 DISTINCT 进行查询需要很长时间

    我正在使用 Microsoft Access 2003 我的项目中的一个表单需要很长时间才能向用户显示 这是适用的查询 SELECT DISTINCT tb KonzeptDaten DFCC tb KonzeptDaten OBD Cod
  • 在 plpgsql 函数中使用 quote_ident()

    我是创建 plpgsql 函数的新手 我需要一些有关在函数内部执行的动态命令上使用 quote ident 甚至 quote literal 的说明 希望有人能给我一个关于它们如何在函数内部工作的具体解释 TIA 这是一个例子 EXECUT
  • 如何在 SQL Server 2012 中选择除一列之外的所有列? [复制]

    这个问题在这里已经有答案了 有没有一种方法可以选择所有列 但只选择我不想选择的特定列 我的意思是有时我会遇到这样的问题 表有数百个字段 而我只需要删除一个字段 我需要重写所有列吗 有什么窍门吗 喜欢select
  • 重用 t-sql 游标的起始位置?

    我正在开发一个在临时表上使用游标的存储过程 我已经阅读了一些关于为什么不需要游标的内容 但在这种情况下我相信我仍然需要使用游标 在我的过程中 我需要遍历表的行两次 声明游标后 已经单步执行临时表并关闭游标 重新打开时游标的位置是否仍保留在表

随机推荐

  • 为什么 Django 的 DetailView 没有可重用的模板?

    在 Django 中 在模板中显示表单相当简单
  • 如何在discord.js中通过ID查找用户

    我希望我的机器人能够为使用其 ID 声明的特定用户赋予特定角色 我试过 const user bot users cache get args 2 user roles add role ID 你在这里遇到的问题是你得到了一个User对象而
  • HTML Canvas:同时绘制多个 getContext

    我正在使用 websockets 构建一个工具 该工具允许多个用户在彼此的画布上 绘图 用户在画布上绘图 包含 mousedown mouseup 事件和坐标的对象会立即推送给其他用户 然后将其绘制在他们的画布上 这给出了多个用户在同一个地
  • hidesBottomBarWhenPushed 在 iOS 7 中被忽略

    这段代码在 iOS 7 发布之前一直运行良好 我正在分配一个UIViewController with hidesBottomBarWhenPushed as YES 作为rootViewController of an UINavigat
  • 部署 ASP.NET 网站并更新 MSSQL 数据库,零停机时间

    我对 ASP NET 网站和 MSSQL 数据库部署有疑问 我们正在托管 ASP NET 网站并开发了新版本 一些 ASP NET 文件已更改 数据库也进行了一些修改 在不停机的情况下上传新版本网站和升级 MSSQL 数据库的最佳理由是什么
  • 编程错误-sqlalchemy-on_conflict_do_update

    按照此question 正如 Ilja Everil 在他的书中提到的answer 我创建了一个表对象 from sqlalchemy import metadata MetaData idTagTable Table id tag met
  • 如何传递 Terraform S3 后端资源的变量?

    terraform backend s3 bucket mybucket key path to my key region us east 1 是否无法通过变量文件为上面的存储桶和键提供值 因为当我尝试这样做时 terraform bac
  • 使用Python for循环更改变量名称[重复]

    这个问题在这里已经有答案了 我只是想知道是否有人知道一种基于 for 循环更改变量名称的方法 如下所示 for i in range 3 group i self getGroup selected header i 以便更改变量名称以适应
  • PL/SQL 在 IN CLAUSE 中使用 VARRAY

    是否可以在 pl sql 的 IN CLAUSE 中使用 VARRAY 是的 可以 前提是 VARRAY 类型是全局类型 并且对于某些 PL SQL 代码来说不是本地类型 CREATE OR REPLACE TYPE str tab typ
  • 如何安装.tar.bz2文件

    我是 Linux 新手 正在使用 Ubuntu 正在尝试安装firefox 4 0b1 tar bz2但不知道如何从命令行安装它 我怎么能这样做呢 在 macOS 上 一些安装程序类似于 xxxxx bz2 要安装此类安装程序 您只需将扩展
  • 将 Html 渲染或转换为“格式化”文本 (.NET)

    我正在将一些数据从另一个测试 错误跟踪工具导入到 tfs 中 并且我想转换它的描述 它是简单的 HTML 所以是一个纯字符串 其中保留了 HTML 的 布局 例如 ol li Log on with user Acme amp Co li
  • 你能将 HTTPS 功能添加到 python Flask Web 服务器吗?

    我正在尝试构建一个 Web 界面来模拟网络设备上的静态接口 该网络设备使用摘要式身份验证和 HTTPS 我想出了如何将摘要式身份验证集成到 Web 服务器中 但我似乎无法找到如何使用 FLASK 获取 https 如果您可以向我展示如何实现
  • 如何中断 IMAP 的 IDLE?

    我正在使用 Javamail API 连接到我的 IMAP 服务器 javax mail Folder idle 的一切工作都很好method 当新邮件进来时 我的监听器会被呼叫 但是问题是永远空闲块 我该如何中断它 如何在不终止 Java
  • Hibernate 4.3.0.Final 和 Spring Data JPA 1.4.3.RELEASE

    我第一次尝试设置和使用 Spring Data 当然 您会想使用最新版本 Spring Data JPA 1 4 3 RELEASE Hibernate 4 3 0 Final 按照在线示例配置后 应用程序抛出异常
  • PHP 上传 - 为什么 isset($_POST['submit']) 总是 FALSE

    我有以下代码示例 upload3 php
  • .NET SSH 端口转发

    我正在尝试将 SSH 端口转发构建到我正在编写的 NET 应用程序中 我尝试过使用sharpSSH 但它要求用户每次都输入密码 而我不希望这样 我将处理存储密码的问题 我已经下载了Granados 但它的文档基本上为零 如何使用 Grana
  • bash 脚本 - 读取单个击键,包括特殊键 Enter 和空格

    不确定我是否应该将其放在 stackoverflow 或 unix stackexchange 上 但我发现了一些similar 问题在这里 就这样吧 我正在尝试创建一个由 bashrc 调用的脚本 该脚本允许我根据一次击键选择两个选项之一
  • Apache SPARK:广播变量上的空指针异常(YARN 集群模式)

    我有一个简单的 Spark 应用程序 我试图在 YARN 集群上广播 String 类型变量 但是每次我尝试访问广播变量 value 时 我都会在任务中得到 null 如果你们能建议我在这里做错了什么 这将非常有帮助 我的代码如下 publ
  • Airflow 在 1 分钟后终止了我的任务

    我有一个非常简单的 DAG 有两个任务 如下所示 default args owner me start date dt datetime today retries 0 retry delay dt timedelta minutes 1
  • PostgreSQL 约束,在提交时检查,而不是更早检查[重复]

    这个问题在这里已经有答案了 是否可以在 PostgreSQL 中创建唯一索引或其他类型的约束 这将在事务 COMMIT 上进行检查 而不是提前一毫秒 我需要一对 record id ordering 的索引 因此我确保在给定的 record