sql >> Base de Datos >  >> RDS >> PostgreSQL

Tipo de tabla de retorno de una función en PostgreSQL

Su función está haciendo mucho de trabajo vacío.

Podrías simplificar con un FOR bucle con cursor implícito en lugar del cursor explícito más tedioso y costoso.
En una mirada más cercana, resulta que no necesita nada de esto en absoluto. Simplificar radicalmente con una simple consulta. Lo envolví en una función SQL:

CREATE OR REPLACE FUNCTION ccdb.fn_email_details_auto()
  RETURNS TABLE (code integer, area smallint, action smallint, flag smallint
               , ucount integer, view_cnt integer) AS
$func$

SELECT u.section_code, u.ddu_area, u.ddu_action, u.status_flag
     , u.ccdb_ucount, u.ccdb_view_cnt
FROM   ccdb.update_qtable u
WHERE  u.entry_time >= now()::date - 1
AND    u.entry_time <  now()::date        -- sargable!
ORDER  BY u.section_code, u.ddu_area, u.ddu_action;

$func$  LANGUAGE sql;

Debería ser mucho más rápido mientras devuelve lo mismo.
Además, use esto:

WHERE  u.entry_time >= now()::date - 1
AND    u.entry_time <  now()::date

en lugar de:

WHERE entry_time::date = now()::date - interval '1 day'

La alternativa es sargable y puede usar un índice simple en entry_time , que debería ser crucial para el rendimiento.