一次打开的多个连接之间是否存在 Postgres 临时表?

Do Postgres temporary tables exist between multiple connections open at once?

假设我打开一个新的 npgsqlconnection 并创建一个新的临时 table temp1,然后打开另一个新连接。据我了解,临时 table 仅适用于打开它的会话,并且两个打开的连接不应共享同一个会话。这里的连接字符串是相同的,我尝试关闭池,但这并没有改变任何东西。伪代码是:

var conn1 = new NpgsqlConnection(MyConnectionString)
var conn2 = new NpgsqlConnection(MyConnectionString)
conn1.Open()
conn2.Open()
conn1.Execute("CREATE TEMP TABLE temp1(idx int)")

如果我为两个连接执行查询 SELECT COUNT(*) FROM pg_tables WHERE tablename = 'temp1' 此查询 returns 1. 为什么 conn2 能够访问在 [=15 上创建的临时 table =]?有什么办法可以防止这种情况吗?

Why would conn2 be able to access the temporary table created on conn1?

不能。

其他连接可以通过系统目录看到table,但是不能访问

-- Connection 1
test=# SELECT schemaname FROM pg_tables WHERE tablename = 'temp1';
 schemaname 
------------
 pg_temp_3
(1 row)

-- Connection 2
test=# select * from pg_temp_3.temp1;
ERROR:  cannot access temporary tables of other sessions