Как отлаживать "не удалось получить данные от клиента: соединение 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.