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