Thread: proposal: function pg_setting_value_split() to parse shared_preload_libraries etc.
proposal: function pg_setting_value_split() to parse shared_preload_libraries etc.
From
Ian Lawrence Barwick
Date:
Hi From time to time I find myself in a situation where it would be very useful to be able to programatically determine whether a particular library is included in "shared_preload_libraries", which accepts a comma-separated list of values. Unfortunately it's not as simple as splitting the list on the commas, as while that will *usually* work, the following is also valid: shared_preload_libraries = 'foo,bar,"baz ,"' and reliably splitting it up into its constituent parts would mean re-inventing a wheel (and worse possibly introducing some regular expressions into the process, cf. https://xkcd.com/1171/ ). Now, while it's highly unlikely someone will go to the trouble of creating a library name with commas and spaces in it, "highly unlikely" is not the same as "will definitely never ever happen". So it would be very handy to be able to use the same function PostgreSQL uses internally ("SplitDirectoriesString()") to produce the guaranteed same result. Attached patch provides a new function "pg_setting_value_split()" which does exactly this, i.e. called with a string containing such a list, it calls "SplitDirectoriesString()" and returns the result as a set of text, e.g.: postgres# SELECT setting FROM pg_setting_value_split('foo,bar,"baz ,"'); setting --------- foo bar baz , (3 rows) though a more likely use would be: SELECT setting FROM pg_setting_value_split(current_setting('shared_preload_libraries')); Other GUCs this applies to: - local_preload_libraries - session_preload_libraries - unix_socket_directories I will add this to the next CF. Regards Ian Barwick -- EnterpriseDB: https://www.enterprisedb.com
Attachment
Re: proposal: function pg_setting_value_split() to parse shared_preload_libraries etc.
From
Ian Lawrence Barwick
Date:
2020年10月23日(金) 9:53 Ian Lawrence Barwick <barwick@gmail.com>: > > Hi > > From time to time I find myself in a situation where it would be very useful to > be able to programatically determine whether a particular library is included in > "shared_preload_libraries", which accepts a comma-separated list of values. > > Unfortunately it's not as simple as splitting the list on the commas, as while > that will *usually* work, the following is also valid: > > shared_preload_libraries = 'foo,bar,"baz ,"' > > and reliably splitting it up into its constituent parts would mean re-inventing > a wheel (and worse possibly introducing some regular expressions into the > process, cf. https://xkcd.com/1171/ ). > > Now, while it's highly unlikely someone will go to the trouble of creating a > library name with commas and spaces in it, "highly unlikely" is not the same as > "will definitely never ever happen". So it would be very handy to be able to use > the same function PostgreSQL uses internally ("SplitDirectoriesString()") to > produce the guaranteed same result. > > Attached patch provides a new function "pg_setting_value_split()" which does > exactly this, i.e. called with a string containing such a list, it calls > "SplitDirectoriesString()" and returns the result as a set of text, e.g.: > > postgres# SELECT setting FROM pg_setting_value_split('foo,bar,"baz ,"'); > > setting > --------- > foo > bar > baz , > (3 rows) > > though a more likely use would be: > > SELECT setting FROM > pg_setting_value_split(current_setting('shared_preload_libraries')); > > Other GUCs this applies to: > > - local_preload_libraries > - session_preload_libraries > - unix_socket_directories Having just submitted this, I realised I'm focussing on the GUCs which call "SplitDirectoriesString()" (as my specific uses case is for "shared_preload_libraries") but the patch does not consider the other GUC_LIST_INPUT settings, which call "SplitIdentifierString()", so as is, it might produce unexpected results for those. I'll rethink and submit an updated version. Regards Ian Barwick
Re: proposal: function pg_setting_value_split() to parse shared_preload_libraries etc.
From
Anastasia Lubennikova
Date:
On 23.10.2020 05:06, Ian Lawrence Barwick wrote: > Having just submitted this, I realised I'm focussing on the GUCs which call > "SplitDirectoriesString()" (as my specific uses case is for > "shared_preload_libraries") > but the patch does not consider the other GUC_LIST_INPUT settings, which > call "SplitIdentifierString()", so as is, it might produce unexpected > results for those. > > I'll rethink and submit an updated version. Status update for a commitfest entry. This entry was "Waiting on author" during this CF. As I see, the patch needs more work before review, so I changed it to "Withdrawn". Feel free to resubmit an updated version to a future commitfest. -- Anastasia Lubennikova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company
Re: proposal: function pg_setting_value_split() to parse shared_preload_libraries etc.
From
Craig Ringer
Date:
On Mon, 30 Nov 2020 at 03:24, Anastasia Lubennikova <a.lubennikova@postgrespro.ru> wrote: > > On 23.10.2020 05:06, Ian Lawrence Barwick wrote: > > Having just submitted this, I realised I'm focussing on the GUCs which call > > "SplitDirectoriesString()" (as my specific uses case is for > > "shared_preload_libraries") > > but the patch does not consider the other GUC_LIST_INPUT settings, which > > call "SplitIdentifierString()", so as is, it might produce unexpected > > results for those. > > > > I'll rethink and submit an updated version. > > Status update for a commitfest entry. > > This entry was "Waiting on author" during this CF. As I see, the patch > needs more work before review, so I changed it to "Withdrawn". > Feel free to resubmit an updated version to a future commitfest. FWIW I was looking for this functionality just the other day, for parsing synchronous_standby_names . So I'd definitely welcome it.
Re: proposal: function pg_setting_value_split() to parse shared_preload_libraries etc.
From
Ian Lawrence Barwick
Date:
2020年11月30日(月) 14:53 Craig Ringer <craig.ringer@enterprisedb.com>: > > On Mon, 30 Nov 2020 at 03:24, Anastasia Lubennikova > <a.lubennikova@postgrespro.ru> wrote: > > > > On 23.10.2020 05:06, Ian Lawrence Barwick wrote: > > > Having just submitted this, I realised I'm focussing on the GUCs which call > > > "SplitDirectoriesString()" (as my specific uses case is for > > > "shared_preload_libraries") > > > but the patch does not consider the other GUC_LIST_INPUT settings, which > > > call "SplitIdentifierString()", so as is, it might produce unexpected > > > results for those. > > > > > > I'll rethink and submit an updated version. > > > > Status update for a commitfest entry. > > > > This entry was "Waiting on author" during this CF. As I see, the patch > > needs more work before review, so I changed it to "Withdrawn". > > Feel free to resubmit an updated version to a future commitfest. > > > FWIW I was looking for this functionality just the other day, for > parsing synchronous_standby_names . So I'd definitely welcome it. Thanks, useful to know someone else has a use-case for this I'll resubmit for the next CF. Regards Ian Barwick -- EnterpriseDB: https://www.enterprisedb.com