Ошибка Postgres SSL SYSCALL: обнаружен EOF с помощью python и psycopg

Использование пакета psycopg2 с python 2.7 Я продолжаю получать титульную ошибку: psycopg2.DatabaseError: ошибка SSL SYSCALL: обнаружена EOF

Это происходит только тогда, когда я добавляю предложение WHERE column LIKE ''%X%'' к моему запросу pgrouting. Пример:

SELECT id1 as node, cost FROM PGR_Driving_Distance(
  'SELECT id, source, target, cost 
     FROM edge_table
     WHERE cost IS NOT NULL and column LIKE ''%x%'' ',
  1, 10, false, false)

Потоки в Интернете предполагают, что это проблема с SSL интуитивно, но всякий раз, когда я комментирую совпадающую с шаблоном сторону, запрос и соединение с базой данных прекрасно работают.

Это находится в локальной базе данных с Xubuntu 13.10.

После дальнейшего исследования: похоже, что это может быть причиной расширения pgrouting, сбой базы данных, потому что это плохой запрос, и они не являются ссылками, которые имеют этот шаблон.

Скоро опубликует ответ...

Ответы

Ответ 1

Я столкнулся с этой проблемой при запуске медленного запроса в капелле в экземпляре Digital Ocean. Все остальные SQL будут работать нормально, и это работает на моем ноутбуке. После масштабирования до экземпляра RAM объемом 1 ГБ вместо 512 МБ он работает нормально, поэтому кажется, что эта ошибка может возникнуть, если процесс заканчивается из памяти.

Ответ 2

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

SELECT * from STV_RECENTS where status='Running' order by starttime desc;

затем уничтожьте их:

SELECT pg_terminate_backend(<pid>);

Ответ 4

У меня возникла ошибка при выполнении большого оператора UPDATE в таблице из 3 миллионов строк. В моем случае оказалось, что диск был заполнен. Когда я добавил больше места, UPDATE работал нормально.

Ответ 5

Очень похожий ответ на то, что сделал @FoxMulder900, за исключением того, что я не мог заставить его первый выбор работать. Это работает, хотя:

WITH long_running AS (
    SELECT pid, now() - pg_stat_activity.query_start AS duration, query, state
    FROM pg_stat_activity
    WHERE (now() - pg_stat_activity.query_start) > interval '1 minutes'
      and state = 'active'
)
SELECT * from long_running;

Если вы хотите убить процессы из long_running просто закомментируйте последнюю строку и вставьте SELECT pg_cancel_backend(long_running.pid) from long_running ;

Ответ 6

В моем случае это был убийца OOM (запрос слишком тяжелый)

Проверьте dmesg:

dmesg | grep -A2 Kill

В моем случае:

Out of memory: Kill process 28715 (postgres) score 150 or sacrifice child