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?
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.
Enveloppez-le dans transaction , testez les résultats avec un SELECT et effectuez une restauration à la fin.
BEGIN;
UPDATE ...;
SELECT ...;
ROLLBACK;
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
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.
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.
É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;
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;