我是否使用CTE或事务来组合查询?postgresql

我是否使用CTE或事务来组合查询?postgresql,sql,postgresql,transactions,common-table-expression,Sql,Postgresql,Transactions,Common Table Expression,文档说明: :事务的要点是将多个步骤捆绑到一个单一的、全有或全无的操作中。这些步骤之间的中间状态对其他并发事务不可见,如果发生某些故障阻止事务完成,则所有步骤都不会影响数据库 :这允许您在同一查询中执行多个不同的操作。。。WITH中的子语句彼此并行执行,并且与主查询并行执行。因此,在中使用数据修改语句时,指定的更新实际发生的顺序是不可预测的 我的需求: 全有或全无操作 非嵌套查询 回归 了解差异以及在何处使用每一个 示例:看看下面的设计。当我CRUD数据时,我应该在这里使用什么?我的请求应该

文档说明:

:事务的要点是将多个步骤捆绑到一个单一的、全有或全无的操作中。这些步骤之间的中间状态对其他并发事务不可见,如果发生某些故障阻止事务完成,则所有步骤都不会影响数据库

:这允许您在同一查询中执行多个不同的操作。。。WITH中的子语句彼此并行执行,并且与主查询并行执行。因此,在中使用数据修改语句时,指定的更新实际发生的顺序是不可预测的

我的需求:

  • 全有或全无操作
  • 非嵌套查询
  • 回归
  • 了解差异以及在何处使用每一个
示例:看看下面的设计。当我CRUD数据时,我应该在这里使用什么?我的请求应该是什么样子


我有什么遗漏或不太了解的吗?
CTE
,因为它们是单个查询,所以作为单个事务执行,所以一次失败将回滚整个事件。在这种情况下,我认为您只需要阅读CTE,检查文档中包含的非常好的示例,看看它们是否适合您的任何查询。你对这些表格的解释不足以说明什么是最好的,因为如果你谈论的是性能或完整性,那么更多的是个案。作为旁注,我还建议探索除可写CTE之外或替代可写CTE的
外键级联删除/更新
。如果您询问有关使用的建议,请提供使用示例-没有代码,我们如何预测您的使用?如果您问这个问题,您应该使用事务并忽略CTE。一旦你了解了基本知识,你以后可以采用它们。@CraigRinger我过去使用事务,现在我也在尝试理解CTE。顺便说一句,你对这个问题的回答真的很有帮助。