Roberto,
era burrice minha mesmo. A função controla a inserção de dados numa tabela
particionada por ano (2007 a 2010) e eu estava tentando inserir dados de
2006 (a tabela não existia, claro). Então nenhuma instrução chegava a ser
formada, na função. Logo, nada havia a ser exibido. Quando a função era
chamado nos inserts, com dados de 2006, ia direto para o RAISE EXCEPTION e
exibia a MINHA MENSAGEM, que não esclarecia nada. Corrigi a minha mensagem
de erro.
Um outro problema (outra burrice) que tive foi ao restaurar um dump de um
PstgreSQL 8.2 para um 8.4 (meu notebook, para testes).

A função testa com
  IF ( date_part('year', NEW.data::timestamp) = '2006'::text ) THEN
  ...
  ELSEIF ...
 ...
 ELSE RAISE EXCEPTION ....

Funciona no 8.2 e eu achava que estava ajudando o analisador com os casts.
Resultado no 8.4:

  ERRO:  operador n�o existe: double precision = text no caracter 46
  DICA:  Nenhum operador corresponde com o nome e o(s) tipo(s) de
argumento(s) informados. Voc� precisa adicionar
  convers�es de tipo expl�citas.
  --
  ERRO:  operador n�o existe: double precision = text
  LINHA 1: SELECT  ( date_part('year',  $1 ::timestamp) = '2006'::text ...

Alterei para
  IF ( date_part('year', NEW.data::timestamp)::text = '2006'::text ) THEN
e agora funciona no 8.4

Você sugeriria algo melhor, para estes casts?

Att.,
Sergio


2009/7/13 Roberto Mello <[email protected]>

> 2009/7/12 sergio nogueira <[email protected]>
>
>> Sr(a)s,
>> como faço para que numa função, raise notice exiba o comando sql que
>> disparou o aviso?
>>
>
> A função usa PL/pgSQL, não SQL. Como você tem controle da função, por que
> não colocar o aviso antes dos seu RAISE NOTICE?
>
> Ou eu não estou entendendo o que você está tentando fazer.
>
> Roberto
>
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a