Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit ccca223

Browse files
committed
- Use subselect when enabling triggers,
- Use exact table names when enabling/disabling triggers
1 parent e376cb6 commit ccca223

File tree

1 file changed

+5
-21
lines changed

1 file changed

+5
-21
lines changed

src/bin/pg_dump/pg_backup_archiver.c

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ static void _disableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te, Restore
420420
*/
421421

422422
if (te && te->name && strlen(te->name) > 0)
423-
ahprintf(AH, "UPDATE \"pg_class\" SET \"reltriggers\" = 0 WHERE \"relname\" ~* '%s';\n",
423+
ahprintf(AH, "UPDATE \"pg_class\" SET \"reltriggers\" = 0 WHERE \"relname\" = '%s';\n\n",
424424
te->name);
425425
else
426426
ahprintf(AH, "UPDATE \"pg_class\" SET \"reltriggers\" = 0 WHERE \"relname\" !~ '^pg_';\n\n");
@@ -471,26 +471,10 @@ static void _enableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te, RestoreO
471471
* command when one is available.
472472
*/
473473
ahprintf(AH, "-- Enable triggers\n");
474-
ahprintf(AH, "BEGIN TRANSACTION;\n");
475-
ahprintf(AH, "CREATE TEMP TABLE \"tr\" (\"tmp_relname\" name, \"tmp_reltriggers\" smallint);\n");
476-
477-
/*
478-
* Just update the affected table, if known.
479-
*/
480-
if (te && te->name && strlen(te->name) > 0)
481-
ahprintf(AH, "INSERT INTO \"tr\" SELECT C.\"relname\", count(T.\"oid\") FROM \"pg_class\" C,"
482-
" \"pg_trigger\" T WHERE C.\"oid\" = T.\"tgrelid\" AND C.\"relname\" ~* '%s' "
483-
" GROUP BY 1;\n", te->name);
484-
else
485-
ahprintf(AH, "INSERT INTO \"tr\" SELECT C.\"relname\", count(T.\"oid\") FROM \"pg_class\" C,"
486-
" \"pg_trigger\" T WHERE C.\"oid\" = T.\"tgrelid\" AND C.\"relname\" !~ '^pg_' "
487-
" GROUP BY 1;\n");
488-
489-
ahprintf(AH, "UPDATE \"pg_class\" SET \"reltriggers\" = TMP.\"tmp_reltriggers\" "
490-
"FROM \"tr\" TMP WHERE "
491-
"\"pg_class\".\"relname\" = TMP.\"tmp_relname\";\n");
492-
ahprintf(AH, "DROP TABLE \"tr\";\n");
493-
ahprintf(AH, "COMMIT TRANSACTION;\n\n");
474+
ahprintf(AH, "UPDATE pg_class SET reltriggers = "
475+
"(SELECT count(*) FROM pg_trigger where pg_class.oid = tgrelid) "
476+
"WHERE relname = '%s';\n\n",
477+
te->name);
494478

495479
/*
496480
* Restore the user connection from the start of this procedure

0 commit comments

Comments
 (0)