110 votes

Comment tester l'exécution d'une instruction UPDATE dans PostgreSQL ?

Comment puis-je tester une instruction UPDATE par exemple pour voir si cela fonctionnerait, par exemple si cela mettrait réellement à jour les lignes, etc.

Existe-t-il un moyen de le simuler facilement ?

183voto

Paul Sasik Points 37766

Utilisez une transaction pour envelopper votre instruction de mise à jour et une requête de sélection (pour tester la mise à jour), puis annulez-la toujours.

Exemple:

 BEGIN;

UPDATE accounts SET balance = balance - 100.00
    WHERE name = 'Alice';

SELECT balance FROM accounts WHERE name = 'Alice';

ROLLBACK; -- << Important! Un-does your UPDATE statement above!

Une transaction se termine généralement par un commit, mais comme vous ne faites que tester et que vous ne voulez pas que les modifications soient permanentes, vous allez simplement revenir en arrière.

57voto

Joe Stefanelli Points 72874

Enveloppez-le dans unetransaction , testez les résultats avec un SELECT et annulez à la fin.

 BEGIN;

UPDATE ...;

SELECT ...;

ROLLBACK;

5voto

Jake Feasel Points 10341

Vous pouvez toujours créer un exemple de base de données sur SQL Fiddle et y essayer vos instructions de mise à jour.

Divulgation complète : je suis l'auteur de sqlfiddle.com

1voto

Taichman Points 654

Vous pouvez utiliser un outil qui vous permet de prendre un instantané de la base de données et de la restaurer facilement. Je recommande OffScale - c'est essentiellement git pour les bases de données.

1voto

adrianlzt Points 69

Avec Postgres, vous pouvez utiliser la clause UPDATE RETURNING pour afficher les lignes qui ont été modifiées.

 -- example data
CREATE TABLE data(id int, text text);
INSERT INTO DATA VALUES(1,'aaa'),(2,'bbb'),(3,'ccc'),(4,'ddd');

-- original data
SELECT * from data;

-- dry-run update
BEGIN;

UPDATE
  data
SET
  text = 'modified'
WHERE
  id > 2
RETURNING
  id, text;

ROLLBACK;

-- data after dry-run update
SELECT * from data;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X