2013-02-04 5 views
6

Ich habe PostgreSQL 9.2 und eine winzige Datenbank mit nur ein paar Seed-Daten für eine Website, an der ich arbeite.ALTER Abfrage sehr langsam auf winzige Tabelle in PostgreSQL

Die folgende Abfrage scheint für immer laufen:

ALTER TABLE diagnose_bodypart ADD description text NOT NULL; 

diagnose_bodypart eine Tabelle mit weniger als 10 Zeilen. Ich habe die Abfrage über eine Minute ohne Ergebnisse ausgeführt. Was könnte das Problem sein? Irgendwelche Empfehlungen für das Debuggen?

+6

Klingt wie eine Art von Schloss. Haben Sie irgendwelche Verbindungen geöffnet, die auf die Tabelle zugreifen (oder zugegriffen haben), ohne zu committen? –

+0

Schauen Sie sich die 'pg_locks' Ansicht an. –

+0

Sie haben Recht! Es gab ein paar Schlösser. Ich ging weiter hinein und beseitigte sie. Dachte, auch ohne weitere Rückfrage kann man einfach Dinge mit Datenbankverbindungen schließen und Sperren sollen freigegeben werden. Craig Ringer: Danke für den 'pg_locks' Tipp. –

Antwort

4

Das Hinzufügen einer Spalte erfordert kein erneutes Schreiben einer Tabelle (es sei denn, Sie geben eine DEFAULT an). Es ist eine schnelle Operation ohne Locks. pg_locks ist der Ort, um zu überprüfen, wie Craig darauf hingewiesen hat.

Im Allgemeinen sind lang andauernde Transaktionen die wahrscheinlichste Ursache. Ich würde prüfen, welche Arbeitsabläufe diese Tabellen treffen und wie lange die Transaktionen offen bleiben. Sperren dieser Art sind in der Regel transaktional, und daher wird das Problem in der Regel durch begehbare Transaktionen behoben.