mirror of
https://github.com/postgres/postgres.git
synced 2025-07-17 06:41:09 +03:00
Reduce lock levels of CREATE TRIGGER and some ALTER TABLE, CREATE RULE actions.
Avoid hard-coding lockmode used for many altering DDL commands, allowing easier future changes of lock levels. Implementation of initial analysis on DDL sub-commands, so that many lock levels are now at ShareUpdateExclusiveLock or ShareRowExclusiveLock, allowing certain DDL not to block reads/writes. First of number of planned changes in this area; additional docs required when full project complete.
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/rewrite/rewriteDefine.c,v 1.141 2010/02/14 18:42:15 rhaas Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/rewrite/rewriteDefine.c,v 1.142 2010/07/28 05:22:24 sriggs Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -236,11 +236,14 @@ DefineQueryRewrite(char *rulename,
|
||||
/*
|
||||
* If we are installing an ON SELECT rule, we had better grab
|
||||
* AccessExclusiveLock to ensure no SELECTs are currently running on the
|
||||
* event relation. For other types of rules, it might be sufficient to
|
||||
* grab ShareLock to lock out insert/update/delete actions. But for now,
|
||||
* let's just grab AccessExclusiveLock all the time.
|
||||
* event relation. For other types of rules, it is sufficient to
|
||||
* grab ShareRowExclusiveLock to lock out insert/update/delete actions
|
||||
* and to ensure that we lock out current CREATE RULE statements.
|
||||
*/
|
||||
event_relation = heap_open(event_relid, AccessExclusiveLock);
|
||||
if (event_type == CMD_SELECT)
|
||||
event_relation = heap_open(event_relid, AccessExclusiveLock);
|
||||
else
|
||||
event_relation = heap_open(event_relid, ShareRowExclusiveLock);
|
||||
|
||||
/*
|
||||
* Verify relation is of a type that rules can sensibly be applied to.
|
||||
|
Reference in New Issue
Block a user