1

根据文档

ON COMMIT DROP:临时表将在当前事务块的末尾被删除。

但是,每个会话的临时表是唯一的,而不是每个线程请参阅此处

我的问题:

如果临时表被标记为 WITH ON COMMIT DROP,那么 PG 将如何处理访问该表的多个线程,因为任何线程都可以提交,但由于其他线程正在使用该表,因此无法删除该表。

编辑: AFAIK,多个事务可以在一个会话中运行。如果是这种情况,多个事务可以访问具有临时表的函数,因此我的问题是。

4

1 回答 1

3

Postgres(服务器)对客户端线程一无所知。它将会话视为分组在事务中的一系列连续命令。从服务器的角度来看,会话内的并发是不可能的。

客户端应用程序可能是多线程的,并且线程可以使用相同的连接。应用程序开发人员负责确保线程不会相互竞争以访问服务器资源。从文档中:

一个线程限制是没有两个线程试图同时操作同一个 PGconn 对象。特别是,您不能通过同一个连接对象从不同线程发出并发命令。(如果您需要运行并发命令,请使用多个连接。)

于 2017-10-18T21:49:23.140 回答