Eu queria analisar e comparar as seguintes consultas:
SELECT from mytable WHERE mytable.TimeStamp < NOW() - MAKE_INTERVAL(DAYS => 1);
e a mesma consulta, mas substituindo Now() por uma variável.
DO $$
DECLARE retentionTimestamp TIMESTAMP := NOW() - MAKE_INTERVAL(DAYS => 1);
BEGIN
SELECT from mytable WHERE mytable.TimeStamp < retentionTimestamp;
END $$;
Posso explicar a primeira afirmação facilmente, e a outra?
* Estou usando o PgAdmin
Internamente, variáveis PL/pgSQL são parâmetros. Então você pode usar uma instrução preparada:
Duas notas:
Sua primeira declaração tem um
timestamp with time zone
no lado direito, enquanto a declaração naDO
declaração usa umtimestamp
. Isso pode fazer a diferença.Você deve ler
EXECUTE
a declaração preparada pelo menos seis vezes para ver um plano genérico ouSET plan_cache_mode = force_generic_plan;