PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

pgbouncer - затваряне поради:нечист сървър при всяка връзка

Добре, мисля, че разбрах това. Проблемът е в дългогодишен проблем с Django и Psycopg2. По принцип Psycopg2 автоматично ще издаде оператор BEGIN към DB. Въпреки това, ако Django смята, че не е настъпила промяна на данните, той няма да издаде COMMIT в края на транзакцията.

Има няколко решения на този проблем, вижте http://www. slideshare.net/OReillyOSCON/unbreaking-your-django-application за повече информация. В идеалния случай изключвате автоматичните ангажименти (като зададете autocommit =True в настройките на вашата DB, неудобна конвенция за именуване). Това предотвратява транзакции на функции само за четене, но също и на функции за запис, така че трябва ръчно да опаковате тези функции в @commit_on_success декоратор.

Като алтернатива просто добавете django.middleware.transaction.TransactionMiddleware към вашите класове Middleware. Това ще обвие всяка заявка в транзакция. Това означава и ненужно обвиване на заявки само за четене в транзакция, но това е бързо и мръсно решение.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres psql не се разпознава като вътрешна или външна команда

  2. (Една таблица) вмъкване на редове

  3. Автоматично тестване на резервни копия на PostgreSQL

  4. Обединяване на Postgresql връзки в Erlang

  5. Дублиране на бази данни / Репликация на поточно предаване на Postgres