PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zwróć typ tabeli z funkcji A w PostgreSQL

Twoja funkcja robi dużo pustej pracy.

Możesz uprościć za pomocą FOR pętla z niejawnym kursorem zamiast bardziej żmudnego i drogiego jawnego kursora.
Przy bliższym przyjrzeniu się okazuje się, że w ogóle nie potrzebujesz tego. Radykalnie uprość za pomocą prostego zapytania. Zapakowałem to w funkcję 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;

Powinno być dużo szybciej, zwracając to samo.
Użyj także tego:

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

zamiast:

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

Alternatywą jest sargable i może używać zwykłego indeksu w entry_time , co powinno mieć kluczowe znaczenie dla wydajności.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Importowanie pliku .sql w systemie Windows do postgresql

  2. W Railsach nie można utworzyć bazy danych dla {adapter=>postgresql,

  3. Zwróć zgrupowaną listę z wystąpieniami za pomocą Rails i PostgreSQL

  4. django.db.utils.OperationalError Nie można połączyć się z serwerem

  5. Zapytanie krzyżowe PostgreSQL