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