0004-Fix-pg_dump-to-dump-COMMENT-ON-USER-MAPPING-statemen.patch
application/octet-stream
Filename: 0004-Fix-pg_dump-to-dump-COMMENT-ON-USER-MAPPING-statemen.patch
Type: application/octet-stream
Part: 3
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: format-patch
Series: patch 0004
Subject: Fix pg_dump to dump COMMENT ON USER MAPPING statements.
| File | + | − |
|---|---|---|
| src/bin/pg_dump/pg_dump.c | 23 | 5 |
From 42097594aa45ed1012e710adcc895b84c4b13407 Mon Sep 17 00:00:00 2001
From: Shigeru Hanada <hanada@metrosystems.co.jp>
Date: Mon, 4 Apr 2011 19:32:02 +0900
Subject: [PATCH 4/5] Fix pg_dump to dump COMMENT ON USER MAPPING statements.
---
src/bin/pg_dump/pg_dump.c | 28 +++++++++++++++++++++++-----
1 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 90cb9ab..925c4c0 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -11197,16 +11197,21 @@ dumpUserMappings(Archive *fout,
PQExpBuffer delq;
PQExpBuffer query;
PQExpBuffer tag;
+ PQExpBuffer label;
PGresult *res;
int ntups;
+ int i_tableoid;
+ int i_umid;
int i_usename;
int i_umoptions;
int i;
+ CatalogId catId;
q = createPQExpBuffer();
tag = createPQExpBuffer();
delq = createPQExpBuffer();
query = createPQExpBuffer();
+ label = createPQExpBuffer();
/*
* We read from the publicly accessible view pg_user_mappings, so as not
@@ -11218,8 +11223,11 @@ dumpUserMappings(Archive *fout,
*/
selectSourceSchema("pg_catalog");
+ resetPQExpBuffer(query);
appendPQExpBuffer(query,
- "SELECT usename, "
+ "SELECT 'pg_catalog.pg_user_mapping'::pg_catalog.regclass::oid AS tableoid, "
+ "umid, "
+ "usename, "
"array_to_string(ARRAY(SELECT option_name || ' ' || quote_literal(option_value) FROM pg_options_to_table(umoptions)), ', ') AS umoptions\n"
"FROM pg_user_mappings "
"WHERE srvid = %u",
@@ -11229,6 +11237,8 @@ dumpUserMappings(Archive *fout,
check_sql_result(res, g_conn, query->data, PGRES_TUPLES_OK);
ntups = PQntuples(res);
+ i_tableoid = PQfnumber(res, "tableoid");
+ i_umid = PQfnumber(res, "umid");
i_usename = PQfnumber(res, "usename");
i_umoptions = PQfnumber(res, "umoptions");
@@ -11237,12 +11247,17 @@ dumpUserMappings(Archive *fout,
char *usename;
char *umoptions;
+ catId.tableoid = atooid(PQgetvalue(res, i, i_tableoid));
+ catId.oid = atooid(PQgetvalue(res, i, i_umid));
usename = PQgetvalue(res, i, i_usename);
umoptions = PQgetvalue(res, i, i_umoptions);
+ resetPQExpBuffer(label);
+ appendPQExpBuffer(label, "USER MAPPING FOR %s", fmtId(usename));
+ appendPQExpBuffer(label, " SERVER %s", fmtId(servername));
+
resetPQExpBuffer(q);
- appendPQExpBuffer(q, "CREATE USER MAPPING FOR %s", fmtId(usename));
- appendPQExpBuffer(q, " SERVER %s", fmtId(servername));
+ appendPQExpBuffer(q, "CREATE %s", label->data);
if (umoptions && strlen(umoptions) > 0)
appendPQExpBuffer(q, " OPTIONS (%s)", umoptions);
@@ -11250,8 +11265,7 @@ dumpUserMappings(Archive *fout,
appendPQExpBuffer(q, ";\n");
resetPQExpBuffer(delq);
- appendPQExpBuffer(delq, "DROP USER MAPPING FOR %s", fmtId(usename));
- appendPQExpBuffer(delq, " SERVER %s;\n", fmtId(servername));
+ appendPQExpBuffer(delq, "DROP %s", label->data);
resetPQExpBuffer(tag);
appendPQExpBuffer(tag, "USER MAPPING %s SERVER %s",
@@ -11266,10 +11280,14 @@ dumpUserMappings(Archive *fout,
q->data, delq->data, NULL,
&dumpId, 1,
NULL, NULL);
+
+ /* Dump User Mapping Comments */
+ dumpComment(fout, label->data, NULL, owner, catId, 0, dumpId);
}
PQclear(res);
+ destroyPQExpBuffer(label);
destroyPQExpBuffer(query);
destroyPQExpBuffer(delq);
destroyPQExpBuffer(q);
--
1.7.3