Как я могу найти таблицы, которые ссылаются на конкретную строку через внешний ключ?

Учитывая структуру как это:

CREATE TABLE reference_table (
  reference_table_key numeric NOT NULL,
  reference_value numeric,
  CONSTRAINT reference_table_pk PRIMARY KEY (reference_table_key)
);

CREATE TABLE other_table (
  other_table_key numeric NOT NULL,
  reference_table_key numeric,
  CONSTRAINT other_table_pk PRIMARY KEY (other_table_key),
  ONSTRAINT other_table_reference_fk FOREIGN KEY (reference_table_key)
      REFERENCES reference_table (reference_table_key) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE SET NULL
);

CREATE TABLE another_table (
  another_table_key numeric NOT NULL,
  do_stuff_key numeric,
  CONSTRAINT another_table_pk PRIMARY KEY (another_table_key),
  ONSTRAINT another_table_reference_fk FOREIGN KEY (do_stuff_key)
      REFERENCES reference_table (reference_table_key) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE SET NULL
);

--there are 50-60 tables which have similar foreign key references to reference_table

Я хочу написать запрос, который сообщает мне первичные ключи в other_table и another_table и, возможно, в других таблицах, где reference_value равно NULL.

В псевдо-коде:

SELECT table_name, table_primary_key, table_fk_column_name
FROM ?????? some PG table ???????, reference_table
WHERE reference_table.reference_value IS NULL;

Результат будет выглядеть примерно так:

table_name | table_primary_key | table_fk_column_name | reference_table_pk
---------------------------------------------------------------------------
other_table   | 2                |  reference_table_key | 7
other_table   | 4                |  reference_table_key | 56
other_table   | 45               |  reference_table_key | 454
other_table   | 65765            |  reference_table_key | 987987
other_table   | 11               |  reference_table_key | 3213
another_table | 3                |  do_stuff_key        | 4645
another_table | 5                |  do_stuff_key        | 43546
another_table | 7                |  do_stuff_key        | 464356
unknown_table | 1                |  unkown_column_key   | 435435
unknown_table | 1                |  some_other_column_key | 34543
unknown_table | 3                |  unkown_column_key   | 124
unknown_table | 3                |  some_other_column_key | 123

Это похоже на, но не дубликатPostgres: SQL для отображения внешних ключей таблицы , Этот вопрос показывает структуру таблицы. Я хочу найти конкретные случаи.

По сути, если бы яDELETE FROM reference_table WHERE reference_value IS NULL;postgres должен сделать что-то внутренне, чтобы выяснить, что нужно установитьreference_table_key в строке 2 вother_table в NULL. Я хочу посмотреть, какими будут эти строки.

Есть ли запрос, который может сделать это? Есть ли модификатор, который я могу передать вызову DELETE, который бы сказал мне, какие таблицы / строки / столбцы будут затронуты этим DELETE?

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

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