【问题标题】:PostgreSQL - implicit transactions analoguePostgreSQL - 隐式事务模拟
【发布时间】:2019-01-16 11:11:28
【问题描述】:

我正在使用来自 RDS (AWS) 的 PostgreSQL 10。 所以请注意,我没有完全的权限来做任何我想做的事情。

在 PostgreSQL 中,我有一些用 PL/pgSQL 编写的函数。

根据我在这些功能中的经验,我无法启动/提交/回滚事务。在DO 块中,我也不能这样做。

正确吗?那么这背后的逻辑是什么......似乎PostgreSQL希望在现有事务的上下文中调用每个函数。正确的?

但是,如果我希望函数中的每个语句都在单独的(短)事务中执行,即具有类似 AUTOCOMMIT = ON 的行为,该怎么办?

我发现了一些可能可以做到这一点的扩展,但我不确定。 我不知道这是否相关。 https://www.postgresql.org/docs/10/ecpg-sql-set-autocommit.html

在 Postgres 中是否有无需下载和安装其他包/扩展的标准方法?

再次重申:我希望函数中的每个语句都在单独的(短)事务中执行,即具有类似于 AUTOCOMMIT = ON 的行为。

所以我想要这样的东西: https://docs.microsoft.com/en-us/sql/t-sql/statements/set-implicit-transactions-transact-sql?view=sql-server-2017

【问题讨论】:

    标签: postgresql transactions stored-functions


    【解决方案1】:

    一个函数中的所有语句都在同一个事务中运行,没有插件可以改变它。

    您可以从 v11 开始使用过程,但您仍然需要显式管理事务。

    我怀疑最好的办法是在数据库客户端上运行你的函数,在那里你可以自动提交,而不是作为数据库中的一个函数。

    【讨论】:

      猜你喜欢
      • 2010-11-09
      • 2021-02-04
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 2013-01-03
      • 2014-01-15
      相关资源
      最近更新 更多