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

Pemicu postgres setelah memasukkan mengakses BARU

Dari manual yang bagus:

36.1. Ikhtisar Perilaku Pemicu
[...]
Untuk pemicu tingkat baris, data masukan juga menyertakan NEW baris untuk INSERT dan UPDATE pemicu, dan/atau OLD baris untuk UPDATE dan DELETE pemicu. Pemicu tingkat pernyataan saat ini tidak memiliki cara untuk memeriksa setiap baris yang dimodifikasi oleh pernyataan.

Dan dari Prosedur Pemicu:

NEW
Tipe data RECORD; variabel memegang baris database baru untuk INSERT /UPDATE operasi di pemicu tingkat baris. Variabel ini adalah NULL dalam pemicu tingkat pernyataan dan untuk DELETE operasi.

Perhatikan apa yang dikatakan tentang pemicu tingkat baris dan pemicu tingkat pernyataan.

Anda memiliki pemicu tingkat pernyataan:

...
FOR EACH STATEMENT
EXECUTE PROCEDURE f_log_datei();

Pemicu tingkat pernyataan dipicu sekali per pernyataan dan pernyataan dapat diterapkan ke beberapa baris sehingga gagasan baris yang terpengaruh (itulah yang NEW dan OLD tentang) sama sekali tidak berlaku.

Jika Anda ingin menggunakan NEW (atau OLD ) di pemicu maka Anda ingin pemicu dijalankan untuk setiap baris yang terpengaruh dan itu berarti Anda menginginkan pemicu tingkat baris:

CREATE TRIGGER log_datei AFTER INSERT OR UPDATE OR DELETE
ON dateien
FOR EACH ROW
EXECUTE PROCEDURE f_log_datei();

Saya baru saja mengubah FOR EACH STATEMENT ke FOR EACH ROW .

Pemicu Anda juga harus mengembalikan sesuatu:

Fungsi pemicu harus mengembalikan NULL atau nilai record/baris yang memiliki struktur tabel yang persis sama dengan pemicu pemicunya.
[...]
Nilai kembalian pemicu tingkat baris dipicu AFTER atau pemicu tingkat pernyataan memicu BEFORE atau AFTER selalu diabaikan; mungkin juga nol. Namun, salah satu jenis pemicu ini mungkin masih membatalkan seluruh operasi dengan memunculkan kesalahan.

Jadi Anda harus RETURN NEW; atau RETURN NULL; di pemicu Anda. Anda memiliki pemicu AFTER sehingga tidak masalah RETURN mana yang Anda gunakan, tetapi saya akan menggunakan RETURN NEW; .




  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 membuat dan menghapus database dan tabel di PostgreSQL

  2. Temukan Nilai yang Tidak Mengandung Angka di PostgreSQL

  3. Tentukan nama tabel dan kolom sebagai argumen dalam fungsi plpgsql?

  4. Cara Mengaktifkan SSL di PostgreSQL

  5. Bagaimana cara mendapatkan kolom dengan angka yang berurutan dan meningkat, tanpa ada angka yang hilang?