Hi all, Some time ago we added [1] the infrastructure to allow different lock levels for relation options.
So per discussion [2] the attached patch reduce lock levels down to ShareUpdateExclusiveLock for: - fastupdate - fillfactor - gin_pending_list_limit - seq_page_cost - random_page_cost - n_distinct - n_distinct_inherited - buffering Att, [1] http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=47167b7907a802ed39b179c8780b76359468f076 [2] http://www.postgresql.org/message-id/20150731022857.gc11...@alap3.anarazel.de -- Fabrízio de Royes Mello Consultoria/Coaching PostgreSQL >> Timbira: http://www.timbira.com.br >> Blog: http://fabriziomello.github.io >> Linkedin: http://br.linkedin.com/in/fabriziomello >> Twitter: http://twitter.com/fabriziomello >> Github: http://github.com/fabriziomello
diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c index 86b9ae1..8128dd4 100644 --- a/src/backend/access/common/reloptions.c +++ b/src/backend/access/common/reloptions.c @@ -76,7 +76,7 @@ static relopt_bool boolRelOpts[] = "fastupdate", "Enables \"fast update\" feature for this GIN index", RELOPT_KIND_GIN, - AccessExclusiveLock + ShareUpdateExclusiveLock }, true }, @@ -100,7 +100,7 @@ static relopt_int intRelOpts[] = "fillfactor", "Packs table pages only to this percentage", RELOPT_KIND_HEAP, - AccessExclusiveLock + ShareUpdateExclusiveLock }, HEAP_DEFAULT_FILLFACTOR, HEAP_MIN_FILLFACTOR, 100 }, @@ -109,7 +109,7 @@ static relopt_int intRelOpts[] = "fillfactor", "Packs btree index pages only to this percentage", RELOPT_KIND_BTREE, - AccessExclusiveLock + ShareUpdateExclusiveLock }, BTREE_DEFAULT_FILLFACTOR, BTREE_MIN_FILLFACTOR, 100 }, @@ -118,7 +118,7 @@ static relopt_int intRelOpts[] = "fillfactor", "Packs hash index pages only to this percentage", RELOPT_KIND_HASH, - AccessExclusiveLock + ShareUpdateExclusiveLock }, HASH_DEFAULT_FILLFACTOR, HASH_MIN_FILLFACTOR, 100 }, @@ -127,7 +127,7 @@ static relopt_int intRelOpts[] = "fillfactor", "Packs gist index pages only to this percentage", RELOPT_KIND_GIST, - AccessExclusiveLock + ShareUpdateExclusiveLock }, GIST_DEFAULT_FILLFACTOR, GIST_MIN_FILLFACTOR, 100 }, @@ -136,7 +136,7 @@ static relopt_int intRelOpts[] = "fillfactor", "Packs spgist index pages only to this percentage", RELOPT_KIND_SPGIST, - AccessExclusiveLock + ShareUpdateExclusiveLock }, SPGIST_DEFAULT_FILLFACTOR, SPGIST_MIN_FILLFACTOR, 100 }, @@ -250,7 +250,7 @@ static relopt_int intRelOpts[] = "gin_pending_list_limit", "Maximum size of the pending list for this GIN index, in kilobytes.", RELOPT_KIND_GIN, - AccessExclusiveLock + ShareUpdateExclusiveLock }, -1, 64, MAX_KILOBYTES }, @@ -297,7 +297,7 @@ static relopt_real realRelOpts[] = "seq_page_cost", "Sets the planner's estimate of the cost of a sequentially fetched disk page.", RELOPT_KIND_TABLESPACE, - AccessExclusiveLock + ShareUpdateExclusiveLock }, -1, 0.0, DBL_MAX }, @@ -306,7 +306,7 @@ static relopt_real realRelOpts[] = "random_page_cost", "Sets the planner's estimate of the cost of a nonsequentially fetched disk page.", RELOPT_KIND_TABLESPACE, - AccessExclusiveLock + ShareUpdateExclusiveLock }, -1, 0.0, DBL_MAX }, @@ -315,7 +315,7 @@ static relopt_real realRelOpts[] = "n_distinct", "Sets the planner's estimate of the number of distinct values appearing in a column (excluding child relations).", RELOPT_KIND_ATTRIBUTE, - AccessExclusiveLock + ShareUpdateExclusiveLock }, 0, -1.0, DBL_MAX }, @@ -324,7 +324,7 @@ static relopt_real realRelOpts[] = "n_distinct_inherited", "Sets the planner's estimate of the number of distinct values appearing in a column (including child relations).", RELOPT_KIND_ATTRIBUTE, - AccessExclusiveLock + ShareUpdateExclusiveLock }, 0, -1.0, DBL_MAX }, @@ -339,7 +339,7 @@ static relopt_string stringRelOpts[] = "buffering", "Enables buffering build for this GiST index", RELOPT_KIND_GIST, - AccessExclusiveLock + ShareUpdateExclusiveLock }, 4, false, diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out index 7c88ddc..3232cda 100644 --- a/src/test/regress/expected/alter_table.out +++ b/src/test/regress/expected/alter_table.out @@ -2065,19 +2065,19 @@ select * from my_locks order by 1; commit; begin; alter table alterlock set (fillfactor = 100); select * from my_locks order by 1; - relname | max_lockmode ------------+--------------------- - alterlock | AccessExclusiveLock - pg_toast | AccessExclusiveLock + relname | max_lockmode +-----------+-------------------------- + alterlock | ShareUpdateExclusiveLock + pg_toast | ShareUpdateExclusiveLock (2 rows) commit; begin; alter table alterlock reset (fillfactor); select * from my_locks order by 1; - relname | max_lockmode ------------+--------------------- - alterlock | AccessExclusiveLock - pg_toast | AccessExclusiveLock + relname | max_lockmode +-----------+-------------------------- + alterlock | ShareUpdateExclusiveLock + pg_toast | ShareUpdateExclusiveLock (2 rows) commit; @@ -2110,10 +2110,10 @@ rollback; -- test that mixing options with different lock levels works as expected begin; alter table alterlock set (autovacuum_enabled = off, fillfactor = 80); select * from my_locks order by 1; - relname | max_lockmode ------------+--------------------- - alterlock | AccessExclusiveLock - pg_toast | AccessExclusiveLock + relname | max_lockmode +-----------+-------------------------- + alterlock | ShareUpdateExclusiveLock + pg_toast | ShareUpdateExclusiveLock (2 rows) commit;
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers