PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Retornar tipo de tabela de uma função no PostgreSQL


Sua função está fazendo muito de trabalho vazio.

Você pode simplificar com um FOR loop com cursor implícito em vez do cursor explícito mais tedioso e caro.
Em um olhar mais atento, verifica-se que você não precisa de nada disso. Simplifique radicalmente com uma simples consulta. Eu o envolvi em uma função 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;

Deve ser muito mais rápido ao retornar o mesmo.
Além disso, use isto:
WHERE  u.entry_time >= now()::date - 1
AND    u.entry_time <  now()::date

ao invés de:
WHERE entry_time::date = now()::date - interval '1 day'

A alternativa é sargável e pode usar um índice simples em entry_time , que deve ser crucial para o desempenho.