Tom Lane wrote:
[color=blue]
> Richard Huxton <dev@archonet.com> writes:
>[color=green]
>>One thing I think would be useful is another pseudo-var in PG,
>>something like APP_SESSION_VAR which can be set and then used in PG
>>queries.[/color]
>
>[color=green]
>>Tom - if I offered to produce a patch for something like this - either a var
>>or a function pair (get_app_session_var(), set_app_session_var(varchar))
>>would it be likely to be accepted?[/color]
>
>
> It'd depend a lot on the details of what you propose, I think. True
> variables seem like they'd be rather invasive, not to mention possibly
> error-prone (is "foo" a variable or a column reference?). However you
> could do something pretty self-contained in the form of a couple of
> functions. I'd suggest they support more than just one variable, btw.
> How about "set_session_variable(varname, varvalue)" and
> "get_session_variable(varname)"?
>
> I should think we'd at least accept that as a contrib module; whether it
> would become mainstream would probably depend on the level of interest.[/color]
In the past, one hack would be to use setenv() and getenv() of the
backend to implement these functions. What about a contrib module that:
1) At set_session_variable(), a getenv() on the key
(PG_APP_SESSION_VAR) is made to see if memory has already been
allocated for a private variable map. If so, add the variable to the
map, else allocate a new map and set it's address using setenv().
2) At get_session_variable() a getenv() on the key
(PG_APP_SESSION_VAR) is made to see if a map exists. If so, it looks
into the map for the value of the name specified and returns it.
3) At get reset_session_variables() a getenv() on the key
(PG_APP_SESSION_VAR) is made to see if a map exists. If so, it is emptied.
This way, no change to any internal postgres code is required, the
memory allocated to the session-specific variables gets released at
backend closing, etc.
Would something like that be acceptable?
Mike Mascari
mascarm@mascari.com
---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to
majordomo@postgresql.org)