PostgreSql: Pobierz wszystkie wiersze odwołujące się (za pomocą kluczy obcych) do konkretnego wiersza w tabeli

To wydaje się takie proste, ale nie udało mi się znaleźć odpowiedzi na to pytanie.

Czego chcę? Tabela główna z wierszami, które usuwają się, gdy nie są już odwoływane (przez klucze obce). Rozwiązanie może być specyficzne dla PostgreSql.

W jaki sposób? Jedno z moich podejść do rozwiązania tego problemu (właściwie jedyne podejście do tej pory) obejmuje następujące kwestie: Dla każdej tabeli odwołującej się do tej tabeli głównej, wUPDATE lubDELETE wiersza, aby sprawdzić wiersz, do którego odnosi się master, ile innych wierszy nadal odnosi się do wiersza, do którego się odwołuje. Jeśli spadnie do zera, to również usuwam ten wiersz w Master.

(Jeśli masz lepszy pomysł, chciałbym to wiedzieć!)

Szczegółowo: Mam jedną tabelę główną, do której odwołuje się wiele innych

CREATE TABLE master (
  id serial primary key,
  name text unique not null
);

Wszystkie pozostałe tabele mają ogólnie ten sam format:

CREATE TABLE other (
  ...
  master_id integer references master (id)
  ...
);

Jeśli jeden z nich nie jestNULL, odnoszą się do rzędu wmaster. Jeśli przejdę do tego i spróbuję go usunąć, otrzymam komunikat o błędzie, ponieważ jest to już określone:

ERROR:  update or delete on table "master" violates foreign key constraint "other_master_id_fkey" on table "other"
DETAIL:  Key (id)=(1) is still referenced from table "other".
Time: 42.972 ms

Zauważ, że nie zajmuje to zbyt wiele czasu, nawet jeśli mam wiele odniesień do tabelmaster. Jak znaleźć te informacje bez konieczności zgłaszania błędu?

questionAnswers(2)

yourAnswerToTheQuestion