Нужно ли заново создавать временную таблицу, если обновляется соединение postgres? - PullRequest
1 голос
/ 28 января 2020

Итак, я хочу загрузить временную таблицу, заполнить ее с помощью файла csv, а затем выполнить кучу других запросов с тем же соединением. В настоящее время я загружаю обычную таблицу, выполняю запросы и затем удаляю ее. Но я хочу сделать это временным, чтобы избежать путаницы и избежать больших объемов данных, оставляемых в БД, если код останавливается по какой-либо причине (исключение / отладка и т. Д. c.), Прежде чем он получит возможность отбросить таблицу. Я делаю все это в python, используя psycopg2.

Во-первых, я предполагал, что временная таблица будет зависать, пока соединение живо. Это правда? Но что еще более важно, связывается ли когда-либо соединение psycopg2 db с кратковременным разрывом соединения при восстановлении соединения? Запросы, которые я выполняю, занимают много времени, поэтому я беспокоюсь, что это может произойти. В каком случае можно узнать, когда обновляется соединение, чтобы я мог повторно загрузить временную таблицу?

Ответы [ 2 ]

2 голосов
/ 28 января 2020

Во-первых, я предположил, что временная таблица будет зависать, пока соединение живо. Это правда?

A TEMPORARY TABLE автоматически сбрасывается в конце вашего сеанса. Таким образом, по окончании сеанса не остается мусора.

Но, что более важно, соединение с БД прерывается и обновляется sh?

Обычно сеанс не завершается автоматически. Если вам интересно, могут ли временные таблицы вызывать какие-либо конфликты в других сеансах, вам не нужно беспокоиться: временные таблицы живут только внутри текущего сеанса.

В каком случае есть какой-то способ зная, когда соединение обновляется, чтобы я мог повторно загрузить временную таблицу?

Я не уверен, что следую вашему вопросу здесь, но ясно одно: если сеанс умирает, временная таблица умирает. Если ваш клиент настроен на автоматическую попытку установить соединение sh с базой данных, он больше не увидит таблицу. Если вы хотите избежать появления сообщения об ошибке при попытке создать уже существующую таблицу, попробуйте:

CREATE TEMPORARY TABLE IF NOT EXISTS tb_tmp (...);

И убедитесь, что она пуста:

TRUNCATE TABLE tb_tmp;
1 голос
/ 28 января 2020

Соединение psycopg2 db когда-либо автоматически обрабатывает кратковременное прекращение соединения, восстанавливая соединение?

Вы имеете в виду, становится ли оно нетерпеливым, убивает ли оно живым, но "застопорившимся" (например, перегрузка сети) подключение, а заменить его на новое? Нет. Вы могли бы написать код для этого, если хотите (но зачем?), Но сама psycopg2 этого не сделает.

...