Thread: How to find configuration data in _PG_init()
My language handler requires some configuration information to start up, which I would like to get from the file system (but it could be set up by an SQL query SET). Currently I’m using hard-coded paths, which doesn’t seem like a good solution. Is there perhaps a way to get the path that was used to load the DLL? I couldn’t find one in the existing language implementations.
Having got started it then needs to query the database. Is that OK in _PG_init()?
Any hints much appreciated.
Regards
David M Bennett FACS
Andl - A New Database Language - andl.org
On 03/10/2016 05:24 AM, david@andl.org wrote: > My language handler requires some configuration information to start up, > which I would like to get from the file system (but it could be set up > by an SQL query SET). Currently I’m using hard-coded paths, which > doesn’t seem like a good solution. Is there perhaps a way to get the > path that was used to load the DLL? I couldn’t find one in the existing > language implementations. There is pg_config: http://www.postgresql.org/docs/9.5/interactive/app-pgconfig.html At the moment it is only available from the above command. In 9.6: http://www.depesz.com/2016/02/29/waiting-for-9-6-add-new-system-view-pg_config/ it also be available in a system view. There are the following systems catalogs that give you information about languages: http://www.postgresql.org/docs/9.5/interactive/catalog-pg-language.html http://www.postgresql.org/docs/9.5/interactive/catalog-pg-pltemplate.html http://www.postgresql.org/docs/9.5/interactive/catalog-pg-proc.html > > Having got started it then needs to query the database. Is that OK in > _PG_init()? > > Any hints much appreciated. > > Regards > > David M Bennett FACS > > / > ------------------------------------------------------------------------ > / > > /Andl - A New Database Language - andl.org/ > -- Adrian Klaver adrian.klaver@aklaver.com
> owner@postgresql.org] On Behalf Of Adrian Klaver > > My language handler requires some configuration information to start > > up, which I would like to get from the file system (but it could be > > set up by an SQL query SET). Currently I’m using hard-coded paths, > > which doesn’t seem like a good solution. Is there perhaps a way to > get > > the path that was used to load the DLL? I couldn’t find one in the > > existing language implementations. > > There is pg_config: > > http://www.postgresql.org/docs/9.5/interactive/app-pgconfig.html Thanks for the response, but this doesn't help. This is a standalone exe and it relies on the command line to find its ownpath. I need something that works in _PG_init(), which has no arguments passed in, and can only make calls to the C api. > At the moment it is only available from the above command. In 9.6: > > http://www.depesz.com/2016/02/29/waiting-for-9-6-add-new-system-view- > pg_config/ > > it also be available in a system view. So what C api calls does that implementation make to find this information? > > There are the following systems catalogs that give you information > about > languages: > > http://www.postgresql.org/docs/9.5/interactive/catalog-pg- > language.html > > http://www.postgresql.org/docs/9.5/interactive/catalog-pg- > pltemplate.html > http://www.postgresql.org/docs/9.5/interactive/catalog-pg-proc.html Yes, I'm familiar with all those. One possibility is to retrieve pg_proc.probin, which appears to always contain the relevantpath. > > > > > Having got started it then needs to query the database. Is that OK > in > > _PG_init()? Regards David M Bennett FACS Andl - A New Database Language - andl.org