PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Général » Trigger Before DELETE : Contrainte sur une autre table » 28/12/2018 14:09:11

Désolé de ne pas avoir été assez précis dans ma question, cependant je vous remercie car la solution de modifier ma contrainte avec l'option "ON DELETE CASCADE"
fonctionne parfaitement.

#2 Général » Trigger Before DELETE : Contrainte sur une autre table » 26/12/2018 19:45:21

ClementCRAMBERT
Réponses : 3

Bonsoir,

Je viens vous demander de l'aide car dans le cadre d'un projet de deuxièmes années de DUT informatique, je dois créer une base de données pour un site WEB.
Cependant je suis face à un problème :

j'ai une table compte et une table Groupe, l'attribut compte du groupe fait référence à un ID de compte.

Cependant lors de la création d'un trigger pour supprimer là/les lignes du groupe correspondant à l'id du compte que je veux supprimer pour éviter de violer la contraint de clef étrangère du groupe.

J'utilise dans mon trigger la variable OLD pour retrouver l'ID du compte que je veux supprimer pour supprimer les groupes possédant cette Id dans leurs attributs GRO_Compte mais je ne peux pas car OLD n'a pas par l'attribut COM_id...

Si vous avez des pistes pour régler mon problème je vous en remercie !

Cordialement,
Clément CRAMBERT

La configuration des tables et de la fonction trigger :

CREATE TABLE atm.t_compte_com
(
  com_id serial NOT NULL,
  com_login character varying(50) NOT NULL,
  com_password character varying(50) NOT NULL,
  com_email character varying(100) NOT NULL,
  com_estadmin boolean,
  com_estgroupe boolean,
  com_estproprietaire boolean,
  com_enattente boolean DEFAULT true,
  com_datedecreation date,
  CONSTRAINT com_compte_pk PRIMARY KEY (com_login, com_password, com_email),
  CONSTRAINT t_compte_com_com_id_key UNIQUE (com_id)
);
CREATE TABLE atm.t_groupe_gro
(
  gro_id serial NOT NULL,
  gro_nom character varying(200) DEFAULT NULL::character varying,
  gro_pays character varying(50) DEFAULT NULL::character varying,
  gro_dateformation integer,
  gro_premierediscographie integer,
  gro_compte integer,
  CONSTRAINT gro_groupe_pk PRIMARY KEY (gro_id),
  CONSTRAINT gro_groupe_fk1 FOREIGN KEY (gro_compte)
      REFERENCES atm.t_compte_com (com_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
CREATE OR REPLACE FUNCTION atm."supprimerCompte"()
  RETURNS trigger AS
$BODY$
BEGIN
	IF EXISTS (select * from atm.t_groupe_gro where gro_compte=OLD.t_compte_com.com_id) then
		delete from atm.t_groupe_gro where gro_compte=OLD.com_id;
	END IF;
	
	RETURN OLD;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE

Pied de page des forums

Propulsé par FluxBB