Существуют ли временные таблицы Postgres между несколькими открытыми соединениями одновременно? - PullRequest
0 голосов
/ 27 марта 2020

Скажем, я открываю новую npgsqlconnection и создаю новую временную таблицу temp1, а затем открываю другое новое соединение. Насколько я понимаю, временная таблица доступна только для сеанса, который ее открыл, и два открытых соединения не должны совместно использовать один и тот же сеанс. Здесь строки подключения идентичны, и я попытался отключить пул, но это ничего не изменило. Псевдокод:

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' для обоих соединений, этот запрос вернет 1. Почему conn2 сможет получить доступ к временной таблице, созданной в conn1? Есть ли способ предотвратить это?

1 Ответ

2 голосов
/ 27 марта 2020

Почему conn2 может иметь доступ к временной таблице, созданной на conn1?

Не может.

Другие соединения могут видеть, что существует таблица через системный каталог, но они не могут получить к нему доступ.

-- 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
...