diff options
Diffstat (limited to 'src/bin/pg_dump/pg_dump.c')
-rw-r--r-- | src/bin/pg_dump/pg_dump.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 3b4b63d8971..4485ea83b1e 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -2761,6 +2761,7 @@ dumpDatabase(Archive *fout) i_acldefault, i_datistemplate, i_datconnlimit, + i_datcollversion, i_tablespace; CatalogId dbCatId; DumpId dbDumpId; @@ -2792,6 +2793,10 @@ dumpDatabase(Archive *fout) appendPQExpBuffer(dbQry, "datminmxid, "); else appendPQExpBuffer(dbQry, "0 AS datminmxid, "); + if (fout->remoteVersion >= 150000) + appendPQExpBuffer(dbQry, "datcollversion, "); + else + appendPQExpBuffer(dbQry, "NULL AS datcollversion, "); appendPQExpBuffer(dbQry, "(SELECT spcname FROM pg_tablespace t WHERE t.oid = dattablespace) AS tablespace, " "shobj_description(oid, 'pg_database') AS description " @@ -2813,6 +2818,7 @@ dumpDatabase(Archive *fout) i_acldefault = PQfnumber(res, "acldefault"); i_datistemplate = PQfnumber(res, "datistemplate"); i_datconnlimit = PQfnumber(res, "datconnlimit"); + i_datcollversion = PQfnumber(res, "datcollversion"); i_tablespace = PQfnumber(res, "tablespace"); dbCatId.tableoid = atooid(PQgetvalue(res, 0, i_tableoid)); @@ -2873,6 +2879,21 @@ dumpDatabase(Archive *fout) } /* + * For binary upgrade, carry over the collation version. For normal + * dump/restore, omit the version, so that it is computed upon restore. + */ + if (dopt->binary_upgrade) + { + if (!PQgetisnull(res, 0, i_datcollversion)) + { + appendPQExpBufferStr(creaQry, " COLLATION_VERSION = "); + appendStringLiteralAH(creaQry, + PQgetvalue(res, 0, i_datcollversion), + fout); + } + } + + /* * Note: looking at dopt->outputNoTablespaces here is completely the wrong * thing; the decision whether to specify a tablespace should be left till * pg_restore, so that pg_restore --no-tablespaces applies. Ideally we'd |