PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Retourner le type de table à partir d'une fonction dans PostgreSQL

Votre fonction fait beaucoup de travail vide.

Vous pouvez simplifier avec un FOR boucle avec un curseur implicite au lieu du curseur explicite plus fastidieux et coûteux.
En y regardant de plus près, il s'avère que vous n'avez besoin de rien de tout cela. Simplifier radicalement avec une simple requête. Je l'ai enveloppé dans une fonction 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;

Ça devrait être beaucoup plus rapide tout en retournant le même.
Utilisez également ceci :

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

au lieu de :

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

L'alternative est sargable et peut utiliser un index simple sur entry_time , ce qui devrait être crucial pour les performances.