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

Hapus baris dengan kunci asing di PostgreSQL

Untuk mengotomatisasi ini, Anda dapat menentukan batasan kunci asing dengan ON DELETE CASCADE .
Saya mengutip manual untuk batasan kunci asing :

Cari definisi FK saat ini seperti ini:

SELECT pg_get_constraintdef(oid) AS constraint_def
FROM   pg_constraint
WHERE  conrelid = 'public.kontakty'::regclass  -- assuming public schema
AND    conname = 'kontakty_ibfk_1';

Kemudian tambahkan atau ubah ON DELETE ... bagian ke ON DELETE CASCADE (mempertahankan yang lainnya apa adanya) dalam pernyataan seperti:

ALTER TABLE kontakty
   DROP CONSTRAINT kontakty_ibfk_1
 , ADD  CONSTRAINT kontakty_ibfk_1
   FOREIGN KEY (id_osoby) REFERENCES osoby (id_osoby) ON DELETE CASCADE;

Tidak ada ALTER CONSTRAINT memerintah. Jatuhkan dan buat ulang batasan dalam satu ALTER TABLE pernyataan untuk menghindari kemungkinan kondisi balapan dengan akses tulis bersamaan.

Anda memerlukan hak istimewa untuk melakukannya, tentu saja. Operasi membutuhkan ACCESS EXCLUSIVE kunci di atas meja kontakty dan SHARE ROW EXCLUSIVE kunci di atas meja osoby .

Jika Anda tidak dapat ALTER tabel, lalu hapus dengan tangan (sekali) atau dengan pemicu BEFORE DELETE (setiap waktu) adalah opsi yang tersisa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi Agregat sqlalchemy JSONB

  2. Bagaimana menyederhanakan kueri pemilihan yang berisi banyak pilihan dalam dan meningkatkan kinerja di PostgreSQL

  3. Goroutine memblokir kumpulan koneksi

  4. Bagaimana cara menggunakan pg_dump dengan koneksi uri/url?

  5. UPDATE/INSERT berdasarkan jika ada baris