gpt4 book ai didi

sql - 交易范围和准备好的报表

转载 作者:行者123 更新时间:2023-11-29 12:46:11 25 4
gpt4 key购买 nike

我想知道事务和准备好的语句是如何限定范围的。对于作用域,我的意思是它们是否绑定(bind)到创建它们的特定连接或环境。

更具体地说:

  • 是否可以在创建它的连接以外的连接上重用准备好的语句?
  • 如果准备好的语句是在事务外部创建的,那么它是否可以在事务内部使用,反之亦然?
  • 事务是否绑定(bind)到创建它的连接?

当然仅限于一个客户。

最佳答案

Can a prepared statement be reused on a connection other the one it was created on?

不,它是特定于 session (连接)的。

术语“ session ”和“连接”目前在 PostgreSQL 中可以互换,因为无法保存 session 并在以后的连接中恢复它。

Can a prepared statement be used inside a transaction if it was created outside of that transaction and vice versa?

是的。准备好的语句是 session 级的,而不是事务级的。事务级准备语句没有 PREPARE LOCAL,例如事务局部变量的 SET LOCAL

您可以使用 DISCARD 命令忘记准备好的语句,或者使用 DEALLOCATE 命令忘记一个特定的准备好的语句。这在 PgBouncer 等事务/连接池中大量使用。

(当然,所有涉及的事务都必须在同一个 session 中,因为准备好的语句是特定于 session 的)。

Is a transaction bound to the connection it was created on?

是的。事务是 session 的属性。您不能在一个 session 中暂停事务并在另一个 session 中恢复它。这会非常方便,但考虑到 PostgreSQL 基于进程的架构,它非常不切实际。

PgBouncer 或 PgPool-II 等工具可让您通过提供更多灵 active 的间接层抽象连接。

关于sql - 交易范围和准备好的报表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20855875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com