【问题标题】:PostgreSQL function is always called inside a transactionPostgreSQL 函数总是在事务内部调用
【发布时间】:2019-07-26 13:28:19
【问题描述】:

我一直在尝试研究 postgres 函数是否始终作为单个事务运行,并且在各种答案中找到了提示,但没有返回官方文档的链接。有人可以引用说明 postgres 函数始终在单个事务中运行的来源吗?

已阅读此处的文档但没有运气:https://www.postgresql.org/docs/12/plpgsql-transactions.html

这些函数只是通过一个 select 调用被调用,没有使用事务 BEGIN/COMMIT 调用:


select ccdb.fn_automation_for_updation()

简而言之,我正在浏览一个代码库,其中用户试图解决函数内部的并发问题,但认为存在竞争条件。

【问题讨论】:

  • 函数始终是调用者事务的一部分。

标签: postgresql


【解决方案1】:

documentation here 中写道:

PostgreSQL 实际上将每个 SQL 语句视为在事务中执行。如果您不发出 BEGIN 命令,则每个单独的语句都有一个隐含的 BEGIN 和(如果成功)围绕它的 COMMIT。

换句话说,即使没有发出特定的BEGIN 命令,事务中也会发生单个SELECT

从查询中调用的函数将在查询建立的事务的上下文中执行。

使用CALLDO 执行的程序不会在事务中自动执行;程序应管理自己的事务。见:plpgsql transactions

【讨论】:

    猜你喜欢
    • 2021-01-09
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    相关资源
    最近更新 更多