dump-partitions.patch
text/x-diff
Filename: dump-partitions.patch
Type: text/x-diff
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/bin/pg_dump/pg_backup_archiver.c | 22 | 27 |
| src/bin/pg_dump/pg_backup_archiver.h | 0 | 1 |
| src/bin/pg_dump/t/002_pg_dump.pl | 8 | 21 |
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index c7a6c918a6..93df260986 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -61,7 +61,7 @@ static void _becomeUser(ArchiveHandle *AH, const char *user);
static void _becomeOwner(ArchiveHandle *AH, TocEntry *te);
static void _selectOutputSchema(ArchiveHandle *AH, const char *schemaName);
static void _selectTablespace(ArchiveHandle *AH, const char *tablespace);
-static void _selectTableAccessMethod(ArchiveHandle *AH, const char *tableam);
+static void _selectTableAccessMethod(ArchiveHandle *AH, TocEntry *te);
static void processEncodingEntry(ArchiveHandle *AH, TocEntry *te);
static void processStdStringsEntry(ArchiveHandle *AH, TocEntry *te);
static void processSearchPathEntry(ArchiveHandle *AH, TocEntry *te);
@@ -2373,7 +2373,6 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt,
AH->currUser = NULL; /* unknown */
AH->currSchema = NULL; /* ditto */
AH->currTablespace = NULL; /* ditto */
- AH->currTableAm = NULL; /* ditto */
AH->toc = (TocEntry *) pg_malloc0(sizeof(TocEntry));
@@ -3356,9 +3355,6 @@ _reconnectToDB(ArchiveHandle *AH, const char *dbname)
free(AH->currSchema);
AH->currSchema = NULL;
- free(AH->currTableAm);
- AH->currTableAm = NULL;
-
free(AH->currTablespace);
AH->currTablespace = NULL;
@@ -3519,31 +3515,32 @@ _selectTablespace(ArchiveHandle *AH, const char *tablespace)
}
/*
- * Set the proper default_table_access_method value for the table.
+ * Set the proper default table access method for the table.
*/
static void
-_selectTableAccessMethod(ArchiveHandle *AH, const char *tableam)
+_selectTableAccessMethod(ArchiveHandle *AH, TocEntry *te)
{
RestoreOptions *ropt = AH->public.ropt;
+ const char *tableam = te->tableam;
PQExpBuffer cmd;
- const char *want,
- *have;
/* do nothing in --no-table-access-method mode */
if (ropt->noTableAm)
return;
- have = AH->currTableAm;
- want = tableam;
-
- if (!want)
- return;
-
- if (have && strcmp(want, have) == 0)
+ if (!tableam)
return;
cmd = createPQExpBuffer();
- appendPQExpBuffer(cmd, "SET default_table_access_method = %s;", fmtId(want));
+
+ appendPQExpBufferStr(cmd, "ALTER ");
+ if (strcmp(te->desc, "MATERIALIZED VIEW") == 0)
+ appendPQExpBufferStr(cmd, "MATERIALIZED VIEW ");
+ else
+ appendPQExpBufferStr(cmd, "TABLE ");
+ appendPQExpBuffer(cmd, "%s ", fmtQualifiedId(te->namespace, te->tag));
+ appendPQExpBuffer(cmd, "SET ACCESS METHOD %s;",
+ fmtId(tableam));
if (RestoringToDB(AH))
{
@@ -3553,7 +3550,7 @@ _selectTableAccessMethod(ArchiveHandle *AH, const char *tableam)
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
warn_or_exit_horribly(AH,
- "could not set default_table_access_method: %s",
+ "could not set table access method: %s",
PQerrorMessage(AH->connection));
PQclear(res);
@@ -3562,9 +3559,6 @@ _selectTableAccessMethod(ArchiveHandle *AH, const char *tableam)
ahprintf(AH, "%s\n\n", cmd->data);
destroyPQExpBuffer(cmd);
-
- free(AH->currTableAm);
- AH->currTableAm = pg_strdup(want);
}
/*
@@ -3673,11 +3667,10 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData)
{
RestoreOptions *ropt = AH->public.ropt;
- /* Select owner, schema, tablespace and default AM as necessary */
+ /* Select owner, schema and tablespace as necessary */
_becomeOwner(AH, te);
_selectOutputSchema(AH, te->namespace);
_selectTablespace(AH, te->tablespace);
- _selectTableAccessMethod(AH, te->tableam);
/* Emit header comment for item */
if (!AH->noTocComments)
@@ -3812,6 +3805,12 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, bool isData)
}
}
+ /*
+ * Select the table's default AM, once the table definition has
+ * been generated.
+ */
+ _selectTableAccessMethod(AH, te);
+
/*
* If it's an ACL entry, it might contain SET SESSION AUTHORIZATION
* commands, so we can no longer assume we know the current auth setting.
@@ -4173,8 +4172,6 @@ restore_toc_entries_prefork(ArchiveHandle *AH, TocEntry *pending_list)
AH->currSchema = NULL;
free(AH->currTablespace);
AH->currTablespace = NULL;
- free(AH->currTableAm);
- AH->currTableAm = NULL;
}
/*
@@ -4910,7 +4907,6 @@ CloneArchive(ArchiveHandle *AH)
clone->connCancel = NULL;
clone->currUser = NULL;
clone->currSchema = NULL;
- clone->currTableAm = NULL;
clone->currTablespace = NULL;
/* savedPassword must be local in case we change it while connecting */
@@ -4970,7 +4966,6 @@ DeCloneArchive(ArchiveHandle *AH)
free(AH->currUser);
free(AH->currSchema);
free(AH->currTablespace);
- free(AH->currTableAm);
free(AH->savedPassword);
free(AH);
diff --git a/src/bin/pg_dump/pg_backup_archiver.h b/src/bin/pg_dump/pg_backup_archiver.h
index d6104a7196..d7409916d7 100644
--- a/src/bin/pg_dump/pg_backup_archiver.h
+++ b/src/bin/pg_dump/pg_backup_archiver.h
@@ -322,7 +322,6 @@ struct _archiveHandle
char *currUser; /* current username, or NULL if unknown */
char *currSchema; /* current schema, or NULL */
char *currTablespace; /* current tablespace, or NULL */
- char *currTableAm; /* current table access method, or NULL */
/* in --transaction-size mode, this counts objects emitted in cur xact */
int txnCount;
diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl
index 0c057fef94..c37054e7e7 100644
--- a/src/bin/pg_dump/t/002_pg_dump.pl
+++ b/src/bin/pg_dump/t/002_pg_dump.pl
@@ -4539,11 +4539,8 @@ my %tests = (
CREATE TABLE dump_test.regress_pg_dump_table_am_1 (col1 int) USING regress_table_am;
CREATE TABLE dump_test.regress_pg_dump_table_am_2() USING heap;',
regexp => qr/^
- \QSET default_table_access_method = regress_table_am;\E
- (\n(?!SET[^;]+;)[^\n]*)*
- \n\QCREATE TABLE dump_test.regress_pg_dump_table_am_1 (\E
- \n\s+\Qcol1 integer\E
- \n\);/xm,
+ \QALTER TABLE dump_test.regress_pg_dump_table_am_1 SET ACCESS METHOD regress_table_am;\E
+ \n/xm,
like => {
%full_runs, %dump_test_schema_runs, section_pre_data => 1,
},
@@ -4562,12 +4559,8 @@ my %tests = (
USING regress_table_am AS SELECT count(*) FROM pg_class;
CREATE MATERIALIZED VIEW dump_test.regress_pg_dump_matview_am_2 USING heap AS SELECT 1;',
regexp => qr/^
- \QSET default_table_access_method = regress_table_am;\E
- (\n(?!SET[^;]+;)[^\n]*)*
- \QCREATE MATERIALIZED VIEW dump_test.regress_pg_dump_matview_am_1 AS\E
- \n\s+\QSELECT count(*) AS count\E
- \n\s+\QFROM pg_class\E
- \n\s+\QWITH NO DATA;\E\n/xm,
+ \QALTER MATERIALIZED VIEW dump_test.regress_pg_dump_matview_am_1 SET ACCESS METHOD regress_table_am;\E
+ \n/xm,
like => {
%full_runs, %dump_test_schema_runs, section_pre_data => 1,
},
@@ -4591,18 +4584,12 @@ my %tests = (
CREATE TABLE dump_test.regress_pg_dump_table_am_child_2
PARTITION OF dump_test.regress_pg_dump_table_am_parent FOR VALUES IN (2);',
regexp => qr/^
- \QSET default_table_access_method = regress_table_am;\E
- (\n(?!SET[^;]+;)[^\n]*)*
- \n\QCREATE TABLE dump_test.regress_pg_dump_table_am_parent (\E
+ \QALTER TABLE dump_test.regress_pg_dump_table_am_parent SET ACCESS METHOD regress_table_am;\E
(.*\n)*
- \QSET default_table_access_method = heap;\E
- (\n(?!SET[^;]+;)[^\n]*)*
- \n\QCREATE TABLE dump_test.regress_pg_dump_table_am_child_1 (\E
+ \n\QALTER TABLE dump_test.regress_pg_dump_table_am_child_1 SET ACCESS METHOD heap;\E
(.*\n)*
- \QSET default_table_access_method = regress_table_am;\E
- (\n(?!SET[^;]+;)[^\n]*)*
- \n\QCREATE TABLE dump_test.regress_pg_dump_table_am_child_2 (\E
- (.*\n)*/xm,
+ \n\QALTER TABLE dump_test.regress_pg_dump_table_am_child_2 SET ACCESS METHOD regress_table_am;\E
+ \n/xm,
like => {
%full_runs, %dump_test_schema_runs, section_pre_data => 1,
},