Vous n'êtes pas identifié(e).
Pages : 1
Est-il possible d'imbriquer un update dans un insert grâce à un returning * ?
exemple :
insert into table1 (update table2 set .... where .... returning *)
Cet exemple me renvoi une erreur sur "set".
En faite je cherche un moyen facile d'insérer des lignes modifiées par une commande update dans une table tierce.
Avez-vous une idée ?
Merci.
Hors ligne
Apparemment ça n'est pas possible : http://archives.postgresql.org/pgsql-ge … g00805.php
(à moins que ça n'ait changé, mais je n'en ai pas l'impression)
Un trigger pourrait le faire, mais ça serait en place en permanence, pas juste pour une requête ponctuelle.
Marc.
Hors ligne
Réponse un peu plus affirmative : non, ce n'est pas possible. Quelques discussions ont eu lieu pour permettre cela pour la future 8.5, mais rien n'est fait pour l'instant.
Guillaume.
Hors ligne
Merci pour vos réponses.
J'ai utilisé le trigger suivant pour résoudre ce problème :
-- table1 : table pour insertion
-- table2 : table à updater
CREATE OR REPLACE FUNCTION process_add_updated() RETURNS TRIGGER AS $table2$
DECLARE
BEGIN
IF (TG_OP = 'UPDATE') THEN
INSERT INTO table1 SELECT NEW.*;
RETURN NEW;
END IF;
RETURN NULL; -- result is ignored since this is an AFTER trigger
END;
$table2$ LANGUAGE plpgsql;
CREATE TRIGGER add_updated
AFTER UPDATE ON table2
FOR EACH ROW EXECUTE PROCEDURE process_add_updated();
Pour utiliser ce trigger il faut installer le langage plpgsql. (tuto : http://docs.postgresqlfr.org/8.1/xplang.html)
Dernière modification par nGuinet (20/09/2009 11:22:17)
Hors ligne
Pages : 1