2013-02-04 15 views
6

Ho PostgreSQL 9.2 e un piccolo database con solo un po 'di dati seme per un sito web su cui sto lavorando.Query ALTER molto lenta su una piccola tabella in PostgreSQL

La seguente query sembra correre per sempre:

ALTER TABLE diagnose_bodypart ADD description text NOT NULL; 

diagnose_bodypart è una tabella con meno di 10 righe. Ho lasciato correre la query per più di un minuto senza risultati. Quale potrebbe essere il problema? Qualche raccomandazione per il debug di questo?

+6

Sembra una specie di serratura. Avete delle connessioni aperte per accedere (o avere accesso) alla tabella senza commettere? –

+0

Dai un'occhiata alla vista 'pg_locks'. –

+0

Hai ragione! C'erano alcune serrature. Ci sono andato oltre, e mi sono sbarazzato di loro. Il pensiero, anche senza ulteriori indagini, si può semplicemente chiudere le cose con le connessioni al database e i blocchi dovrebbero essere rilasciati. Craig Ringer: grazie per il suggerimento 'pg_locks'. –

risposta

4

L'aggiunta di una colonna non richiede la riscrittura di una tabella (a meno che non si specifichi uno DEFAULT). È un'operazione rapida senza serrature. pg_locks è il posto dove controllare, come ha sottolineato Craig.

In generale, la causa più probabile sono le transazioni di lunga durata. Vorrei vedere quali flussi di lavoro stanno raggiungendo queste tabelle e per quanto tempo le transazioni rimangono aperte. I blocchi di questo tipo sono in genere transazionali e pertanto le transazioni di commit risolveranno il problema in genere.

Problemi correlati