【问题标题】:PostgreSQL: number of rows inserted into table partitioned using 'ON INSERT ... DO INSTEAD' rulesPostgreSQL:插入到使用“ON INSERT ... DO INSTEAD”规则分区的表中的行数
【发布时间】:2013-05-29 22:59:34
【问题描述】:

查看http://www.postgresql.org/docs/9.2/static/rules-status.html,我的印象是,如果除了不重叠的条件规则之外,您还创建一个无条件的ON INSERT ... DO INSTEAD NOTHING 规则,PostgreSQL 将返回正确数量的插入行。

如果这是真的,那么为什么 PostgreSQL 文档中没有包含如此有用的语句? (我真的看不到文档中的任何地方都提到它。)

【问题讨论】:

    标签: postgresql database-partitioning


    【解决方案1】:

    规则将初始查询扩展为多个查询。 psql 或 api 报告的受影响的行数是最后一个查询的行数。如果您使用规则,则基本上可以保证报告的数字迟早是不正确的——没有如果或但是,它回来咬你。

    也要避免规则,除非您知道自己在做什么。偶尔会有关于 pg 黑客弃用它们的讨论。

    【讨论】:

    • 特别感谢您的“弃用”提示。触发器呢?
    • 偶尔讨论。我发现对于琐碎的、扁平的可更新 JOIN 视图而言,它非常有用、易于编写并且更具描述性,而不是潜入触发器的世界。对于大魔术来说,触发因素是肯定的,但对大魔术的需求通常是更深层次问题的征兆。无论如何,任何不完全平坦的规则都会给你一个古怪的插入报告编号。使用触发器,您可以声明一个变量并在每次更改时递增它——但这引出了一个问题,为什么它首先如此重要......
    • @zxq9:一个古怪的报告数字可能会搞砸 plpgsql 中的 if found 语句。
    • @Denis 这是真的。如果这是一个要求,那么我会考虑超出对重写规则来说足够简单的用例。但这不是贬低或害怕它们的理由。
    • 老实说,我不知道他们为什么要精确地弃用它们。你会想通过 pg-hackers 列表和 pg wiki 来了解血腥的细节......例如postgresql.1045698.n5.nabble.com/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 2023-02-04
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多