sql >> Databáze >  >> RDS >> PostgreSQL

pgbouncer - zavírá se, protože:nečistý server při každém připojení

Dobře, myslím, že jsem na to přišel. Problém spočívá v dlouhodobém problému s Django a Psycopg2. Psycopg2 v zásadě automaticky vydá příkaz BEGIN do DB. Pokud se však Django domnívá, že nedošlo k žádné změně dat, nevydá na konci transakce COMMIT.

Existuje několik řešení tohoto problému, podívejte se na http://www. slideshare.net/OReillyOSCON/unbreaking-your-django-application Více podrobností. V ideálním případě vypnete automatické odevzdání (nastavením autocommit =True v nastavení DB, nepohodlná konvence pojmenování). To zabraňuje transakcím ve funkcích pouze pro čtení, ale také ve funkcích pro zápis, takže musíte tyto funkce ručně zabalit do dekorátoru @commit_on_success.

Případně stačí přidat django.middleware.transaction.TransactionMiddleware do svých tříd Middleware. Tím se každý požadavek zabalí do transakce. Znamená to také zbytečně zabalovat do transakce požadavky pouze pro čtení, ale je to rychlé a špinavé řešení.




  1. Vkládejte objekty BLOB do databází MySql pomocí php

  2. MySQL :chyba ve vaší syntaxi SQL | LIMIT 0, 25

  3. volání uložených procedur Oracle v R - jak získat sadu výsledků?

  4. 5 velmi častých chyb návrhu SQL dotazů, kterým se za každou cenu vyhnout