PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Geben Sie den Tabellentyp von einer Funktion in PostgreSQL zurück

Ihre Funktion leistet viel der leeren Arbeit.

Sie könnten mit einem FOR vereinfachen Schleife mit implizitem Cursor anstelle des mühsameren und teureren expliziten Cursors.
Bei näherer Betrachtung stellt sich heraus, dass Sie das alles gar nicht brauchen. Radikal vereinfachen mit einer einfachen Abfrage. Ich habe es in eine SQL-Funktion gepackt:

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;

Sollte viel sein schneller, während das Gleiche zurückgegeben wird.
Verwenden Sie auch Folgendes:

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

statt:

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

Die Alternative ist sargable und kann einen einfachen Index für entry_time verwenden , was entscheidend für die Leistung sein sollte.