PostgreSql: Obtém todas as linhas referenciando (através de chaves estrangeiras) uma linha particular em uma tabela

Isso parece tão simples, mas não consegui encontrar uma resposta para essa pergunta.

O que eu quero? Uma tabela mestra com linhas que se excluem sempre que não são referenciadas (via chaves estrangeiras). A solução pode ou não ser específica do PostgreSql.

Como? Uma das minhas abordagens para resolver esse problema (na verdade, a única abordagem até agora) envolve o seguinte: Para cada tabela que faz referência a essa tabela mestra, emUPDATE ouDELETE de uma linha, para verificar a linha referenciada no mestre, quantas outras outras linhas ainda se referem à linha referenciada. Se cair para zero, eu também excluo essa linha no master.

(Se você tem uma ideia melhor, eu gostaria de saber!)

Em detalhe: Eu tenho uma tabela mestre referenciada por muitos outros

CREATE TABLE master (
  id serial primary key,
  name text unique not null
);

Todas as outras tabelas têm o mesmo formato geralmente:

CREATE TABLE other (
  ...
  master_id integer references master (id)
  ...
);

Se um desses não forNULL, eles se referem a uma linha emmaster. Se eu for para isso e tentar apagá-lo, receberei uma mensagem de erro, porque já está mencionado:

ERROR:  update or delete on table "master" violates foreign key constraint "other_master_id_fkey" on table "other"
DETAIL:  Key (id)=(1) is still referenced from table "other".
Time: 42.972 ms

Note que não demora muito para descobrir isso, mesmo que eu tenha muitas tabelas referenciandomaster. Como descubro essa informação sem ter que gerar um erro?

questionAnswers(2)

yourAnswerToTheQuestion