diff options
Diffstat (limited to 'src/bin/pg_dump/pg_dump.c')
-rw-r--r-- | src/bin/pg_dump/pg_dump.c | 50 |
1 files changed, 42 insertions, 8 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 8a76ac60254..3ca046f066c 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -13077,9 +13077,11 @@ dumpCollation(Archive *fout, const CollInfo *collinfo) int i_collisdeterministic; int i_collcollate; int i_collctype; + int i_colliculocale; const char *collprovider; const char *collcollate; const char *collctype; + const char *colliculocale; /* Do nothing in data-only dump */ if (dopt->dataOnly) @@ -13110,6 +13112,13 @@ dumpCollation(Archive *fout, const CollInfo *collinfo) appendPQExpBufferStr(query, "true AS collisdeterministic, "); + if (fout->remoteVersion >= 150000) + appendPQExpBufferStr(query, + "colliculocale, "); + else + appendPQExpBufferStr(query, + "NULL AS colliculocale, "); + appendPQExpBuffer(query, "collcollate, " "collctype " @@ -13123,10 +13132,24 @@ dumpCollation(Archive *fout, const CollInfo *collinfo) i_collisdeterministic = PQfnumber(res, "collisdeterministic"); i_collcollate = PQfnumber(res, "collcollate"); i_collctype = PQfnumber(res, "collctype"); + i_colliculocale = PQfnumber(res, "colliculocale"); collprovider = PQgetvalue(res, 0, i_collprovider); - collcollate = PQgetvalue(res, 0, i_collcollate); - collctype = PQgetvalue(res, 0, i_collctype); + + if (!PQgetisnull(res, 0, i_collcollate)) + collcollate = PQgetvalue(res, 0, i_collcollate); + else + collcollate = NULL; + + if (!PQgetisnull(res, 0, i_collctype)) + collctype = PQgetvalue(res, 0, i_collctype); + else + collctype = NULL; + + if (!PQgetisnull(res, 0, i_colliculocale)) + colliculocale = PQgetvalue(res, 0, i_colliculocale); + else + colliculocale = NULL; appendPQExpBuffer(delq, "DROP COLLATION %s;\n", fmtQualifiedDumpable(collinfo)); @@ -13149,17 +13172,28 @@ dumpCollation(Archive *fout, const CollInfo *collinfo) if (strcmp(PQgetvalue(res, 0, i_collisdeterministic), "f") == 0) appendPQExpBufferStr(q, ", deterministic = false"); - if (strcmp(collcollate, collctype) == 0) + if (colliculocale != NULL) { appendPQExpBufferStr(q, ", locale = "); - appendStringLiteralAH(q, collcollate, fout); + appendStringLiteralAH(q, colliculocale, fout); } else { - appendPQExpBufferStr(q, ", lc_collate = "); - appendStringLiteralAH(q, collcollate, fout); - appendPQExpBufferStr(q, ", lc_ctype = "); - appendStringLiteralAH(q, collctype, fout); + Assert(collcollate != NULL); + Assert(collctype != NULL); + + if (strcmp(collcollate, collctype) == 0) + { + appendPQExpBufferStr(q, ", locale = "); + appendStringLiteralAH(q, collcollate, fout); + } + else + { + appendPQExpBufferStr(q, ", lc_collate = "); + appendStringLiteralAH(q, collcollate, fout); + appendPQExpBufferStr(q, ", lc_ctype = "); + appendStringLiteralAH(q, collctype, fout); + } } /* |