Hi All, DBLINK contrib module started showing :"unnamed" connection name.
Consider the below test: postgres=# CREATE ROLE alice NOSUPERUSER NOCREATEDB NOCREATEROLE LOGIN PASSWORD 'wonderland'; CREATE ROLE postgres=# GRANT EXECUTE ON FUNCTION dblink_connect_u(text,text) to alice; GRANT postgres=# \c postgres alice You are now connected to database "postgres" as user "alice". postgres=> SELECT dblink_connect_u('sm_conn_30','dbname=postgres user=alice password=wonderland'); dblink_connect_u ------------------ OK (1 row) postgres=> SELECT * FROM dblink_send_query('sm_conn_30','SELECT pg_stat_reset()') as dgr; dgr ----- 1 (1 row) postgres=> SELECT * FROM dblink_get_result('sm_conn_30') AS dgr(curr_user boolean); ERROR: permission denied for function pg_stat_reset CONTEXT: Error occurred on dblink connection named "*unnamed*": could not execute query. This started with below commit: commit acaf7ccb94a3916ea83712671a3563f0eb595558 Author: Peter Eisentraut <pete...@gmx.net> Date: Sun Dec 25 12:00:00 2016 -0500 dblink: Replace some macros by static functions Also remove some unused code and the no longer useful dblink.h file. Reviewed-by: Tsunakawa, Takayuki <tsunakawa.ta...@jp.fujitsu.com> Before this, macro used to assign the conname local variable; I quickly worked on the fix and attached patch do fix the issues. Patch assign the conname local variable, so that error context show the correct connection name. Regards, Rushabh Lathia www.EnterpriseDB.com
diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c index c1e9089..e42cec4 100644 --- a/contrib/dblink/dblink.c +++ b/contrib/dblink/dblink.c @@ -679,7 +679,7 @@ dblink_record_internal(FunctionCallInfo fcinfo, bool is_async) PG_TRY(); { char *sql = NULL; - char *conname = NULL; + char *conname = text_to_cstring(PG_GETARG_TEXT_PP(0)); bool fail = true; /* default to backward compatible */ if (!is_async) @@ -687,7 +687,7 @@ dblink_record_internal(FunctionCallInfo fcinfo, bool is_async) if (PG_NARGS() == 3) { /* text,text,bool */ - dblink_get_conn(text_to_cstring(PG_GETARG_TEXT_PP(0)), &conn, &conname, &freeconn); + dblink_get_conn(conname, &conn, &conname, &freeconn); sql = text_to_cstring(PG_GETARG_TEXT_PP(1)); fail = PG_GETARG_BOOL(2); } @@ -702,7 +702,7 @@ dblink_record_internal(FunctionCallInfo fcinfo, bool is_async) } else { - dblink_get_conn(text_to_cstring(PG_GETARG_TEXT_PP(0)), &conn, &conname, &freeconn); + dblink_get_conn(conname, &conn, &conname, &freeconn); sql = text_to_cstring(PG_GETARG_TEXT_PP(1)); } } @@ -722,13 +722,13 @@ dblink_record_internal(FunctionCallInfo fcinfo, bool is_async) if (PG_NARGS() == 2) { /* text,bool */ - conn = dblink_get_named_conn(text_to_cstring(PG_GETARG_TEXT_PP(0))); + conn = dblink_get_named_conn(conname); fail = PG_GETARG_BOOL(1); } else if (PG_NARGS() == 1) { /* text */ - conn = dblink_get_named_conn(text_to_cstring(PG_GETARG_TEXT_PP(0))); + conn = dblink_get_named_conn(conname); } else /* shouldn't happen */ @@ -1390,7 +1390,8 @@ dblink_exec(PG_FUNCTION_ARGS) if (PG_NARGS() == 3) { /* must be text,text,bool */ - dblink_get_conn(text_to_cstring(PG_GETARG_TEXT_PP(0)), &conn, &conname, &freeconn); + conname = text_to_cstring(PG_GETARG_TEXT_PP(0)); + dblink_get_conn(conname, &conn, &conname, &freeconn); sql = text_to_cstring(PG_GETARG_TEXT_PP(1)); fail = PG_GETARG_BOOL(2); } @@ -1405,7 +1406,8 @@ dblink_exec(PG_FUNCTION_ARGS) } else { - dblink_get_conn(text_to_cstring(PG_GETARG_TEXT_PP(0)), &conn, &conname, &freeconn); + conname = text_to_cstring(PG_GETARG_TEXT_PP(0)); + dblink_get_conn(conname, &conn, &conname, &freeconn); sql = text_to_cstring(PG_GETARG_TEXT_PP(1)); } }
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers