On 12/17/2014 02:42 PM, Flavio Henrique Araque Gurgel wrote:
Pessoal, gostaria de saber se isto é um bug ou é algo "normal"
Crio a tabela
CREATE TEMP table table_a (field_a time);
Efetuo a inserção de um dado, sendo que utilizo o current_timestamp, e o
banco efetua a conversão automática para time na hora que insere.
insert into table_a values (current_timestamp);
Mas se eu efetuo um simples select utilizando tambem o current_timestamp
select * from table_a where field_a = current_timestamp;
ERROR: operator does not exist: time without time zone = timestamp
with time zone
LINE 1: select * from table_a where field_a = current_timestamp;
^
HINT: No operator matches the given name and argument type(s). You
might need to add explicit type casts.
É normal.
A conversão de timestamp para hora é trivial e está na tabela de
conversões de tipos, mas o contrário não e não vale para comparações.
Note que isso poderia te levar a erro grave de semântica.
Sei que eu deveria efetuar a comparação com time, mais detectamos tal
situação, aonde um campo que era para ser timestamp está como time, e as
gravações ocorreram normalmente, aonde eu acredito que não deveriam
acontecer também como no select.
O campo é de uma tabela de log, praticamente não utilizado e por isso
não percebemos o erro.
Simplesmente inclua a conversão no seu SELECT:
select * from table_a where field_a = current_timestamp::time;
Ou use outra função, a current_time:
select * from table_a where field_a = current_time;
Beleza, sobre a conversão tudo bem, eu só achei estranho tal situação.
[]s
Flavio Gurgel
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral