sql >> Database teknologi >  >> RDS >> PostgreSQL

Returner tabeltype fra en funktion i PostgreSQL

Din funktion gør meget af tomt arbejde.

Du kan forenkle med en FOR sløjfe med implicit markør i stedet for den mere kedelige og dyre eksplicitte markør.
Når man ser nærmere på det, viser det sig, at du slet ikke har brug for noget af dette. Forenkle radikalt med en simpel forespørgsel. Jeg pakkede det ind i en SQL-funktion:

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;

Bør være meget hurtigere, mens du returnerer det samme.
Brug også denne:

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

i stedet for:

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

Alternativet er sargerbart og kan bruge et almindeligt indeks på entry_time , hvilket burde være afgørende for ydeevnen.



  1. SQL Server:Er det muligt at indsætte i to tabeller på samme tid?

  2. Tilføj ordensindikatoren til en dato i PostgreSQL

  3. Hvordan installerer jeg kun klientværktøjerne til PostgreSQL på Windows?

  4. OracleException (0x80004005) Når du opretter forbindelse til Oracle-databasen