maintaining backwards compatibility for to_regclass argument type change from cstring to text
I have encountered an issue in testing our upgrade from 9.4.4 to 9.6.1. Per the changes detailed in /messages/by-id/E1aGVwY-0002Pu-Uk@gemulon.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
Michael Rasmussen <michaelr@porch.com> writes:
I have encountered an issue in testing our upgrade from 9.4.4 to 9.6.1. Per the changes detailed in /messages/by-id/E1aGVwY-0002Pu-Uk@gemulon.postgresql.org, the argument types of the to_reg*() functions were changed from cstring to text.
Right.
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:
Personally, I'd try to convert everything to new style, and put a shim
function into pre-9.6 deployments only. This seems to work:
create function to_regclass(text) returns regclass
language sql as 'select to_regclass($1::cstring)';
regards, tom lane
--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general