Überprüfen Sie ob eine Transaktion in der Tabelle wird mit durch Ausgabe:
SELECT * FROM pg_stat_activity;
Wenn Sie Fragen finden, die wahrscheinlich idle in transaction
oder active
sind und beinhalten Tabelle t
dann können Sie Beendigung der Abfrage oder dem Client erzwingen (Dies gibt ROLLBACK
), die die Abfrage selbst ausgibt, indem sie sie mit pid
identifizieren, die aus der obigen Abfrage zurückgegeben wird:
SELECT pg_cancel_backend(${pid here}); -- cancel query
SELECT pg_terminate_backend(${pid here}); -- terminate connection
Ju st ersetzen ${pid here}
mit der pid
von Abfrage Statistik Aktivitätsansicht.
Oder man könnte es auch in einigen verrückten Art und Weise tun (obwohl ich eher empfehlen es manuell zu tun) wie folgt aus:
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE query ~* ' t'
AND pid <> pg_backend_pid(); -- prevent killing "yourself" ;-)
Above Lösung ist unsicher Ihre Tabellennamen unter Berücksichtigung und sollte nie in der Produktion verwendet werden! Dies könnte viele Abfragen nicht mit der Tabelle t
übereinstimmen!
Nun, die Meldung „*, weil sie durch aktive Abfragen in dieser Sitzung * verwendet wird“ ist ziemlich klar: Stellen Sie sicher, dass Sie nicht mehr, dass die Tabelle. Wenn ich raten musste: Sie haben eine Transaktion mit dieser Tabelle gestartet, aber diese Transaktion nie committed und diese Sitzungen sind nicht "in der Transaktion inaktiv" - sondern nur "im Leerlauf" –
Lesen Sie die Fehlermeldung: 'wird von aktiven Abfragen verwendet in dieser Sitzung "- vielleicht herausfinden, was es benutzt und es töten, bevor Sie versuchen, es fallen zu lassen? – SeinopSys
Es gibt einen Cursor, der es verwendet, aber die Tatsache, dass es neu erstellt wird, bedeutet, dass es nicht mehr notwendig ist. Wenn es eine Möglichkeit gibt, es fallen zu lassen, scheint das die einfachste Lösung zu sein. – Adam12344