diff --git a/src/bin/pg_dump/pg_dump.cpp b/src/bin/pg_dump/pg_dump.cpp index e8dd19284..9d1d5b29a 100644 --- a/src/bin/pg_dump/pg_dump.cpp +++ b/src/bin/pg_dump/pg_dump.cpp @@ -1535,7 +1535,6 @@ void getopt_dump(int argc, char** argv, struct option options[], int* result) break; case 'n': /* include schema(s) */ simple_string_list_append(&schema_include_patterns, optarg); - include_everything = false; break; case 'N': /* exclude schema(s) */ @@ -22539,6 +22538,7 @@ static void dumpSynonym(Archive* fout) int i_tableoid = 0; int i_synname = 0; int i_nspname = 0; + int i_nspoid = 0; int i_rolname = 0; int i_synobjschema = 0; int i_synobjname = 0; @@ -22569,7 +22569,7 @@ static void dumpSynonym(Archive* fout) * Only the super user can access pg_authid. Therefore, user verification is ignored. */ appendPQExpBuffer(query, - "SELECT s.oid, s.tableoid, s.synname, n.nspname, a.rolname, s.synobjschema, s.synobjname " + "SELECT s.oid, s.tableoid, s.synname, n.nspname, n.oid as nspoid, a.rolname, s.synobjschema, s.synobjname " "FROM pg_synonym s, pg_namespace n, pg_authid a " "WHERE n.oid = s.synnamespace AND s.synowner = a.oid;"); @@ -22586,11 +22586,16 @@ static void dumpSynonym(Archive* fout) i_tableoid = PQfnumber(res, "tableoid"); i_synname = PQfnumber(res, "synname"); i_nspname = PQfnumber(res, "nspname"); + i_nspoid = PQfnumber(res, "nspoid"); i_rolname = PQfnumber(res, "rolname"); i_synobjschema = PQfnumber(res, "synobjschema"); i_synobjname = PQfnumber(res, "synobjname"); for (i = 0; i < ntups; i++) { + Oid schemaOid = atooid(PQgetvalue(res, i, i_nspoid)); + if (!simple_oid_list_member(&schema_include_oids, schemaOid)) { + continue; + } char* synname = NULL; char* nspname = NULL; char* rolname = NULL; diff --git a/src/test/regress/input/gs_dump_synonym.source b/src/test/regress/input/gs_dump_synonym.source new file mode 100644 index 000000000..7ef1120d4 --- /dev/null +++ b/src/test/regress/input/gs_dump_synonym.source @@ -0,0 +1,16 @@ +drop database if exists dump_synonym; +create database dump_synonym; +create database restore_synonym_db; +\c dump_synonym +create schema t1; +create schema t2; +create table t1.test1(col1 int); +create or replace synonym t1.syn1 for t1.test1; +create or replace synonym t2.syn2 for t1.test1; +\! @abs_bindir@/gs_dump -p @portstring@ -n t1 -f @abs_bindir@/dump_synonym.dmp -s dump_synonym > @abs_bindir@/gs_dump.log 2>&1 ; echo $? +\! @abs_bindir@/gsql -d restore_synonym_db -p @portstring@ -f @abs_bindir@/dump_synonym.dmp > @abs_bindir@/gs_dump.log 2>&1 ; echo $? +\c restore_synonym_db +select synname from pg_synonym; +drop database dump_synonym; +\c regression +drop database restore_synonym_db; diff --git a/src/test/regress/output/gs_dump_synonym.source b/src/test/regress/output/gs_dump_synonym.source new file mode 100644 index 000000000..c631a0ed7 --- /dev/null +++ b/src/test/regress/output/gs_dump_synonym.source @@ -0,0 +1,24 @@ +drop database if exists dump_synonym; +NOTICE: database "dump_synonym" does not exist, skipping +create database dump_synonym; +create database restore_synonym_db; +\c dump_synonym +create schema t1; +create schema t2; +create table t1.test1(col1 int); +create or replace synonym t1.syn1 for t1.test1; +create or replace synonym t2.syn2 for t1.test1; +\! @abs_bindir@/gs_dump -p @portstring@ -n t1 -f @abs_bindir@/dump_synonym.dmp -s dump_synonym > @abs_bindir@/gs_dump.log 2>&1 ; echo $? +0 +\! @abs_bindir@/gsql -d restore_synonym_db -p @portstring@ -f @abs_bindir@/dump_synonym.dmp > @abs_bindir@/gs_dump.log 2>&1 ; echo $? +0 +\c restore_synonym_db +select synname from pg_synonym; + synname +--------- + syn1 +(1 row) + +drop database dump_synonym; +\c regression +drop database restore_synonym_db; diff --git a/src/test/regress/parallel_schedule0 b/src/test/regress/parallel_schedule0 index d396ebe1a..921478c21 100644 --- a/src/test/regress/parallel_schedule0 +++ b/src/test/regress/parallel_schedule0 @@ -73,7 +73,7 @@ test: transaction_with_snapshot test: select_into_user_defined_variables test: select_into_file -test: gs_dump_package trigger_dump gs_dumpall +test: gs_dump_package trigger_dump gs_dumpall gs_dump_synonym test: out_param_func #test: sqlcode_cursor test: gs_dump_tableconstraint diff --git a/src/test/regress/parallel_schedule0A b/src/test/regress/parallel_schedule0A index b64f37087..213015b87 100644 --- a/src/test/regress/parallel_schedule0A +++ b/src/test/regress/parallel_schedule0A @@ -63,7 +63,7 @@ test: set_transaction_test test: select_into_user_defined_variables test: select_into_file -test: gs_dump_package trigger_dump +test: gs_dump_package trigger_dump gs_dump_synonym test: out_param_func out_param_func_overload #test: sqlcode_cursor test: gs_dump_tableconstraint