Quando executo esta consulta no "enterprisedb 9.2", gera um erro:
select quote_nullable(to_date('09-02-2014 ','dd-MM-yyyy'))::date;
Erro:
LINE 1: select quote_nullable(to_date('09-02-2014 ','dd-MM-yyyy'))::... ^ HINT: Could not choose a best candidate function. You might need to add explicit type casts. ********** Error ********** ERROR: function quote_nullable(timestamp without time zone) is not unique SQL state: 42725 Hint: Could not choose a best candidate function. You might need to add explicit type casts. Character: 8
No Postgresql 9.1, esta query acima roda ok.
Por favor, me diga o que está acontecendo aqui. Por que a função quote_nullable(timestamp without time zone)
não é única?
Funciona como está na minha instalação (Postgres 9.3).
Você provavelmente pode corrigir isso transmitindo para
text
.E não lance o resultado para
date
. Seria inútil chamarquote_nullable()
se você tentasse converter o resultado de volta paradate
. Também falharia para entrada NULL.Postgres permite sobrecarga de função . Minha instalação tem uma instância de
quote_nullable()
tomadatext
e outra tomadaanyelement
( tipo polimórfico ). Este último cuida dodate
.Quanto a
timestamp without time zone
: O Postgres primeiro procura uma correspondência exata (date
no seu caso) e, em seguida, considera outras opções, como tipos que podem ser convertidos implicitamente ou tipos polimórficos. O manual tem o procedimento exato para a resolução do tipo de função.Não tenho certeza sobre o EnterpriseDB. Execute isto para diagnosticar:
Mais sobre sobrecarga de função nesta resposta relacionada em SO:
ERROR: function addgeometrycolumn is not unique