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 » Dupliquer un enregistrement avec un INSERT » 21/07/2011 21:35:17

Bonjour,

Je poste mon message ici pour ne pas perdre la réponse faîte à Olivier, même si je suis à coté de la plaque.
Si Olivier avait posé la même question dans le cadre de la création d'un doublon automatique, ma réponse aurait été :


Bonjour Olivier,

  Que ce soit avec des règles ou des triggers, tu as certainement rencontré le problème scolaire de la récursivité de ce traitement (INSERT => INSERT => INSERT).

   Pour t'en sortir, tu peux simplement créer une vue qui sera utilisée plutôt que sa table pour les opérations SQL. Une règle sur cette vue te permettra alors d'implémenter l'effet désiré (et si tu veux modifier des colonnes bien sûr).

CREATE SEQUENCE seq
  INCREMENT 1
  MINVALUE 1;

CREATE TABLE test
(
  id integer DEFAULT nextval('seq'),
  col1 character varying,
  col2 character varying
);

CREATE OR REPLACE VIEW "view" AS
SELECT test.id, test.col1, test.col2
   FROM test;

CREATE OR REPLACE RULE test AS
    ON INSERT TO view DO INSTEAD ( INSERT INTO test (col1, col2)
  VALUES (new.col1, new.col2);
INSERT INTO test (col1, col2)
  VALUES (new.col1, new.col2);
);

Si tu exécute
INSERT INTO "view" col1,col2 VALUES ('1','2');
puis
SELECT * from "view";
tu obtiens bien
id col1 col2
1 1 2
2 1 2

Tu peux aussi ajouter une règle pour la commande UPDATE, mais s'il faut alors modifier la ligne en doublon, cela va se corser !

Dans ce cas, et si tes règles de modification de colonne sont trop complexes, il s'agira de créer une fonction (plpgsql par exemple) qui sera appelée dans ta règle.

Mais bon, j'ai vu un peu trop loin, ça servira pour plus tard.


Bonne soirée,
Julien.

Pied de page des forums

Propulsé par FluxBB