I have encountered an issue in testing our upgrade from 9.4.4 to 9.6.1. Per the 
changes detailed in 
https://www.postgresql.org/message-id/E1aGVwY-0002Pu-Uk%40gemulon.postgresql.org,
 the argument types of the to_reg*() functions were changed from cstring to 
text.

We have some plpgsql helper functions for our developers that run some dynamic 
SQL. At the time, we had followed the solution of doing a hard cast to cstring 
as found on Stack Overflow at 
http://stackoverflow.com/questions/31648730/postgres-convert-text-to-string-or-difference-between-abc-vs-a-bc
 and 
http://stackoverflow.com/questions/33952892/use-dynamically-created-name-in-to-regclass-function,
 because there are no implicit conversions between cstring to text nor text to 
cstring.

I am now faced with having to support both 9.4 and 9.6 as we will not be 
upgrading all servers simultaneously. The solution I have come up with is to 
use if-else statements that check the numeric version of the cluster the 
function is installed on. An example:

if current_setting('server_version_num')::integer < 90600 then
    raise notice '%', to_regclass((myschema||'. '||mytable)::cstring);
else
    raise notice '%', to_regclass(myschema||'. '||mytable);
end if;

I wanted to confirm, is this the best way to approach this?
 
-- 
Michael Rasmussen
Sr. Data Engineer
Porch


-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

Reply via email to