Buenos días lista, Hace unos días (el 2 de septiembre) tenía que "detectar" en una tabla las transacciones de "ayer" y si bien lo lógico es usar una función con parámetros "desde" y "hasta" que las filtre, por adaptar algo que ya existía tomé para el lado de usar una vista con fechas filtradas entre 'yesterday' y 'today':
--Sobre una tabla que contenga un campo TIMESTAMP: CREATE TABLE IF NOT EXISTS prueba (campo_fecha timestamp without time zone); --Creo una vista que la filtre por los registros de "AYER": CREATE OR REPLACE VIEW vw_prueba AS SELECT campo_fecha FROM prueba WHERE campo_fecha BETWEEN 'yesterday' and 'today'; --> TRANSACCIONES DE "AYER" Ese día funcionó bien pero para mi sorpresa a partir del día siguiente empezó a fallar mostrándome siempre las transacciones del mismo día inicial. --Entré a revisar mi vista: --Me fijo cómo quedó la definicion: select * from pg_get_viewdef('vw_prueba') --y para mi sorpresa veo que devuelve: " SELECT prueba.campo_fecha FROM prueba WHERE ((prueba.campo_fecha >= '2019-09-01 00:00:00'::timestamp without time zone) AND (prueba.campo_fecha <= '2019-09-02 00:00:00'::timestamp without time zone));" o sea: Al compilar y grabar la vista, mis "variables" se convirtieron en "constantes"! La solución fue fácil, pasar: 1) 'yesterday' a CURRENT_DATE - '1 day'::interval 2) 'today' a CURRENT_DATE y todo se arregló. Pensé que las causas venían por lo "no determinista" del "today" pero para desempatar probé compilar la vista usando "random()" y no hardcodeó valores sino que respetó la funcion. Las preguntas que hago a la lista son: Si 'today' y 'yesterday' fueran funciones, ¿hay un bug al grabarse en la vista como constantes? Si 'today' y 'yesterday' fueran constantes: ¿por qué hoy valen una cosa y mañana valen otra cosa? Si 'today' y 'yesterday' no son ni funciones ni constantes, ¿qué son? Estoy usando PostgreSQL 11.5 sobre Centos, pero probé que sucede desde al menos 9.2 en adelante. Saludos, gracias!