我在WITH语句中进行了很多查询。他们应该进行一次交易。我应该在交易中明确覆盖我的大查询还是没有必要?
这是我查询的一个粗略示例:
csv
答案 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)