>> You lass in the $USER to you client software where it executes a
post-connect hook SQL script populating a temp table with that value,
usually via a function.

A "post-connect hook SQF script" ?
My (limited) understanding of this is that once you connect, you're on the
server and everything on the client side (like $USER) is no longer in play.
But a "post-connect hook SQF script" sounds like something you would
run unconditionally after the connect which would then create/populate the
temp table.

The problem is that I need to do this outside of an app which could run
something like that.  Users will connect to the DB and then update a table
using SQL at the prompt.  And I want a post update trigger to identify who
(linux user on the client side) just made that change.    I was sort of
hoping that this 8 character string (the linux user id) could be passed
from client -> server as a parameter that is set on the user/client side,
perhaps using that "-v" option, which could somehow be passed along to the
server.  But from what you said earlier, that only exists on the client
side.

Is there any mechanism for a client connect request to pass a variable like
this to the server which it then could read on the server side?



On Mon, Aug 17, 2020 at 5:53 PM David G. Johnston <
david.g.johns...@gmail.com> wrote:

> On Monday, August 17, 2020, David Gauthier <davegauthie...@gmail.com>
> wrote:
>
>> OK, trying to piece together something that might work but I don't see
>> the pieces falling into place.
>> From the link you provided...
>>
>> "The most fundamental way to set these parameters is to edit the file
>> postgresql.conf"
>> So I'm fine with asking our IT guys to stick some lines in there for us.
>> But will the thing that executes the file understand what $USER is ?  Will
>> this work...   "osuser = $USER"
>>
>
> This does not seem like something you’d setup at the server configuration
> level...and no, writing osuser=$USER is going to be unintelligible to the
> server.
>
>
>>
>> I tried this sort of thing through $PGOPTIONS...
>> setenv PGOPTIONS "-c 'osuser=$USER'"
>> But when I go to connect...
>> psql: FATAL:  unrecognized configuration parameter "'osuser"
>>
>
>> I can avoid the error by just throwing a namespace in there...
>>
>
> Expected
>
>
>> atletx7-reg036:/home/dgauthie[ 214 ] --> setenv PGOPTIONS "-c
>> 'os.user=$USER' "
>> But once in, "show os.user" is undefined.
>>
>
> Not sure, though maybe start with constants for values to isolate the
> where info is being lost.  I’m not absolutely positive that PGOPTIONS will
> even work here and even if it does that method has some limitations if you
> want to use things like connection poolers.  It is, however, the existing
> ideal way to accomplish the goal of having the connection pre-establish a
> server GUC at startup without having to deal with SQL.
>
>
>>
>> I'm fine with a temp table approach, but don't really know where/how to
>> create it in terms of pg sys files, init scripts or env vars like
>> PGOPTIONS.
>>
>
> You would interact with it using pure SQL.  The how/where depends heavily
> on your environment.  You lass in the $USER to you client software where it
> executes a post-connect hook SQL script populating a temp table with that
> value, usually via a function.
>
> David J.
>
>

Reply via email to