Alexandre ,

Fiquei encafifado .... Bolei algo que resolve... mas as variaveis são
de sessão .. então, toda vez que conectar tem q setar as variáveis...
e quando desconectar ... limpa elas.. se não vão ficar ocupando espaço
do banco.... Ou faz um scriptzinho que limpa as variaveis antigas !!


Testei em 3 sessões ao mesmo tempo .. sem erros ...

La vai :

----  START CODE
CREATE SEQUENCE session_id;

CREATE TABLE session_var
(
        sessid bigint,
        var     varchar,
        val     text,
        tmsp    time default current_timestamp
);


CREATE OR REPLACE FUNCTION set_var(varchar,text) RETURNS text AS $$
        INSERT INTO session_var VALUES(get_sessid(),$1,$2);
        select $2;
$$
LANGUAGE 'sql';

CREATE OR REPLACE FUNCTION get_var(varchar) RETURNS TEXT AS $$
        SELECT val FROM session_var WHERE sessid = get_sessid() AND var = $1;
$$
LANGUAGE 'sql';



CREATE OR REPLACE FUNCTION get_sessid() RETURNS bigint AS $$
DECLARE
        ss BIGINT;
BEGIN
        SELECT currval('session_id') INTO ss;
        RETURN ss;
        
        EXCEPTION WHEN object_not_in_prerequisite_state THEN
                SELECT nextval('session_id') INTO ss;
        RETURN ss;
END
$$
LANGUAGE 'plpgsql';
-- END CODE

Testes :

nesic2=# select get_var('test');
 get_var
---------

(1 row)

nesic2=# select set_var('id_user',10);
 set_var
---------
 10
(1 row)

nesic2=# select get_var('id_user');
 get_var
---------
 10
(1 row)


-- 
Att:
Thiago Risso
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a