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

Apakah prosedur tersimpan berjalan dalam transaksi basis data di Postgres?

Sebenarnya, Postgres tidak memiliki prosedur tersimpan sebagaimana didefinisikan dalam standar ISO/IEC sebelum versi 11. Istilah ini sering digunakan secara tidak benar untuk merujuk ke fungsi , yang menyediakan banyak fungsi yang sama (dan lebih banyak lagi) seperti yang disediakan oleh RDBMS lain dengan "prosedur tersimpan". Perbedaan utama adalah penanganan transaksi.

  • Apa perbedaan antara "Prosedur Tersimpan" dan "Fungsi Tersimpan"?

prosedur tersimpan True yang benar akhirnya diperkenalkan dengan Postgres 11

  • Kapan menggunakan prosedur tersimpan/fungsi yang ditentukan pengguna?

Fungsi adalah atom di Postgres dan secara otomatis berjalan di dalam transaksi mereka sendiri kecuali dipanggil dalam transaksi luar. Mereka selalu berjalan dalam satu transaksi dan berhasil atau gagal sepenuhnya . Akibatnya, seseorang tidak dapat memulai atau melakukan transaksi dalam fungsi tersebut. Dan perintah seperti VACUUM , CREATE DATABASE , atau CREATE INDEX CONCURRENTLY yang tidak berjalan dalam konteks transaksi tidak diperbolehkan.

Panduan tentang PL/pgSQL:

Fungsi dan prosedur pemicu selalu dieksekusi dalam transaksi yang dibuat oleh kueri luar — mereka tidak dapat memulai atau melakukan transaksi itu, karena tidak akan ada konteks bagi mereka untuk mengeksekusi. Namun, blok yang berisi EXCEPTION klausa secara efektif membentuk subtransaksi yang dapat dibatalkan tanpa mempengaruhi transaksi luar.

Penanganan kesalahan:

Secara default, setiap kesalahan yang terjadi dalam fungsi PL/pgSQL membatalkan eksekusi fungsi, dan juga transaksi di sekitarnya. Anda dapat menjebak kesalahan dan memulihkannya dengan menggunakan BEGIN blokir dengan EXCEPTION klausa.

Ada pengecualian , termasuk namun tidak terbatas pada:

  • data yang ditulis ke file log
  • perubahan yang dibuat pada urutan

    Penting :Beberapa tipe dan fungsi data PostgreSQL memiliki aturan khusus mengenai perilaku transaksional. Secara khusus, perubahan yang dilakukan pada urutan (dan oleh karena itu penghitung kolom dideklarasikan menggunakan serial )segera terlihat oleh semua transaksi lain dan tidak dibatalkan jika transaksi yang membuat perubahan dibatalkan.

  • pernyataan yang disiapkan

    • Demo SQL Fiddle
  • panggilan dblink (atau yang serupa)

    • Apakah Postgres mendukung transaksi bersarang atau otonom?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ikhtisar pgModeler untuk PostgreSQL

  2. Simpan hasil kueri dalam variabel menggunakan di PL/pgSQL

  3. Kombinasi kueri dengan array catatan bersarang dalam tipe data JSON

  4. Mekanisme Replikasi Fisik di PostgreSQL

  5. Cara Melihat Versi Postgres Yang Sedang Berjalan