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

PostgreSQL dengan parameter Order By / Limit dalam fungsi tabel

Tidak ada yang salah dengan fungsi plpgsql untuk sesuatu yang sedikit lebih kompleks. Satu-satunya situasi di mana kinerja dapat menurun adalah ketika fungsi plpgsql bersarang, karena perencana kueri tidak dapat lebih mengoptimalkan kode yang terkandung dalam konteks kueri luar yang mungkin atau mungkin tidak membuatnya lebih lambat.
Detail lebih lanjut dalam ini nanti jawaban:

  • Perbedaan antara bahasa sql dan bahasa plpgsql pada fungsi PostgreSQL

Dalam kasus yang ada jauh lebih sederhana daripada banyak CASE klausa dalam kueri:

CREATE OR REPLACE FUNCTION get_stuff(_param text, _orderby text, _limit int)
  RETURNS SETOF stuff AS
$func$
BEGIN
   RETURN QUERY EXECUTE '
      SELECT *
      FROM   stuff
      WHERE  col = $1
      ORDER  BY ' || quote_ident(_orderby) || ' ASC
      LIMIT  $2'
   USING _param, _limit;
END
$func$  LANGUAGE plpgsql;

Telepon:

SELECT * FROM get_stuff('hello', 'col2', 100);

Catatan

Gunakan RETURN QUERY EXECUTE untuk mengembalikan hasil kueri sekaligus.

Gunakan quote_ident() untuk pengidentifikasi agar terlindungi dari SQLi.
Atau format() untuk sesuatu yang lebih kompleks. Lihat:

  • Nama tabel sebagai parameter fungsi PostgreSQL

Lewati nilai parameter dengan USING klausa untuk menghindari casting, mengutip, dan SQLi sekali lagi.

Berhati-hatilah untuk tidak membuat konflik penamaan antara parameter dan nama kolom. Saya mengawali nama parameter dengan garis bawah (_ ) dalam contoh. Hanya preferensi pribadi saya.

Fungsi kedua Anda setelah pengeditan tidak dapat berfungsi, karena Anda hanya mengembalikan parent sedangkan tipe pengembalian dideklarasikan SETOF stuff . Anda dapat mendeklarasikan apa saja tipe pengembalian yang Anda suka, tetapi nilai pengembalian aktual harus sesuai dengan deklarasi. Anda mungkin ingin menggunakan RETURNS TABLE untuk itu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan hibah untuk tabel di postgres

  2. Django:Grup Kueri Berdasarkan Bulan

  3. uWSGI, Flask, sqlalchemy, dan postgres:Kesalahan SSL:dekripsi gagal atau catatan buruk mac

  4. Cara cepat untuk menemukan jumlah baris tabel di PostgreSQL

  5. Alias ​​referensi dalam klausa WHERE