Estou usando a função set_config para configurar a configuração do search_path dentro de uma função pl/pgsql, mas não esta funcionando como o esperado.

O total que deveria ser retornado pela função seria 8000.00 e não 3000.00 como acontece com o exemplo abaixo. Pelo que li no manual do PostgreSQL a chama a função set_config esta correta. Estou escrevendo para certificar se o comportamento é esse mesmo ou se trata de um BUG.

Posso resolver isso facilmente usando EXECUTE, mas acho o exemplo abaixo mais elegante.

Sugestões?


select version();
-- "PostgreSQL 8.4.2, compiled by Visual C++ build 1400, 32-bit"

CREATE SCHEMA emp0001;
CREATE SCHEMA emp0002;
CREATE SCHEMA emp0005;

CREATE TABLE emp0001.salario (
valor NUMERIC(12,2)
) WITHOUT OIDS;

CREATE TABLE emp0002.salario (
valor NUMERIC(12,2)
) WITHOUT OIDS;

CREATE TABLE emp0005.salario (
valor NUMERIC(12,2)
) WITHOUT OIDS;


INSERT INTO emp0001.salario VALUES (1000.00);

INSERT INTO emp0002.salario VALUES (1000.00);
INSERT INTO emp0002.salario VALUES (1000.00);

INSERT INTO emp0005.salario VALUES (1000.00);
INSERT INTO emp0005.salario VALUES (1000.00);
INSERT INTO emp0005.salario VALUES (1000.00);
INSERT INTO emp0005.salario VALUES (1000.00);
INSERT INTO emp0005.salario VALUES (1000.00);

CREATE LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION GetTotalSalario() RETURNS numeric AS
$body$
DECLARE
    empresas record;
    total_empresa numeric := 0;
    total_geral numeric := 0;
BEGIN

FOR empresas IN SELECT nspname FROM pg_namespace WHERE nspname LIKE 'emp%'
    LOOP

        PERFORM set_config('search_path',empresas.nspname,false);

        RAISE NOTICE 'search_path atual %',current_setting('search_path');

        SELECT INTO total_empresa sum(valor) from salario;

        total_geral := total_geral + total_empresa;

    END LOOP;

    RETURN total_geral;
END
$body$
LANGUAGE 'plpgsql';

select GetTotalSalario()

Sem mais,

Rogério Augusto Bassete

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a