sql >> Databáze >  >> RDS >> PostgreSQL

Vrátit typ tabulky z funkce A v PostgreSQL

Vaše funkce dělá hodně prázdné práce.

Můžete to zjednodušit pomocí FOR smyčka s implicitním kurzorem namísto zdlouhavějšího a dražšího explicitního kurzoru.
Při bližším pohledu se ukazuje, že nic z toho vůbec nepotřebujete. Radikálně zjednodušit s jednoduchým dotazem. Zabalil jsem to do funkce 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;

Mělo by být hodně rychlejší a zároveň vrací stejné.
Používejte také toto:

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

místo:

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

Alternativa je proměnlivá a může používat prostý index na entry_time , což by mělo být klíčové pro výkon.



  1. Co je to sakra DTU?

  2. Změňte formát data (v DB nebo na výstupu) na dd/mm/rrrr - PHP MySQL

  3. Převod Long na Varchar2

  4. Jak vrátit všechna nedůvěryhodná omezení cizích klíčů na SQL Server (příklad T-SQL)