Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas com Trigger


Roberto Gugisch

Pergunta

Ontem instalei uma nova versão do meu servidor!

Antes disso eu fiz um dump no meu banco de dados (dumpall). Reinstalei o servidor (Windos 2008 Enterprise e reinstalei o PG.

Ao retornar o meu Dump tive alguns problemas, o psql não reconhecia alguns comandos como "\connect postgres".

O que ele não reconheceu refiz manualmente.

Só que as triggers que eu tenho no banco deixaram de funcionar. Já as olhei e reolhei e não vejo nada que possa estar erradas.

Notem que elas funcionavam normalmente. O erro que estão dando é o seguinte (este erro é de um das triggewr, mas acredito que resolvendo um resove-se todos os outros).

---------------------------
SQL Error: ERRO:  registro "new" não tem campo "dt_mudanca"
CONTEXT:  função PL/pgSQL "update_posvendas" linha 2 em IF.
---------------------------
OK   
---------------------------
Minha trigger:
BEGIN 
  INSERT INTO parana.historico_pv 
      ( id, status, dt_mudanca, data )
    VALUES 
      ( new.id, new.status, new.dt_status, now() );
  IF new.observacao <> '' THEN
    INSERT INTO parana.hist_pv 
        ( id, dt_mudanca, observacoes, data )
      VALUES 
        ( new.id, new.dt_status, new.observacao, now() );
  END IF;
  RETURN new;
END;
É uma trigger simples, ela simplismente guarda todas as alterações que existiram no campo Observações e no campo Status! Outra coisa que alterou depois que foi alterado o servidor são os generations que antes estavam assim:
nextval('ordens_id'::regclass)
e agora só funcionam se estiverem assim:
nextval('parana.ordens_id'::regclass)

Eu tive que incluir o schema neles para que funcionassem. Sem ele o PG nem achava o generator.

Minha plataforma:

* PG 8.4 rodando no Windows Server 2008 Enterprise

* Delphi 7 conectando através do Zeos

Alguém teria alguma sugestão de como acertar isso?

Desde já agradeço a todos.

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Não sei se tem alguma coisa errada com os números de versão. No Linux, que eu estou acotumado, não existe o quarto número na versao 8.4.x.x. Só vai até 8.4.x. Só se for no Windows.

Mas se você fez o update da 8.4.0 para 8.4.7 então não há a necessidade de fazer o dump/restore. Você tentou fazer o updade sem dump/restore?. Você poderia reverter para a versão anterior, fazer o restore, e então fazer o update. Isso supondo que os problemas sejam derivados daqueles encontrados durante o restore na nova versão.

Mas se você fez o update para a versão 8.4 partindo da 8.0 então o dump/restore é obrigatório e aí cai no problema de compatibilildade.

Link para o comentário
Compartilhar em outros sites

  • 0

Kakao, me desculpe.

A versão anterior é a 8.4.5.1 e a nova versão é a 8.4.7.1.

Instalei no meu micro a versão anterior e os mesmos problemas estão ocorrendo.

Creio que é alguma cois aque o PSQL trouxe de errado!

O mais estranho é que o PSQL não retorna as triggers e funções. Tenho que fazer isso na mão!

Você comentou que não precisaria de um restore. Mas como vou voltar meu banco? Eu nenhuma vez eu utilizei o restore, mas sempre o PSQL.

Como te disse no primeiro post, eu fiz um DUMPALL (na verdade faço isso 2 vezes por dia - agendado no server) e isso é enviado ao meu e-mail.

Se quiser te passo o arquivo SQL gerado para você dar uma olhada!

E novamente, obrigado pela ajuda!

:rolleyes:

Link para o comentário
Compartilhar em outros sites

  • 0

Uso o comando abaixo:

"C:\Arquivos de programas\pgAdmin III\1.12\pg_dumpall.exe" --host 187.7.131.36 --port 5432 --username postgres --file %BACKUP_FILE%

Isso faz o backup de TUDO que tem no PG.

Você faz diferente?

Estou recriando a base toda manualmente para ver se tem algo de errado no restore mesmo!

O que estou notando de diferente são os generators.

Antes eu simplismente colocava no DEFAULT do campo:

nextval('status_id'::regclass)
agora tenho que colocar:
nextval('parana.status_id'::regclass)

pois senão não encontra! Muito estranho ele não encontrar!

O erro que dá nas trigger parece que ele não acha a tabela referente a ela e dá erro tentando achar uma tabela com nome NEW.

Link para o comentário
Compartilhar em outros sites

  • 0

Refiz as tabelas que usam as Trigger, refiz as triggers, refiz as funções.

Tudo funcionou!

Deve ser alguma coisa relativo ao restore do PG pelo PSQL.

Tem idéia do que pode ter acontecido?

Poderia me mostrar a forma como você faz backup e a forma como você restaura eles?

Preciso acertar aqui para que não ocorra de novo o que ocorreu dessa vez.

Link para o comentário
Compartilhar em outros sites

  • 0

Esqueci de colocar o redirecionamento para o arquivo. Não sei se funciona no Windows:

pg_dump -Ft -U usuario -C base > /caminho/para/minha_base.dump

Vou procurar como eu volto. Uma das bases tem 30 Giga e eu já fiz o restore várias vezes quando da mudança de versão e funcionou sem problemas.

Editado por Kakao
Link para o comentário
Compartilhar em outros sites

  • 0

Eu testei aqui, pois tenho um .bat que faz backup pelo menos 3 vezes ao dia!

Funcionou, mas com algumas alterações:

pg_dump.exe" --format=p --create --column-inserts --host=10.1.1.254 --port=5432 --username=postgres --file=%BACKUP_FILE1% parana

Não precisei de direcionamentos pois a chave --file indica qual arquivo vai ser gerado!

Agora falta um restore que realemnte funcione!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...