diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h index 2a5cd66ca8..97941fa3fd 100644 --- a/src/bin/pg_dump/pg_backup.h +++ b/src/bin/pg_dump/pg_backup.h @@ -199,8 +199,6 @@ typedef struct Archive int minRemoteVersion; /* allowable range */ int maxRemoteVersion; - bool hasGenericLockTable; /* can LOCK TABLE do non-table rels */ - int numWorkers; /* number of parallel processes */ char *sync_snapshot_id; /* sync snapshot id for parallel operation */ diff --git a/src/bin/pg_dump/pg_backup_db.c b/src/bin/pg_dump/pg_backup_db.c index 590a5055f3..61f7453e63 100644 --- a/src/bin/pg_dump/pg_backup_db.c +++ b/src/bin/pg_dump/pg_backup_db.c @@ -534,72 +534,6 @@ EndDBCopyMode(Archive *AHX, const char *tocEntryTag) } } -/* - * Does LOCK TABLE work on non-table relations on this server? - * - * Note: assumes it is called out of any transaction - */ -bool -IsLockTableGeneric(Archive *AHX) -{ - ArchiveHandle *AH = (ArchiveHandle *) AHX; - PGresult *res; - char *sqlstate; - bool retval; - - if (AHX->remoteVersion >= 140000) - return true; - else if (AHX->remoteVersion < 90500) - return false; - - StartTransaction(AHX); - - /* - * Try a LOCK TABLE on a well-known non-table catalog; WRONG_OBJECT_TYPE - * tells us that this server doesn't support locking non-table rels, while - * LOCK_NOT_AVAILABLE and INSUFFICIENT_PRIVILEGE tell us that it does. - * Report anything else as a fatal problem. - */ -#define ERRCODE_INSUFFICIENT_PRIVILEGE "42501" -#define ERRCODE_WRONG_OBJECT_TYPE "42809" -#define ERRCODE_LOCK_NOT_AVAILABLE "55P03" - res = PQexec(AH->connection, - "LOCK TABLE pg_catalog.pg_class_tblspc_relfilenode_index IN ACCESS SHARE MODE NOWAIT"); - switch (PQresultStatus(res)) - { - case PGRES_COMMAND_OK: - retval = true; - break; - case PGRES_FATAL_ERROR: - sqlstate = PQresultErrorField(res, PG_DIAG_SQLSTATE); - if (sqlstate && - strcmp(sqlstate, ERRCODE_WRONG_OBJECT_TYPE) == 0) - { - retval = false; - break; - } - else if (sqlstate && - (strcmp(sqlstate, ERRCODE_LOCK_NOT_AVAILABLE) == 0 || - strcmp(sqlstate, ERRCODE_INSUFFICIENT_PRIVILEGE) == 0)) - { - retval = true; - break; - } - /* else, falls through */ - default: - warn_or_exit_horribly(AH, "LOCK TABLE failed for \"%s\": %s", - "pg_catalog.pg_class_tblspc_relfilenode_index", - PQerrorMessage(AH->connection)); - retval = false; /* not reached */ - break; - } - PQclear(res); - - CommitTransaction(AHX); - - return retval; -} - void StartTransaction(Archive *AHX) { diff --git a/src/bin/pg_dump/pg_backup_db.h b/src/bin/pg_dump/pg_backup_db.h index 355beec1f7..8888dd34b9 100644 --- a/src/bin/pg_dump/pg_backup_db.h +++ b/src/bin/pg_dump/pg_backup_db.h @@ -20,8 +20,6 @@ extern PGresult *ExecuteSqlQueryForSingleRow(Archive *fout, const char *query); extern void EndDBCopyMode(Archive *AHX, const char *tocEntryTag); -extern bool IsLockTableGeneric(Archive *AHX); - extern void StartTransaction(Archive *AHX); extern void CommitTransaction(Archive *AHX); diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 081f5be7dd..bce8d54af3 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -1168,9 +1168,6 @@ setup_connection(Archive *AH, const char *dumpencoding, ExecuteSqlStatement(AH, "SET row_security = off"); } - /* Detect whether LOCK TABLE can handle non-table relations */ - AH->hasGenericLockTable = IsLockTableGeneric(AH); - /* * Start transaction-snapshot mode transaction to dump consistent data. */ @@ -6730,16 +6727,16 @@ getTables(Archive *fout, int *numTables) * assume our lock on the child is enough to prevent schema * alterations to parent tables. * - * We only need to lock the relation for certain components; see - * pg_dump.h + * NOTE: it'd be kinda nice to lock other relations too, not only + * plain or partitioned tables, but the backend doesn't presently + * allow that. * - * On server versions that support it, we lock all relations not just - * plain tables. + * We only need to lock the table for certain components; see + * pg_dump.h */ if (tblinfo[i].dobj.dump && - (fout->hasGenericLockTable || - tblinfo[i].relkind == RELKIND_PARTITIONED_TABLE || - tblinfo[i].relkind == RELKIND_RELATION) && + (tblinfo[i].relkind == RELKIND_RELATION || + tblinfo->relkind == RELKIND_PARTITIONED_TABLE) && (tblinfo[i].dobj.dump & DUMP_COMPONENTS_REQUIRING_LOCK)) { resetPQExpBuffer(query);