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

Responder a