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

Perbedaan antara bahasa sql dan bahasa plpgsql dalam fungsi PostgreSQL

Fungsi SQL

... adalah pilihan yang lebih baik:

  • Untuk kueri skalar sederhana . Tidak banyak yang harus direncanakan, lebih baik hemat biaya overhead.

  • Untuk panggilan tunggal (atau sangat sedikit) per sesi . Tidak ada keuntungan dari caching paket melalui pernyataan siap yang ditawarkan PL/pgSQL. Lihat di bawah.

  • Jika mereka biasanya dipanggil dalam konteks kueri yang lebih besar dan cukup sederhana untuk digarisbawahi .

  • Karena kurangnya pengalaman dengan bahasa prosedural seperti PL/pgSQL. Banyak yang tahu SQL dengan baik dan hanya itu yang Anda butuhkan untuk fungsi SQL. Sedikit yang bisa mengatakan hal yang sama tentang PL/pgSQL. (Meskipun agak sederhana.)

  • Kode yang sedikit lebih pendek. Tidak ada overhead blok.

Fungsi PL/pgSQL

... adalah pilihan yang lebih baik:

  • Saat Anda membutuhkan elemen prosedural atau variabel yang tidak tersedia dalam fungsi SQL, tentunya.

  • Untuk segala jenis SQL dinamis , tempat Anda membangun dan EXECUTE pernyataan secara dinamis. Perhatian khusus diperlukan untuk menghindari injeksi SQL. Selengkapnya:

    • Fungsi postgres vs kueri yang disiapkan
  • Bila Anda memiliki perhitungan yang dapat digunakan kembali di beberapa tempat dan CTE tidak dapat diregangkan untuk tujuan tersebut. Dalam fungsi SQL Anda tidak memiliki variabel dan akan dipaksa untuk menghitung berulang kali atau menulis ke tabel. Jawaban terkait di dba.SE ini memiliki contoh kode yang berdampingan untuk memecahkan masalah yang sama menggunakan fungsi SQL / fungsi plpgsql / kueri dengan CTE:

    • Cara meneruskan parameter ke dalam fungsi

Tugas agak lebih mahal daripada bahasa prosedural lainnya. Sesuaikan gaya pemrograman yang tidak menggunakan lebih banyak tugas daripada yang diperlukan.

  • Ketika suatu fungsi tidak dapat disejajarkan dan dipanggil berulang kali. Tidak seperti fungsi SQL, rencana kueri dapat di-cache untuk semua pernyataan SQL di dalam fungsi PL/pgSQL; mereka diperlakukan seperti pernyataan yang disiapkan , paket di-cache untuk panggilan berulang dalam sesi yang sama (jika Postgres mengharapkan paket yang di-cache (generik) berkinerja lebih baik daripada merencanakan ulang setiap saat. Itulah alasan mengapa fungsi PL/pgSQL biasanya lebih cepat setelah beberapa panggilan pertama dalam kasus seperti itu.

    Berikut adalah utas tentang kinerja pgsql yang membahas beberapa item ini:

    • Re:fungsi pl/pgsql mengungguli yang sql?
  • Saat Anda perlu menjebak kesalahan .

  • Untuk fungsi pemicu .

  • Saat menyertakan pernyataan DDL, mengubah objek atau mengubah katalog sistem dengan cara apa pun yang relevan dengan perintah berikutnya - karena semua pernyataan dalam fungsi SQL diuraikan sekaligus sementara fungsi PL/pgSQL merencanakan dan mengeksekusi setiap pernyataan secara berurutan (seperti pernyataan yang disiapkan). Lihat:

    • Mengapa fungsi PL/pgSQL dapat memiliki efek samping, sedangkan fungsi SQL tidak?

Pertimbangkan juga:

  • Kinerja Prosedur Tersimpan PostgreSQL

Untuk benar-benar kembali dari fungsi PL/pgSQL, Anda dapat menulis:

CREATE FUNCTION f2(istr varchar)
  RETURNS text AS
$func$
BEGIN
   RETURN 'hello! ';  -- defaults to type text anyway
END
$func$ LANGUAGE plpgsql;

Ada cara lain:

  • Dapatkah saya membuat fungsi plpgsql mengembalikan bilangan bulat tanpa menggunakan variabel?
  • Panduan tentang "Kembali dari Fungsi"


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memperbarui baris database tanpa mengunci tabel di PostgreSQL 9.2

  2. apa itu @JoinColumn dan bagaimana menggunakannya di Hibernate

  3. Bagaimana cara mendapatkan data lokal ke dalam database hanya-baca menggunakan dplyr?

  4. Fungsi Matematika PostgreSQL

  5. Instalasi PostgreSQL Ketersediaan Tinggi Patroni