ALTER TABLE foo ADD COLUMN baz text
postgresデータベースで実行しても読み取りまたは書き込みロックが発生しないことをどこかで読んだと思います。デフォルト値を設定するとロックが発生しますが、null デフォルトを許可するとロックが防止されます。
ただし、ドキュメントでこれを見つけることができません。これが真実かどうかを明確に述べている場所を誰か指摘できますか?
ALTER TABLE foo ADD COLUMN baz text
postgresデータベースで実行しても読み取りまたは書き込みロックが発生しないことをどこかで読んだと思います。デフォルト値を設定するとロックが発生しますが、null デフォルトを許可するとロックが防止されます。
ただし、ドキュメントでこれを見つけることができません。これが真実かどうかを明確に述べている場所を誰か指摘できますか?
さまざまな種類のロックとそれらが使用されるタイミングについては、
テーブル レベル ロックのドキュメントに記載されています。たとえば、Postgres 11は、、またはロックALTER TABLE
を取得する場合があります。SHARE UPDATE EXCLUSIVE
SHARE ROW EXCLUSIVE
ACCESS EXCLUSIVE
Postgres 9.1 から 9.3 は、上記の 3 つのうち 2 つをサポートすると主張していましたが、実際にはこのコマンドのすべてのバリアントに対して強制されAccess Exclusive
ていました。この制限はPostgres 9.4 で解除されましたが、設計上ADD COLUMN
はそのままACCESS EXCLUSIVE
です。
さまざまな場合にこのコマンドに必要なロック レベルを確立する専用の関数があるため、ソース コードを簡単にチェックインできAlterTableGetLockLevel
ますsrc/backend/commands/tablecmds.c
。
ロックが保持される時間については、一度取得すると次のようになります。