Dois-je désactiver temporairement les contraintes de clé étrangère? Comment?

J'ai deux tables:

person:
    id serial primary key,
    name varchar(64) not null

task:
    tenant_id   integer not null references person (id) on delete cascade,
    customer_id integer not null references person (id) on delete restrict

(Ils ont beaucoup plus de colonnes que ça, mais le reste ne sont pas pertinentes pour la question.)

Le problème est, je veux cascade-supprimer un task lorsque son locataire person est supprimé. Mais lorsque le locataire et le client sont la même personne, le customer_id contrainte de clé étrangère va limiter la suppression.

Ma question est en deux parties:

  1. Est de désactiver temporairement le deuxième clé étrangère ma seule option?
  2. Si oui, alors comment dois-je faire dans PostgreSQL?
la table personne est auto référencé? ou j'ai mal compris?
oui, j'ai oublié... j'ai mis à jour la question en conséquence
viens le problème quand id = tenant_id? ou avec tout autre registre qui doit être supprimé sur la cascade? Désolé, je suis vraiment pas sûr de Postgres, mais ai eu un problème similaire avec Ms sql server, sql-server ne pas permettre à l'ensemble on delete cascade quand est auto référencé... j'ai fait un cte pour obtenir tous les regs qui serait supprimé sur la cascade et la suppression de tous sur la même instruction delete.. de cette façon, le FK na pas restreindre la cause n'registre seraient supprimés en même temps que...
Veuillez préciser le rôle de person.tenant_id. Ne semble pas pertinent pour la question? Aussi, vous parlez d'une première et d'une deuxième partie de la question, que je ne peux identifier. Je vois une seule question. Et de déclarer la version de Postgres en cours d'utilisation.
Si vous voulez des suppressions en cascade, pourquoi avez-vous on delete restrict sur le customer_id contrainte de clé étrangère? Ah, je vois, tant pis.

OriginalL'auteur clapas | 2013-02-21