Olá,

Para o problema citado tenho : 

1. Tabela principal (não coloquei todos os campos, porque ficaria muito
grande)

CREATE TABLE "public"."stg1_nfe" (
  "sq_nfe" SERIAL, 
  "ide_Id" VARCHAR(44) NOT NULL, 
  "ide_indPag" VARCHAR(2) NOT NULL, 
  "ide_mod" VARCHAR(2) NOT NULL
  CONSTRAINT "S1NF_PK" PRIMARY KEY("sq_nfe")  USING INDEX TABLESPACE
"tbspIndices"
) WITHOUT OIDS;

2. Tabelas Particionadas até o mes 12 (200612)

CREATE TABLE stg1_nfe_200609 (
        CHECK ("ideAnoMesReceb" = '200609')) INHERITS (public.stg1_nfe);

Foram criadas também indices sobre o campo "ideAnoMesReceb" das tabelas
particionadas.

3. Função
CREATE OR REPLACE FUNCTION "public"."P_ParticionarDadosNFe_I" (
)
RETURNS trigger AS
$body$
BEGIN
    IF (NEW."ideAnoMesReceb" = '200609') THEN
        INSERT INTO public.stg1_nfe_200609 VALUES (NEW.*);
        ELSIF (NEW."ideAnoMesReceb" = '200610') THEN
        INSERT INTO public.stg1_nfe_200610 VALUES (NEW.*);
    ELSIF (NEW."ideAnoMesReceb" = '200611') THEN
        INSERT INTO public.stg1_nfe_200611 VALUES (NEW.*);
    ELSIF (NEW."ideAnoMesReceb" = '200612') THEN
        INSERT INTO public.stg1_nfe_200612 VALUES (NEW.*);
    END IF;
    RETURN NULL;

EXCEPTION
        WHEN OTHERS THEN    
                INSERT INTO public.tb_excecoes
        (
          "tmsData",
          "vchNomeFuncao",
          "txtErro",
          "vchAnoMes"
        ) 
        VALUES (
           NOW(),
          'P_NFe_PersitirParticao_I ',
          SQLERRM,
          NEW."ideAnoMesReceb"
        );    
    RETURN NULL;        
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;

4. Trigger

CREATE TRIGGER "TRG_ParticionarDadosNFe" BEFORE INSERT 
ON "public"."stg1_nfe" FOR EACH ROW 
EXECUTE PROCEDURE "public"."P_ParticionarDadosNFe_I"();

5. Insert
Como eu acesso os dados das tabelas particionadas através da tabela pai,
faço o insert com select da tabela pai para outra tabela que tem a mesma
estrutura da tabela pai, para faciliar o processo de agregação.

                INSERT INTO public.stg1_nfe_proc
            (
                sq_nfe,
                "ide_Id",
                "ide_indPag",
                ide_mod)
                SELECT  
                  sq_nfe,
                  "ide_Id",
                  "ide_indPag",
                  ide_mod)
                 FROM public.stg1_nfe
               WHERE "ideAnoMesReceb" = '200609';

E isso é que não funciona, ou seja não insere nada. Apesar de que, se eu
executar somente o select funciona. É o que eu não estou entendendo. Estou
fazendo alguma coisa errada ? Deu para entender o problema ?

Grata,

Letícia





JotaComm wrote:
> 
> Olá,
> 
> Em 20 de abril de 2010 16:37, letgaude <[email protected]> escreveu:
> 
>>
>> Gente,
>>
>> Fiz todo o processo de particionamento, conforme orientação da
>> documentação
>> do postgres
>> (http://www.postgresql.org/docs/8.4/interactive/ddl-partitioning.html),
>> utilizando trigger, pois trabalhamos aqui com insert linha a linha. Gerei
>> 12
>> tabelas a partir da tabela principal, uma para cada mês. A partir da
>> tabela
>> principal fazemos insert em outra tabela intermediaria para tratamento de
>> sumarizações. O que eu não estou conseguindo fazer agora é este processo
>> de
>> inserção. O postgres retorna Query returned successfully: 0 rows
>> affected,
>> 188 ms execution time., e nao insere nada. Existe algum segredo para
>> fazer
>> insert com select em tabelas particionadas, como existe pra ver somente
>> os
>> dados da tabela principal (select * from only tabela_pai) ? Pq eu
>> simplesmente faço algo como por ex. :
>>
>> INSERT INTO public.tabela2
>> (campo1, campo2)
>> select campo1, campo2
>> from tabela_pai
>> where mes = 12
>>
> 
> Não existe segredo nenhum. Se você seguir o descrito no manual você irá
> conseguir o resultado desejado.
> 
> Para acessar os dados da tabela pai você precisa utilizar a cláusula ONLY
> na
> tabela pai, conforme mesmo você citou no seu texto.
> 
> Agora para que possamos ajudar é necessário algumas informações:
> 
> - Função que você desenvolveu
> - Trigger
> - INSERT que você está executando e não está funcionando.
> 
>>
>> Obrigada.
>> --
>> View this message in context:
>> http://old.nabble.com/Insert-a-partir-de-tabela-particionada-tp28287912p28287912.html
>> Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
> 
> 
> Atenciosamente
> -- 
> JotaComm
> http://jotacomm.wordpress.com
> 
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
> 
> 

-- 
View this message in context: 
http://old.nabble.com/Insert-a-partir-de-tabela-particionada-tp28287912p28364393.html
Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.

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

Responder a