Jak programowo sprawdzić, czy wiersz jest usuwalny?

Powiedzmy, że mamy tabelę PostgreSQL w następujący sposób:

CREATE TABLE master (
    id INT PRIMARY KEY,
    ...
);

i wiele innych tabel odwołujących się do niego za pomocą kluczy obcych:

CREATE TABLE other (
    id INT PRIMARY KEY,
    id_master INT NOT NULL,
    ...
    CONSTRAINT other_id_master_fkey FOREIGN KEY (id_master)
                                    REFERENCES master (id) ON DELETE RESTRICT
);

Czy istnieje sposób sprawdzenia (z poziomu funkcji wyzwalacza), czy wiersz główny jest usuwalny bez faktycznego usunięcia? Oczywistym sposobem jest wykonanie SELECT na wszystkich tabelach odwołań jedna po drugiej, ale chciałbym wiedzieć, czy istnieje łatwiejszy sposób.

Thepowód Potrzebuję tego, ponieważ mam tabelę z danymi hierarchicznymi, w której każdy wiersz może mieć wiersze potomne, a do innych wierszy można odwoływać się tylko do wierszy podrzędnych, które są najniższe w hierarchii. Więc kiedy wiersz ma stać się wierszem nadrzędnym, muszę sprawdzić, czy jest on już odniesiony w dowolnym miejscu. Jeśli tak, nie może stać się wierszem nadrzędnym, a wstawienie nowego wiersza podrzędnego jest zabronione.

questionAnswers(1)

yourAnswerToTheQuestion