代码之家  ›  专栏  ›  技术社区  ›  valodzka

查询锁的顺序(postgresql)

  •  2
  • valodzka  · 技术社区  · 14 年前

    过程 1 定期从X查询数据。

    过程 2

    问题是当进程1执行查询时(例如 select * from X )它以共享模式锁定表An、Bn、Cn、Dn,锁定顺序未知。如果进程1锁定Bn,那么进程2锁定we have死锁。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Donnie    14 年前

    我知道你说没有明确的锁定,但老实说你最好在这里 显式锁定。因为两个批中的第一个语句都有一个 lock 命令锁定要使用的表。最重要的是 命令 必须

    在此之后,请确保两个批处理都尽可能快地运行,因为您正在使用表级锁。。。你不想抱得太久。

        2
  •  0
  •   nos    14 年前

    有关于订单的信息吗 postgresql(没有显式锁定)? 或者其他解决方案是 可能吗?

    通常,postgresql的mvcc实现会保护您免受多种类型的死锁的影响。看到了吗 http://www.postgresql.org/files/developer/transactions.pdf 更多细节。

    不过,一种常见的解决方案是只处理死锁,也就是说,如果查询由于死锁而失败,请重试。?