根据文档:
ON COMMIT DROP:临时表将在当前事务块的末尾被删除。
但是,每个会话的临时表是唯一的,而不是每个线程:请参阅此处
我的问题:
如果临时表被标记为 WITH ON COMMIT DROP,那么 PG 将如何处理访问该表的多个线程,因为任何线程都可以提交,但由于其他线程正在使用该表,因此无法删除该表。
编辑: AFAIK,多个事务可以在一个会话中运行。如果是这种情况,多个事务可以访问具有临时表的函数,因此我的问题是。
Postgres(服务器)对客户端线程一无所知。它将会话视为分组在事务中的一系列连续命令。从服务器的角度来看,会话内的并发是不可能的。
客户端应用程序可能是多线程的,并且线程可以使用相同的连接。应用程序开发人员负责确保线程不会相互竞争以访问服务器资源。从文档中:
一个线程限制是没有两个线程试图同时操作同一个 PGconn 对象。特别是,您不能通过同一个连接对象从不同线程发出并发命令。(如果您需要运行并发命令,请使用多个连接。)