Как программно проверить, удаляется ли строка?
Скажем, у нас есть таблица 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 для всех ссылающихся таблиц одну за другой, но я хотел бы знать, есть ли более простой способ.
причина Мне нужно, чтобы у меня была таблица с иерархическими данными, в которой любая строка может иметь дочерние строки, и другие таблицы могут ссылаться только на дочерние строки с наименьшей иерархией. Поэтому, когда строка собирается стать родительской строкой, мне нужно проверить, есть ли на нее ссылки где-либо. Если это так, он не может стать родительской строкой, и вставка новой дочерней строки запрещена.