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