Thread: How to find configuration data in _PG_init()

How to find configuration data in _PG_init()

From
Date:

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

 

Re: How to find configuration data in _PG_init()

From
Adrian Klaver
Date:
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


Re: How to find configuration data in _PG_init()

From
Date:
> 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