PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kembalikan Jenis Tabel dari fungsi A di PostgreSQL

Fungsi Anda melakukan banyak pekerjaan kosong.

Anda dapat menyederhanakan dengan FOR loop dengan kursor implisit alih-alih kursor eksplisit yang lebih membosankan dan mahal.
Jika dilihat lebih dekat, ternyata Anda tidak memerlukan semua ini sama sekali. Sederhanakan secara radikal dengan pertanyaan sederhana. Saya membungkusnya menjadi fungsi 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;

Seharusnya banyak lebih cepat saat mengembalikan yang sama.
Juga, gunakan ini:

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

bukannya:

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

Alternatifnya adalah sargable dan dapat menggunakan indeks biasa pada entry_time , yang seharusnya sangat penting untuk performa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menutup Celah Kerentanan di PostgreSQL

  2. Oracle ke PostgreSQL:Alasan untuk Bermigrasi

  3. Mengubah tipe kolom menjadi string yang lebih panjang di Rails

  4. Bagaimana tidak membangun ekstensi PostgreSQL 9.0 pada platform RPM

  5. JPA flush vs komit