WITH语句中的查询是否在PostgreSQL中的单个事务中执行?

时间:2019-07-08 10:02:32

标签: postgresql transactions with-statement

我在WITH语句中进行了很多查询。他们应该进行一次交易。我应该在交易中明确覆盖我的大查询还是没有必要?

这是我查询的一个粗略示例:

csv

1 个答案:

答案 0 :(得分:2)

来自docs

  

PostgreSQL实际上将每个SQL语句都视为在事务内执行。如果您不发出BEGIN命令,则每个单独的语句都有一个隐式的BEGIN和(如果成功的话)在其周围包裹着COMMIT。

WITH语句仍视为单个语句,因此它将在隐式事务块中运行。

您可以使用一些返回当前交易ID的CTE为自己进行测试:

with
  tx1 as (select txid_current()),
  tx2 as (select txid_current())
select * from tx1, tx2;

 txid_current | txid_current
--------------+--------------
        12814 |        12814
(1 row)