diff options
Diffstat (limited to 'src/bin/pg_dump/pg_dump.c')
-rw-r--r-- | src/bin/pg_dump/pg_dump.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 535b1601655..3c2201a725f 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -16570,6 +16570,7 @@ dumpSequence(Archive *fout, const TableInfo *tbinfo) PQExpBuffer query = createPQExpBuffer(); PQExpBuffer delqry = createPQExpBuffer(); char *qseqname; + TableInfo *owning_tab = NULL; qseqname = pg_strdup(fmtId(tbinfo->dobj.name)); @@ -16678,7 +16679,7 @@ dumpSequence(Archive *fout, const TableInfo *tbinfo) if (tbinfo->is_identity_sequence) { - TableInfo *owning_tab = findTableByOid(tbinfo->owning_tab); + owning_tab = findTableByOid(tbinfo->owning_tab); appendPQExpBuffer(query, "ALTER TABLE %s ", @@ -16696,7 +16697,9 @@ dumpSequence(Archive *fout, const TableInfo *tbinfo) else { appendPQExpBuffer(query, - "CREATE SEQUENCE %s\n", + "CREATE %sSEQUENCE %s\n", + tbinfo->relpersistence == RELPERSISTENCE_UNLOGGED ? + "UNLOGGED " : "", fmtQualifiedDumpable(tbinfo)); if (strcmp(seqtype, "bigint") != 0) @@ -16722,7 +16725,15 @@ dumpSequence(Archive *fout, const TableInfo *tbinfo) cache, (cycled ? "\n CYCLE" : "")); if (tbinfo->is_identity_sequence) + { appendPQExpBufferStr(query, "\n);\n"); + if (tbinfo->relpersistence != owning_tab->relpersistence) + appendPQExpBuffer(query, + "ALTER SEQUENCE %s SET %s;\n", + fmtQualifiedDumpable(tbinfo), + tbinfo->relpersistence == RELPERSISTENCE_UNLOGGED ? + "UNLOGGED" : "LOGGED"); + } else appendPQExpBufferStr(query, ";\n"); |