When вы делаете:
transaction_date = '2015-04-14'
PG преобразует строку '2015-04-14' в значение timestamp '2015-04-14 00:00:00'.
Если вы:
transaction_date::date = '2015-04-14'
PG преобразует оба значения на сегодняшний день (которым только дата часть, без части времени), и она будет работать.
BUT ... БУДЬТЕ ОСТОРОЖНЫ, КОГДА ОЖИДАЮТ КОЛОНКИ В КЛАССЕ, потому что PG не сможет воспользоваться индексом, содержащим этот столбец, если только вы не создали индекс с тем же литом в столбце.
Если вы создаете только этот показатель:
create index i_foo_1 on foo (timestamp_field);
Этот запрос не будет использовать этот индекс:
select *
from foo
where timestamp_field::date = '2015-04-15';
Так или вам необходимо создать индекс: фильм
create index i_foo_2 on foo (timestamp_field::date);
Или вам придется изменить оригинал «где предложение»:
select *
from foo
where timestamp_field >= ('2015-04-15'::timestamp)
and timestamp_field < (('2015-04-15'::date)+1)::timestamp;
Оффтопик: будьте осторожны при размещении столбцов в разделе «где». В большинстве случаев он не будет использовать какой-либо индекс (если вы не создали индекс с этим столбцом) – Christian