Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite0a0cc2

Browse files
committed
Make pg_restore's identify_locking_dependencies() more bulletproof.
This function had a blacklist of dump object types that it believedneeded exclusive lock ... but we hadn't maintained that, so that itwas missing ROW SECURITY, POLICY, and INDEX ATTACH items, all ofwhich need (or should be treated as needing) exclusive lock.Since the same oversight seems likely in future, let's reverse thesense of the test so that the code has a whitelist of safe objecttypes; better to wrongly assume a command can't be run in parallelthan the opposite. Currently the only POST_DATA object type that'ssafe is CREATE INDEX ... and that list hasn't changed in a long time.Back-patch to 9.5 where RLS came in.Discussion:https://postgr.es/m/11450.1535483506@sss.pgh.pa.us
1 parent8cff4f5 commite0a0cc2

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

‎src/bin/pg_dump/pg_backup_archiver.c

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4589,16 +4589,24 @@ identify_locking_dependencies(ArchiveHandle *AH, TocEntry *te)
45894589
intnlockids;
45904590
inti;
45914591

4592+
/*
4593+
* We only care about this for POST_DATA items. PRE_DATA items are not
4594+
* run in parallel, and DATA items are all independent by assumption.
4595+
*/
4596+
if (te->section!=SECTION_POST_DATA)
4597+
return;
4598+
45924599
/* Quick exit if no dependencies at all */
45934600
if (te->nDeps==0)
45944601
return;
45954602

4596-
/* Exit if this entry doesn't need exclusive lock on other objects */
4597-
if (!(strcmp(te->desc,"CONSTRAINT")==0||
4598-
strcmp(te->desc,"CHECK CONSTRAINT")==0||
4599-
strcmp(te->desc,"FK CONSTRAINT")==0||
4600-
strcmp(te->desc,"RULE")==0||
4601-
strcmp(te->desc,"TRIGGER")==0))
4603+
/*
4604+
* Most POST_DATA items are ALTER TABLEs or some moral equivalent of that,
4605+
* and hence require exclusive lock. However, we know that CREATE INDEX
4606+
* does not. (Maybe someday index-creating CONSTRAINTs will fall in that
4607+
* category too ... but today is not that day.)
4608+
*/
4609+
if (strcmp(te->desc,"INDEX")==0)
46024610
return;
46034611

46044612
/*

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp