proposal: function pg_setting_value_split() to parse shared_preload_libraries etc. - Mailing list pgsql-hackers

From Ian Lawrence Barwick
Subject proposal: function pg_setting_value_split() to parse shared_preload_libraries etc.
Date
Msg-id CAB8KJ=gi67GQcEur2HebEbZxTr-EZLUaKOekUnk30v08GaCNVQ@mail.gmail.com
Whole thread Raw
Responses Re: proposal: function pg_setting_value_split() to parse shared_preload_libraries etc.  (Ian Lawrence Barwick <barwick@gmail.com>)
List pgsql-hackers
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

pgsql-hackers by date:

Previous
From: Michael Paquier
Date:
Subject: Re: [patch] Fix checksum verification in base backups for zero page headers
Next
From: "tsunakawa.takay@fujitsu.com"
Date:
Subject: RE: [Patch] Optimize dropping of relation buffers using dlist