PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Изтрийте редове с външен ключ в PostgreSQL

За да автоматизирате това, можете да дефинирате ограничението за външен ключ с ON DELETE CASCADE .
Цитирам ръководството за ограничения на външен ключ :

Потърсете текущата дефиниция на FK по следния начин:

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

След това добавете или променете ON DELETE ... част от ON DELETE CASCADE (запазвайки всичко останало както е) в израз като:

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

Няма ALTER CONSTRAINT команда. Премахнете и създайте отново ограничението в една единствена ALTER TABLE израз за избягване на възможни условия на състезание с едновременен достъп за запис.

Нуждаете се от привилегиите, за да го направите, очевидно. Операцията изисква ACCESS EXCLUSIVE заключване на таблица kontakty и SHARE ROW EXCLUSIVE заключване на таблица osoby .

Ако не можете да ALTER таблицата, след което изтриване на ръка (веднъж) или чрез тригер BEFORE DELETE (всеки път) са останалите опции.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Yii Framework:Таблицата за клас активен запис не може да бъде намерена в базата данни

  2. MySQL/Postgres заявка за данни с интервал от 5 минути

  3. pg_dump без коментари за обекти?

  4. PostgreSQL:Проверка за НОВО и СТАРО във функция за тригер

  5. hasMany извика с нещо, което не е екземпляр на Sequelize.Model