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.

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));
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();
      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
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a