aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bin/pg_dump/pg_backup.h2
-rw-r--r--src/bin/pg_dump/pg_backup_db.c66
-rw-r--r--src/bin/pg_dump/pg_backup_db.h2
-rw-r--r--src/bin/pg_dump/pg_dump.c17
4 files changed, 7 insertions, 80 deletions
diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h
index 4d49d2b96af..9d0056a569b 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 6a1e1d3acb2..5ba43441f50 100644
--- a/src/bin/pg_dump/pg_backup_db.c
+++ b/src/bin/pg_dump/pg_backup_db.c
@@ -531,72 +531,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 355beec1f7c..8888dd34b9b 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 cf89a7ec6d7..3c276f2bcb4 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -1185,9 +1185,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.
*/
@@ -6855,16 +6852,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);