Pessoal,

Desculpem....Foi vacilo mesmo ! Na mudança de um servidor pra outro, a
tabela foi criada com outro usuário.



Osvaldo Kussama wrote:
> 
> Em 26 de abril de 2010 10:04, letgaude <[email protected]> escreveu:
>>
>> 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 ?
>>
> 
> 
> Você se certificou se o usuário que está tentando inserir tem os
> privilégios necessários para executar tal operação?
> Repare que sua função está definida com SECURITY INVOKER e não com
> SECURITY DEFINER.
> 
> Osvaldo
> _______________________________________________
> 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-tp28287912p28367810.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