sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres klient låser op ved oprettelse af ny tabel

Hvis genstart af postgres er en mulighed, så vil det højst sandsynligt løse problemet og spare dig for at bruge tid på at læse resten af ​​dette svar :-)

Tjek pg_stat_activity visning, er der sandsynligvis en anden transaktion, der blokerer for skemaændringen.

select * from pg_stat_activity 
where 
wait_event_type is NULL and xact_start is not NULL order by xact_start;

(pg_stat_activity er ændret en smule i hver større sideudgivelse, prøv dette for ældre versioner):

select * from pg_stat_activity 
where 
not waiting and xact_start is not NULL order by xact_start;

Den første række, der vises, er sandsynligvis den, der forårsager problemer. Det er ofte en "tomgang i transaktion" - dette kan meget vel holde låse, og hvis det er en gammel transaktion kan det lige så godt dræbe ydeevnen. Sandsynligvis har programmøren glemt at sikre, at transaktionen blev afsluttet med "commit" eller "rollback", eller måske gik en eller anden db-session fast på grund af netværksproblemer.

For at afslutte transaktionen med pid 1234, brug select pg_cancel_backend(1234); , hvis det mislykkes, select pg_terminate_backend(1234) . Med shell-adgang er de tilsvarende kommandoer kill -INT 1234 og kill 1234 . (husk, kill -9 1234 er en rigtig dårlig idé).

Der er også en visning pg_locks hvilket kan give lidt indsigt, selvom det nok ikke er så nemt at få brugbar information ud af det. Hvis granted er sandt, holdes låsen, når granted er falsk betyder det, at forespørgslen venter på låsen. Her er nogle flere tip her til, hvordan man udtrækker nyttig information fra pg_locks:http://wiki.postgresql. org/wiki/Lock_Monitoring

Hvis alt andet fejler, så er det sandsynligvis tid til at gå efter den enkle løsning, genstart databaseserveren.



  1. SQL opdatering top1 række forespørgsel

  2. MySQL mysql_tzinfo_to_sql program

  3. Laravel veltalende forhold mellem 3 bord

  4. Sådan udføres kun en trigger, når en specifik kolonne er opdateret (SQL-server)