Как отлаживать "не удалось получить данные от клиента: соединение reset с помощью peer"

Я запускаю приложение django-celery на Ubuntu-12.04.

Когда я запускаю задачу сельдерея из своего веб-интерфейса, я получаю следующую ошибку, взятую из файла журнала postgresql-9.3 (максимальный уровень журнала):

2013-11-12 13:57:01 GMT tss_usr 8113 LOG:  could not receive data from client: Connection reset by peer

tss_usr является пользователем postgresql базы данных приложения django и (в этом примере) 8113 является pid процесса, который убил соединение, я думаю.

У вас есть представление о том, почему это происходит или по крайней мере, как отладить эту проблему?

Чтобы все снова работало, мне нужно перезапустить postgresql, что крайне неудобно.

Ответ 1

Я знаю, что это более старая запись, но я просто нашел ее, потому что сегодня у меня была такая же ошибка в моих журналах postgres. Я сузил его до инструкции выбора PDO. Я использую Zend Framework 1.10.3 на Ubuntu Precise.

Следующий оператор pdo сгенерировал ошибку, если $opinion - длинная текстовая строка. Обозначение столбца - это текст в моей таблице postgres. Запрос выполняется успешно, если $opinion находится под определенным количеством символов. 1000 символов отлично работают. 2000 символов не удается: "невозможно получить данные от клиента: соединение reset с помощью однорангового узла".

  $select = $this->db->select()
           ->from( 'datauserstopics' )
           ->where("opinion = ?",trim($opinion))
           ->where("datatopicsid = ?",trim($tid))
           ->where("datausersid= ?",$datausersid);

  $stmt = $this->db->query($select);

Я обошел проблему, используя: → где ( "substr (мнение, 1 100) =?", обрезка (substr ($ opinion, 1100)))

Это не идеальное решение, но для моих целей достаточно выражения select с использованием substr().

Обратите внимание, что у меня нет проблем с вставкой длинных строк в одну и ту же таблицу/столбец. Проблема с отключением появляется только для меня при выборе PDO с относительно длинными текстовыми строками.

Ответ 2

Я получаю его в 2017 году с 9.4, у меня нет текстовых полей, не знаю, что такое PDO. Мой оператор select составляет около 50 байт, я пытаюсь получить int4 и двойную точность. Я подозреваю, что сообщение об ошибке может означать несколько вещей.

С тех пор я нашел https://dba.stackexchange.com/questions/142350/postgres-could-not-receive-data-from-client-connection-reset-by-peer, что указывает на то, что это может быть проблемой с конфигурацией клиента. Мой клиент - libpg, а PQconnectdb() возвращает мне сообщение CONNECTION_OK. Он работает хотя бы частично.

Ответ 3

Для меня перезапуск гипервизора, где помогли и Postgres, и приложение, использующее его. Впрочем, я уже видел следы стека в dmesg.