Jak znaleźć tabele, które odwołują się do konkretnego wiersza za pomocą klucza obcego?

Biorąc pod uwagę taką strukturę:

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

Chcę napisać zapytanie, które mówi mi klucze podstawowe w other_table i another_table oraz potencjalnie więcej tabel, gdzie wartość reference_value wynosi NULL.

W psuedo-code:

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

Wynik wyglądałby następująco:

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

Jest to podobne do, ale nie jest duplikatemPostgres: SQL, aby wyświetlić listę kluczy obcych . To pytanie pokazuje strukturę tabeli. Chcę znaleźć konkretne przypadki.

Zasadniczo, gdybym miałDELETE FROM reference_table WHERE reference_value IS NULL;, postgres musi zrobić coś wewnętrznie, aby dowiedzieć się, że musi to ustawićreference_table_key w rzędzie 2 wother_table do NULL. Chcę zobaczyć, jakie będą te rzędy.

Czy istnieje zapytanie, które może to zrobić? Czy istnieje modyfikator, który mogę przekazać do wywołania DELETE, które powiedziałoby mi, na które tabele / wiersze / kolumny miałby wpływ ten DELETE?

questionAnswers(2)

yourAnswerToTheQuestion