2009/2/20 Osvaldo Kussama <[email protected]>: > 2009/2/20 Newton Michel de Oliveira <[email protected]>: >> Pessoal, >> estou tentando fazer um particionamento de tabelas por mes e ano, mas >> não estou conseguindo utilizar a variavel declarada na clausula from. Na >> realidade a variavel S_TABELA seria o nome da tabela e a variavel S_INDICE o >> nome do indice.
Só complementando: Verifique se a solução para particionamento apresentada no manual não é mais prática: http://www.postgresql.org/docs/current/interactive/ddl-partitioning.html >> >> CREATE OR REPLACE FUNCTION log_historico() >> RETURNS trigger AS $$ >> >> DECLARE >> S_TABELA CHAR(30) := "log_"+(EXTRACT(MONTH FROM NEW.data) + EXTRACT(year >> FROM NEW.data)); >> S_INDICE CHAR(30) := "idx_log_"+(EXTRACT(MONTH FROM NEW.data) + >> EXTRACT(year FROM NEW.data)); > > Até onde eu me lembro o operador "+" é o operador aritmético soma. Me > parece que o que você deseja é uma concatenação de strings e aí, pelo > que me lembro, o operador é ||. > Veja: > http://www.postgresql.org/docs/current/interactive/functions-math.html > http://www.postgresql.org/docs/current/interactive/functions-string.html > > >> BEGIN >> >> IF TG_OP = 'INSERT' THEN >> BEGIN >> INSERT INTO S_TABELA >> VALUES (NEW.data, >> NEW.codigo_empresa, >> NEW.codigo_loja,NEW.nsu, >> NEW.dtef_origem, >> NEW.codigo_pdv, >> NEW.codigo_rede, >> NEW.status, >> NEW.status_offline, >> NEW.codigo_transacao, >> NEW.nsu_rede, >> NEW.cupom, >> NEW.codigo_resposta, >> NEW.data_hora, >> NEW.valor, >> NEW.numero_cartao, >> NEW.dados, >> NEW.descricao, >> NEW.emissor, >> NEW.detalhe1, >> NEW.detalhe2, >> NEW.log_consolidado, >> NEW.app_origem >> ); >> EXCEPTION >> WHEN UNDEFINED_TABLE THEN >> CREATE TABLE S_TABELA (CHECK ( EXTRACT(MONTH FROM data) = >> EXTRACT(MONTH FROM NEW.data) and EXTRACT(year FROM data) = EXTRACT(MONTH >> FROM NEW.data) )) INHERITS (log); >> CREATE INDEX S_INDICE ON S_TABELA (data); >> PERFORM log_historico(); > > Creio que você deva dar uma lida no manual: > http://www.postgresql.org/docs/current/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN > > >> END; >> END IF; >> >> IF TG_OP = 'UPDATE' THEN >> UPDATE S_TABELA >> SET codigo_pdv = NEW.codigo_pdv, >> codigo_rede = NEW.codigo_rede, >> status = NEW.status, >> status_offline = NEW.status_offline, >> codigo_transacao = NEW.codigo_transacao, >> nsu_rede = NEW.nsu_rede, >> cupom = NEW.cupom, >> codigo_resposta = NEW.codigo_resposta, >> data_hora = NEW.data_hora, >> valor = NEW.valor, >> numero_cartao = NEW.numero_cartao, >> dados = NEW.dados, >> descricao = NEW.descricao, >> emissor = NEW.emissor, >> detalhe1 = NEW.detalhe1, >> detalhe2 = NEW.detalhe2, >> log_consolidado = NEW.log_consolidado, >> app_origem = NEW.app_origem >> >> WHERE data = NEW.data AND >> codigo_empresa = NEW.codigo_empresa AND >> codigo_loja = NEW.codigo_loja AND >> nsu = NEW.nsu AND >> dtef_origem = NEW.dtef_origem; >> END IF; >> >> RETURN NEW; >> END; >> $$ LANGUAGE plpgsql >> > > > > Como hojé já é Carnaval pode ser que eu tenha me enganado. > > Osvaldo > _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
