新しい列を追加しようとしています
ALTER TABLE "Cidade" ADD COLUMN "BoundBox" VARCHAR(255)
この表に:
"Cidade"
"Id" integer not null
constraint "Cidade_PK"
primary key,
"Nome" varchar(120),
"EstadoId" integer not null
constraint "Estado_Cidade_FK"
references "Estado",
"PontoCentralLatitude" numeric,
"PontoCentralLongitude" numeric
しかし、クエリは決して終了しません。私はすでに5分間待っていましたが、何も起こりませんでした。テーブルには5,000レコードしかないので、テーブルへのアクセスがブロックされるので、あまり待つことはできません。私はテストデータベース(本番環境と同等)を持っていますが、それは非常に迅速に機能しました。 postgresのバージョンは9.5.6です。
PostgreSQL 9.6以降を実行している場合は、pg_blocking_pids()
を使用して、クエリをロックするクエリのPIDを見つけることができます。
select pid, pg_blocking_pids(pid) as blocked_by, query as blocked_query
from pg_stat_activity
where pg_blocking_pids(pid)::text != '{}';
このステートメントは非常に高速ですが、テーブルにアクセス専用ロックが必要です。テーブルをロックしてブロックする長時間実行トランザクションが必要です。
使用 pg_stat_activity
長いトランザクションを見つけるためのビュー。
クエリとクエリの実行を非常に長時間ブロックするものがなく、このテーブルに多くのDELETEクエリがある場合は、テーブルをクリーンアップしてみてください。
VACUUM (VERBOSE, ANALYZE) table_name;
あなたの説明によると、このテーブルはシステムで非常に使用されているようであり、あなたのalterステートメントは仕事をするためにテーブルのロックを取得するのに時間がかかっています。システムへの負荷が少ないウィンドウを見つけて、を実行してみてください。
助けてくれたタンク、それは私のALTERTABLEをブロックするクエリでした。