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

Responder a