@@ -1272,7 +1272,9 @@ describeOneTableDetails(const char *schemaname,
12721272else
12731273appendPQExpBuffer (& buf ,",\n NULL AS indexdef" );
12741274if (tableinfo .relkind == 'f' && pset .sversion >=90200 )
1275- appendPQExpBuffer (& buf ,",\n a.attfdwoptions" );
1275+ appendPQExpBuffer (& buf ,",\n CASE WHEN attfdwoptions IS NULL THEN '' ELSE "
1276+ " '(' || array_to_string(ARRAY(SELECT quote_ident(option_name) || ' ' || quote_literal(option_value) FROM "
1277+ " pg_options_to_table(attfdwoptions)), ', ') || ')' END AS attfdwoptions" );
12761278else
12771279appendPQExpBuffer (& buf ,",\n NULL AS attfdwoptions" );
12781280if (verbose )
@@ -2038,7 +2040,10 @@ describeOneTableDetails(const char *schemaname,
20382040/* Footer information about foreign table */
20392041printfPQExpBuffer (& buf ,
20402042"SELECT s.srvname,\n"
2041- " f.ftoptions\n"
2043+ " array_to_string(ARRAY(SELECT "
2044+ " quote_ident(option_name) || ' ' || "
2045+ " quote_literal(option_value) FROM "
2046+ " pg_options_to_table(ftoptions)), ', ') "
20422047"FROM pg_catalog.pg_foreign_table f,\n"
20432048" pg_catalog.pg_foreign_server s\n"
20442049"WHERE f.ftrelid = %s AND s.oid = f.ftserver;" ,
@@ -2061,7 +2066,7 @@ describeOneTableDetails(const char *schemaname,
20612066ftoptions = PQgetvalue (result ,0 ,1 );
20622067if (ftoptions && ftoptions [0 ]!= '\0' )
20632068{
2064- printfPQExpBuffer (& buf ,"FDW Options:%s " ,ftoptions );
2069+ printfPQExpBuffer (& buf ,"FDW Options:(%s) " ,ftoptions );
20652070printTableAddFooter (& cont ,buf .data );
20662071}
20672072PQclear (result );
@@ -3679,7 +3684,12 @@ listForeignDataWrappers(const char *pattern, bool verbose)
36793684appendPQExpBuffer (& buf ,",\n " );
36803685printACLColumn (& buf ,"fdwacl" );
36813686appendPQExpBuffer (& buf ,
3682- ",\n fdwoptions AS \"%s\"" ,
3687+ ",\n CASE WHEN fdwoptions IS NULL THEN '' ELSE "
3688+ " '(' || array_to_string(ARRAY(SELECT "
3689+ " quote_ident(option_name) || ' ' || "
3690+ " quote_literal(option_value) FROM "
3691+ " pg_options_to_table(fdwoptions)), ', ') || ')' "
3692+ " END AS \"%s\"" ,
36833693gettext_noop ("FDW Options" ));
36843694
36853695if (pset .sversion >=90100 )
@@ -3752,7 +3762,12 @@ listForeignServers(const char *pattern, bool verbose)
37523762",\n"
37533763" s.srvtype AS \"%s\",\n"
37543764" s.srvversion AS \"%s\",\n"
3755- " s.srvoptions AS \"%s\",\n"
3765+ " CASE WHEN srvoptions IS NULL THEN '' ELSE "
3766+ " '(' || array_to_string(ARRAY(SELECT "
3767+ " quote_ident(option_name) || ' ' || "
3768+ " quote_literal(option_value) FROM "
3769+ " pg_options_to_table(srvoptions)), ', ') || ')' "
3770+ " END AS \"%s\",\n"
37563771" d.description AS \"%s\"" ,
37573772gettext_noop ("Type" ),
37583773gettext_noop ("Version" ),
@@ -3818,7 +3833,12 @@ listUserMappings(const char *pattern, bool verbose)
38183833
38193834if (verbose )
38203835appendPQExpBuffer (& buf ,
3821- ",\n um.umoptions AS \"%s\"" ,
3836+ ",\n CASE WHEN umoptions IS NULL THEN '' ELSE "
3837+ " '(' || array_to_string(ARRAY(SELECT "
3838+ " quote_ident(option_name) || ' ' || "
3839+ " quote_literal(option_value) FROM "
3840+ " pg_options_to_table(umoptions)), ', ') || ')' "
3841+ " END AS \"%s\"" ,
38223842gettext_noop ("FDW Options" ));
38233843
38243844appendPQExpBuffer (& buf ,"\nFROM pg_catalog.pg_user_mappings um\n" );
@@ -3873,7 +3893,12 @@ listForeignTables(const char *pattern, bool verbose)
38733893
38743894if (verbose )
38753895appendPQExpBuffer (& buf ,
3876- ",\n ft.ftoptions AS \"%s\",\n"
3896+ ",\n CASE WHEN ftoptions IS NULL THEN '' ELSE "
3897+ " '(' || array_to_string(ARRAY(SELECT "
3898+ " quote_ident(option_name) || ' ' || "
3899+ " quote_literal(option_value) FROM "
3900+ " pg_options_to_table(ftoptions)), ', ') || ')' "
3901+ " END AS \"%s\",\n"
38773902" d.description AS \"%s\"" ,
38783903gettext_noop ("FDW Options" ),
38793904gettext_noop ("Description" ));