web-dev-qa-db-fra.com

Comment tester une instruction UPDATE dans PostgreSQL?

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

Y at-il un moyen de simuler facilement?

37
user1154863

Utilisez un transaction pour envelopper votre instruction de mise à jour et une requête select (pour tester la mise à jour), puis restaurez-la toujours. 

Exemple:

BEGIN;

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

SELECT accounts WHERE name = 'Alice';

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

Une transaction se termine généralement par une validation, mais puisque vous ne faites que tester et que vous ne voulez pas que les modifications soient permanentes, vous annulez simplement.

59
Paul Sasik

Enveloppez-le dans transaction , testez les résultats avec un SELECT et effectuez une restauration à la fin.

BEGIN;

UPDATE ...;

SELECT ...;

ROLLBACK;
32
Joe Stefanelli

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

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

3
Jake Feasel

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

2
Taichman

Exécutez d'abord la même vérification avec une instruction SELECT: les lignes renvoyées par SELECT seront les lignes modifiées par UPDATE.

0
ibiwan

Étant donné cette mise à jour simple:

UPDATE Products
   SET price_including_vat = price * 1.05
 WHERE product_type = 'Food';

Je voudrais le tester en utilisant quelque chose comme ça:

 SELECT price_including_vat AS price_including_vat__before, 
        price * 1.05 AS price_including_vat__after, 
        *
   FROM Products
 WHERE product_type = 'Food';

En fait, j'engagerais probablement le cerveau et ferais une analyse plus semblable à celle-ci:

WITH updated AS 
   (
    SELECT price_including_vat AS price_including_vat__before, 
           price * 1.05 AS price_including_vat__after, 
           *
      FROM Products
    WHERE product_type = 'Food'
   )
SELECT * 
  FROM updated
 WHERE price_including_vat__before = price_including_vat__after;
0
onedaywhen

Avec Postgres, vous pouvez utiliser la clause UPDATERETOURNANTpour indiquer les lignes modifiées.

https://www.db-fiddle.com/f/e8qsdmqT87DoLpMjyLD

BEGIN;

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

ROLLBACK;
0
adrianlzt