2010-11-29 8 views
3

J'ai un déclencheur à la mise à jour, cela devrait supprimer la ligne OLD *, mais je ne connais pas la structure de la table. J'ai donc essayé d'utiliser information_schema pour récupérer les noms de colonnes, mais c'est très lent.Supprimer la ligne dans le déclencheur (PostgreSQL)

Est-il possible d'effectuer la suppression sans connaître la structure de la table?

UPD: Trigger devrait accepter la ligne d'une table, donc la fonction de déclenchement ne peut rien savoir sur la table avant qu'il ne soit invoqué.

UPD2:
Cela fonctionne bien pour moi:

EXECUTE 'DELETE FROM ' || tablename || ' WHERE ctid=$1' USING OLD.ctid; 

Répondre

0

Vous pouvez décrire la table à l'aide postgre sql \d+ tablename.

1

Pourquoi avez-vous besoin? Une mise à jour est actuellement une insertion d'une nouvelle version et une suppression de l'ancienne version d'un enregistrement. Il n'y a pas besoin d'une suppression supplémentaire par ce déclencheur, le déclencheur ne trouvera jamais un enregistrement parce que l'enregistrement est déjà parti.

+0

Le déclencheur est un déclencheur UPDATE, il n'y aura donc pas de DELETE. Mais la vraie question est: pourquoi l'application n'utilise-t-elle pas un DELETE quand elle veut supprimer une ligne? –

+0

Oui, c'est un déclencheur de mise à jour, mais il veut supprimer l'ancienne version de l'enregistrement mis à jour, vérifiez ctid. –

Questions connexes