一次打开的多个连接之间是否存在 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
假设我打开一个新的 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