Как отладить "не удалось получить данные от клиента: сброс соединения по пиру"
Я использую приложение django-celery на Ubuntu-12.04.
Когда я запускаю задачу celery из моего веб-интерфейса, я получаю следующую ошибку, полученную из файла журнала 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, что крайне неудобно.
2 ответа
Я знаю, что это старый пост, но я только что нашел его, потому что у меня была та же ошибка сегодня в моих журналах postgres. Я сузил его до утверждения выбора PDO. Я использую Zend Framework 1.10.3 в Ubuntu Precise.
Следующая инструкция pdo вызвала ошибку, если $ мнение - длинная текстовая строка. Мнение столбца типа Текст в моей таблице postgres. Запрос завершается успешно, если $ мнение находится под определенным количеством символов. 1000 символов работает отлично. 2000 символов завершается с ошибкой "не удалось получить данные от клиента: соединение установлено равноправным узлом".
$select = $this->db->select()
->from( 'datauserstopics' )
->where("opinion = ?",trim($opinion))
->where("datatopicsid = ?",trim($tid))
->where("datausersid= ?",$datausersid);
$stmt = $this->db->query($select);
Я обошел проблему, используя: -> где ("substr(мнение,1100) =?", Trim(substr(мнение $,1100)))
Это не идеальное решение, но для моих целей достаточно оператора select с использованием substr().
Обратите внимание, что у меня нет проблем с вставкой длинных строк в одну таблицу / столбец. Проблема разъединения появляется только для меня при выборе PDO с относительно длинными текстовыми строками.
Я получаю его в 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. Это работает хотя бы частично.
Мне помог перезапуск гипервизора, в котором помогли и Postgres, и приложение, использующее его. Тем не менее, я видел трассировку стека в dmesg раньше.