Re: pg_get_functiondef forgets about most GUC_LIST_INPUT GUCs
Artur Zakirov <a.zakirov@postgrespro.ru>
From: Arthur Zakirov <a.zakirov@postgrespro.ru>
To: Michael Paquier <michael@paquier.xyz>
Cc: Michael Paquier <michael.paquier@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, Postgres hackers <pgsql-hackers@postgresql.org>
Date: 2018-03-03T18:13:46Z
Lists: pgsql-hackers
On Wed, Feb 21, 2018 at 04:35:50PM +0900, Michael Paquier wrote: > You have an excellent point here, and I did not consider it. > For pg_dump and pg_dumpall, something like what I described in > https://www.postgresql.org/message-id/20180112012440.GA2222@paquier.xyz > to extend pg_settings so as GUC types are visible via SQL could make > sense, now it is really a lot for just being able to quote parameters > correctly. On top of that, what I suggested previously would not work > reliably except if we have pg_get_functiondef load the library > associated to a given parameter. Even in this case there could > perfectly be a custom parameter from another plugin and not a parameter > associated to the function language itself. In my opinion GetConfigOptionFlags() can be used for core and plpgsql GUCs. A variable should not be quoted if it has GUC_LIST_INPUT flag or it is plpgsql.extra_warnings or plpgsql.extra_errors. I'm not sure that it is good to raise an error when the variable isn't found, because without the patch the error isn't raised. But maybe better to raise it to notify a user that there is a wrong variable. In this case we may not raise the error if variable name contains GUC_QUALIFIER_SEPARATOR. > It seems to me that this brings us back to a best-effort for the backend > and the frontend by maintaining a list of hardcoded parameter names, > which could be refined a maximum by considering lists for in-core > extensions and perhaps the most famous extensions around :( It seems for frontend maintaining a hardcoded list is the only way. Agree that extending pg_settings for that could be too much. I've searched extensions in GitHub with GUC_LIST_INPUT variables. There are couple of them: - https://github.com/ohmu/pgmemcache - https://github.com/marconeperes/pgBRTypes And some not very fresh: - https://github.com/witblitz/pldotnet - https://github.com/ohmu/pgloggingfilter - https://github.com/wangyuehong/pggearman - https://github.com/siavashg/pgredis -- Arthur Zakirov Postgres Professional: http://www.postgrespro.com Russian Postgres Company
Commits
-
Prevent extensions from creating custom GUCs that are GUC_LIST_QUOTE.
- 846b5a525746 11.0 landed
-
Fix mishandling of quoted-list GUC values in pg_dump and ruleutils.c.
- be677bb5aa79 9.3.23 landed
- a35d72923165 9.5.13 landed
- 8132f0f3856d 9.6.9 landed
- 742869946f4f 11.0 landed
- 67e02cde7373 9.4.18 landed
- 66e92878aaec 10.4 landed