Con PostgreSQL hay una serie de funciones de fecha/hora disponibles, consulte here.
En su ejemplo, se puede utilizar:
SELECT * FROM myTable WHERE date_trunc('day', dt) = 'YYYY-MM-DD';
Si está ejecutando esta consulta regularmente, es posible crear un índice mediante la función date_trunc
así:
CREATE INDEX date_trunc_dt_idx ON myTable (date_trunc('day', dt));
Una de las ventajas de esto es que hay más flexibilidad con los husos horarios si es necesario, por ejemplo:
CREATE INDEX date_trunc_dt_idx ON myTable (date_trunc('day', dt at time zone 'Australia/Sydney'));
SELECT * FROM myTable WHERE date_trunc('day', dt at time zone 'Australia/Sydney') = 'YYYY-MM-DD';
Una adición: si el campo de marca de tiempo está indexado, usar dt :: date o CAST (dt AS date) impide que se use el índice. Un método alternativo sería construir un índice funcional en dt :: date o escribirlo de esta manera (utilizando el parámetro $ 1 como una cadena de fecha): WHERE dt> = $ 1 AND dt <$ 1 + interval '1 day'. –