INSERT 触发器带有“ON CONFLICT DO NOTHING”

2023-12-24

我有一个INSERTPostgres 9.5+ 中的语句,但由于关键冲突,INSERT 有时实际上不会发生(我已经设置ON CONFLICT DO NOTHING在插入)。

If the INSERT发生了,那么触发器当然会运行。但如果INSERT由于关键冲突而不会发生,触发器是否仍会运行?

这取决于它是否是BEFORE or AFTER扳机?


Per-row BEFORE INSERT在检查冲突之前,会触发触发器,并应用对建议行的可能影响。手册: https://www.postgresql.org/docs/current/sql-insert.html#SQL-ON-CONFLICT

请注意,所有每行的效果BEFORE INSERT触发器是 反映在排除值中,因为这些影响可能有助于 到从插入中排除的行。

A plain INSERT会提出一个EXCEPTION由于独特的违规,并且会回滚所有内容(除了无法回滚的内容,例如递增序列)。

但是 UPSERT 与ON CONFLICT DO NOTHING抑制异常,因此即使跳过建议插入的行,任何此类触发器的影响仍然存在。

(因此,当使用ON CONFLICT DO UPDATE ...,此类触发器的效果反映在特殊的EXCLUDED中可见的行UPDATE part.)

But AFTER INSERT这两种情况都不会触发触发器。该行从未真正插入 - 无论是否引发异常。


我想用一个RULE https://www.postgresql.org/docs/current/sql-createrule.html相反,它可以重写INSERT运行附加命令,与结果无关。比触发器更棘手,但它会起作用before the INSERT可能会被取消。However, 手册警告: https://www.postgresql.org/docs/current/sql-createrule.html

请注意,INSERT含有一个ON CONFLICT子句不能用于 有的表INSERT or UPDATE规则。考虑使用 相反,可更新视图。

所以,没有骰子。

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

INSERT 触发器带有“ON CONFLICT DO NOTHING” 的相关文章

随机推荐

  • 如何控制 XNA 在启动时定位游戏窗口的位置?

    我有以下烦恼 每当我开始调试 XNA 游戏时 游戏窗口就会在屏幕中央弹出 由于我有一个双显示器系统 我想在我的第二个显示器上设置默认启动位置 但是 这应该只发生在调试模式中 您需要添加对System Windows Forms and Sy
  • Node.js Cheerio 解析器破坏了 UTF-8 编码

    我用 Cheerio 解析我的请求 如下所示 var url http shop nag ru catalog 16939 IP videonablyudenie OMNY 16944 IP kamery OMNY c vario obek
  • NoneType'对象没有属性'find_all'出现错误

    我当时是网scraping使用 Beautiful Soup 的 Wikipedia 表 这是我的代码 Code URL https en wikipedia org wiki List of most viewed YouTube vid
  • 如何使用 Amazon S3 配置 django-compressor 和 django-staticfiles?

    我正在尝试设置Django 压缩器 https github com jezdez django compressor and django 静态文件 https docs djangoproject com en dev howto st
  • RoomDatabase_Impl 不存在

    当我尝试实现房间数据库时 出现以下错误 java lang RuntimeException cannot find implementation for com udacity gradle builditbigger Database
  • 如何优化给定的 db2 查询,

    考虑如下我的 DB2 查询 Select something from some tables select something from some tables where bhla bhla Unionall select someth
  • 如何在GtkTreeview中用字符串和pixbuf制作一列?

    我正在使用 Gtk 2 的应用程序中工作 我需要实现一个文件树视图 实际的代码是 public FileTree store new TreeStore 2 typeof string typeof string this change d
  • 定义一组(初始)Haar Like 特征

    当谈到级联分类器 使用类似 haar 的特征 时 我总是读到像 AdaBoosting 这样的方法用于选择 最佳 特征进行检测 然而 这仅在有一些初始功能集开始增强时才有效 给定 24x24 像素图像 有 162 336 个可能的 haar
  • 如何通过 Objective C 上传文件?

    我想问一个关于 iPhone 上的 Objective C 的问题 我想上传一个文件 实际上我将所有数据存储在 NSString 中 到服务器 但是 我不知道该怎么做 我查过Apple Developer的网站 我知道有一个函数叫做conn
  • 在sql server中将字符串转换为日期

    我如何转换YYYY MM DD 2012 08 17 到 SQL Server 中的约会 我在帮助页面上没有看到这种格式 http msdn microsoft com en us library ms187928 aspx http ms
  • Java 中的 Mysql 连接:用户 @ localhost 的访问被拒绝

    我无法连接到数据库 但我不知道为什么 因为用户名和密码是正确的 并且我可以在本地通过 phpmyadmin 连接 Class forName com mysql jdbc Driver Setup the connection with t
  • 如何实现数据表“分组依据”?

    我想为我的数据表实现 分组依据 有人有什么建议吗 update 时间 2019 03 09 标签 c net 2 0 您可以在 System Data DataSetExtensions 程序集中使用 linq 扩展 DataTable t
  • 如何找到距直线给定垂直距离处的点?

    我在窗口中画了一条线 然后让用户拖动它 因此 我的线由两点定义 x1 y1 和 x2 y2 但现在我想在线条的末端绘制 帽子 即在每个端点处绘制短垂直线 上限的长度应为 N 像素 因此 要在端点 x1 y1 处绘制 帽 线 我需要找到形成垂
  • react-native-reanimated 不接受以度为单位的旋转值

    我正在学习 reanimated 因为它在 UI 线程上工作 并且我想实现旋转动画 以度数旋转 如 45 度 不起作用并提示错误 那么如何在react native reanimation v1 version 1 中实现旋转动画呢 也许你
  • 无法使用 mongodb 插件版本 3.0.3 运行 Grails 应用程序

    我正在尝试将我的 mongodb 插件从 2 0 1 升级到 3 0 3 但是我不断收到以下错误 java lang NoClassDefFoundError com mongodb AggregationOptions at java l
  • spring security如何检索用户名[重复]

    这个问题在这里已经有答案了 可能的重复 使用 Spring Security 时 获取 bean 中当前用户名 即 SecurityContext 信息的正确方法是什么 https stackoverflow com questions 2
  • “奇怪的重复模板模式”的实际用途

    的一些实际用途是什么 奇怪的重复模板模式 http en wikipedia org wiki Curiously Recurring Template Pattern 这 计算类 http en wikipedia org wiki Cu
  • 如何重置 powershell 颜色

    我更改了 powershell 的颜色 现在我无法更改输入文本的颜色 总是yellow 我改变了背景的颜色和文字的颜色 背景颜色已正确更改 但显示文本中的颜色仍然是黄色 我可以做一些事情来重置颜色吗 方法一 CLI 命令 此 CLI 重置控
  • AngularJS reloadOnSearch 不起作用

    执行搜索并导航离开后 我希望用户能够返回到搜索页面 通过在浏览器中返回 并保留当前的搜索参数 我开始意识到 为了做到这一点 必须更新页面 url 以包含有关页面的数据 通过研究 我发现我可以使用更新位置 location并在使用进行更改时强
  • INSERT 触发器带有“ON CONFLICT DO NOTHING”

    我有一个INSERTPostgres 9 5 中的语句 但由于关键冲突 INSERT 有时实际上不会发生 我已经设置ON CONFLICT DO NOTHING在插入 If the INSERT发生了 那么触发器当然会运行 但如果INSER