Hello. I noticed what I think is a bug in pg_dump.
When dumping foreign tables, the server name is not properly quoted, which leads to unrestorable dumps. eg, a foreign table attached to a foreign server named "file-test" is dumped as: CREATE FOREIGN TABLE "test-table" ( col1 integer ) SERVER file-test OPTIONS (filename '/tmp/test'); Please look at the attached test case and the proposed patch. Thank you. -- Ronan Dunklau
create database test_dump_foreign_server; \connect test_dump_foreign_server ; create extension file_fdw; create server "file-test" foreign data wrapper file_fdw; create foreign table "test-table" (col1 integer) server "file-test" options (filename '/tmp/test');
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index ec932e4..1068b6a 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -12303,7 +12303,8 @@ dumpTableSchema(Archive *fout, TableInfo *tbinfo) /* retrieve name of foreign server and generic options */ appendPQExpBuffer(query, - "SELECT fs.srvname, array_to_string(ARRAY(" + "SELECT quote_ident(fs.srvname) as srvname," + "array_to_string(ARRAY(" " SELECT quote_ident(option_name) || ' ' || " " quote_literal(option_value)" " FROM pg_options_to_table(ftoptions)), ', ') AS ftoptions "
signature.asc
Description: OpenPGP digital signature