После обновления моего приложения Django 1.6 до Django 1.7 я начал получать случайные ошибки при извлечении данных из PostgreSQL:
DatabaseError: server sent data ("D" message) without prior row description ("T" message)
lost synchronization with server: got message type "�", length -1244613424
DatabaseError: lost synchronization with server: got message type "0", length 842674226
ProgrammingError: no results to fetch
ValueError: invalid literal for int() with base 10: 'feuj3f47jvsdv7tgnj43g63j'
Когда я быстро открываю 10 вкладок в браузере, половина вкладок загружается нормально, половина из них выдает ошибку БД. Когда я обновляю вкладки, где произошли ошибки, они загружаются нормально.
Я запускаю Django через uwsgi и nginx, версия psycopg2 2.5.4.
В целом похоже, что каким-то образом связь с Postgres полностью нарушена, и результаты разных запросов смешиваются.
Редактировать:
После нескольких часов устранения неполадок я обнаружил следующее:
Django 1.6 + uwsgi — работает
Django 1.7 + gunicorn — работает
Django 1.7 + uwsgi — не работает, выдает ошибки базы данных. Таким образом, проблема, похоже, связана именно с комбинацией uwsgi и Django 1.7. Что странно, у меня есть другой проект Django 1.7, работающий на том же сервере с тем же uwsgi, и у него нет проблем.
Любые идеи?
(Я не очень против перейти на гуникорн, наверное, придется идти по этому пути, но все же интересно, почему так происходит)
Обновление 2: более внимательное изучение показывает совершенно безумные вещи, происходящие внутри Django, например, первичный ключ модели заменяется текущим пользователем session_id (это источник ошибки «invalid literal for int() with base 10») и Django, выдающий запросы к БД, «забыв ", чтобы указать предложение WHERE. Я бы, наверное, назвал это каким-то повреждением памяти.
Обновление 3: мы перешли с uwsgi на gunicorn, и теперь проблемы исчезли. Все отлично работает. Я, вероятно, все еще ищу правильное решение, хотя.
libpq
не соответствуетpsycopg2
? Это что-то низкоуровневое, вpsycopg2
или вlibpq
, во всяком случае. - person Craig Ringer   schedule 09.10.2014lipbq
, а у другого нет. - person Spc_555   schedule 09.10.2014psycopg2
неправильно настроен при компиляции, надо проверить - person Spc_555   schedule 09.10.2014