Skip to content

Commit 05aeeb5

Browse files
committed
Ensure schema qualification in pg_restore DISABLE/ENABLE TRIGGER commands.
Previously, this code blindly followed the common coding pattern of passing PQserverVersion(AH->connection) as the server-version parameter of fmtQualifiedId. That works as long as we have a connection; but in pg_restore with text output, we don't. Instead we got a zero from PQserverVersion, which fmtQualifiedId interpreted as "server is too old to have schemas", and so the name went unqualified. That still accidentally managed to work in many cases, which is probably why this ancient bug went undetected for so long. It only became obvious in the wake of the changes to force dump/restore to execute with restricted search_path. In HEAD/v11, let's deal with this by ripping out fmtQualifiedId's server- version behavioral dependency, and just making it schema-qualify all the time. We no longer support pg_dump from servers old enough to need the ability to omit schema name, let alone restoring to them. (Also, the few callers outside pg_dump already didn't work with pre-schema servers.) In older branches, that's not an acceptable solution, so instead just tweak the DISABLE/ENABLE TRIGGER logic to ensure it will schema-qualify its output regardless of server version. Per bug #15338 from Oleg somebody. Back-patch to all supported branches. Discussion: https://postgr.es/m/153452458706.1316.5328079417086507743@wrigleys.postgresql.org
1 parent d31ebbf commit 05aeeb5

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

src/bin/pg_dump/pg_backup_archiver.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -992,10 +992,12 @@ _disableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te)
992992
_becomeUser(AH, ropt->superuser);
993993

994994
/*
995-
* Disable them.
995+
* Disable them. Assume that the table name should be schema-qualified
996+
* (we can't look at PQserverVersion, since we might not have any
997+
* connection; and anyway we don't promise our output will load pre-7.3).
996998
*/
997999
ahprintf(AH, "ALTER TABLE %s DISABLE TRIGGER ALL;\n\n",
998-
fmtQualifiedId(PQserverVersion(AH->connection),
1000+
fmtQualifiedId(70300,
9991001
te->namespace,
10001002
te->tag));
10011003
}
@@ -1020,10 +1022,10 @@ _enableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te)
10201022
_becomeUser(AH, ropt->superuser);
10211023

10221024
/*
1023-
* Enable them.
1025+
* Enable them. As above, force schema qualification.
10241026
*/
10251027
ahprintf(AH, "ALTER TABLE %s ENABLE TRIGGER ALL;\n\n",
1026-
fmtQualifiedId(PQserverVersion(AH->connection),
1028+
fmtQualifiedId(70300,
10271029
te->namespace,
10281030
te->tag));
10291031
}

0 commit comments

Comments
 (0)