Как программно проверить, удаляется ли строка?

Скажем, у нас есть таблица PostgreSQL примерно так:

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

и многие другие таблицы, ссылающиеся на него с помощью внешних ключей:

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
);

Есть ли способ проверить (изнутри функции триггера), можно ли удалить главную строку, не пытаясь ее удалить? Очевидный способ состоит в том, чтобы сделать SELECT для всех ссылающихся таблиц одну за другой, но я хотел бы знать, есть ли более простой способ.

причина Мне нужно, чтобы у меня была таблица с иерархическими данными, в которой любая строка может иметь дочерние строки, и другие таблицы могут ссылаться только на дочерние строки с наименьшей иерархией. Поэтому, когда строка собирается стать родительской строкой, мне нужно проверить, есть ли на нее ссылки где-либо. Если это так, он не может стать родительской строкой, и вставка новой дочерней строки запрещена.

Ответы на вопрос(1)

Ваш ответ на вопрос