PostgreSQL версии: Postgres Plus Advanced Server 9.2
Операционная система: Windows 7/8PostgreSQL блокировалась после 6-го исполнения того же запроса
У меня есть хранимая процедура, которая действует, как это следующим образом:
1. Очищает Table1
2. Выбор из представления (же вид всегда) на основе нескольких параметров, передаваемых в WHERE условие (всегда одни и те же параметры для ради примера)
3. Вкладывает в table1 Результаты выбора выше.
Тело процедуры выглядит следующим образом:
BEGIN
PERFORM clear_table1(p_session_id);
INSERT INTO table1 (session_id, id1, adress, x, y)
SELECT p_session_id, id1, adress, x, y
FROM myview
WHERE (CONDITION)
AND (CONDITION)
AND (CONDITION)
AND (lower(adress) LIKE lower(p_adress) OR p_adress IS NULL)
LIMIT 6000;
END;
Первые 5 раз (всегда в 5 раз) я бегу точно такой же запрос с точно такими же параметрами, он работает, как ожидалось. В следующий раз (6-й раз) он работает в течение огромного количества времени, что-то вроде .. десятков минут.
select * from myfunction('session_id',NULL,NULL,'%adress%')
В Статус сервера вид PostgreSQL Manager, я заметил ряд замков, добавленных для таблиц, в которых я вставить вместе с таблицами, из которых заселенных вид
Может кто-нибудь с Опыт PostgreSQL говорит мне, есть ли какие-то настройки, чтобы исправить это поведение. ИЛИ произошло это или что-то подобное с кем-то другим, использующим PG?
Спасибо !!!
Позже редактировать: - проблема всегда возникает только, когда 6 вызовов сделаны из же сессий - мы явно не совершаем в конце хранимой процедуры
1) Вы совершаете между вызовами? 2) являются ли 6 выписок из разных сессий? – wildplasser
См. Более позднюю версию. – tartak
Почему вы используете функцию только для очистки таблицы? Почему бы не просто «удалить из таблицы»; 'или' обрезать таблицу'; '? – wildplasser