PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Puis-je exécuter des commandes sql à sec/sandbox ?

Dans Postgres, vous pouvez faire beaucoup avec les transactions qui sont annulés à la fin :

BEGIN;

UPDATE foo ...:
INSERT bar ...;
SELECT baz FROM ...;
CREATE TABLE abc...;   -- even works for DDL statements
DROP   TABLE def...;
ALTER  TABLE ghi ...:

ROLLBACK;   -- !

Plus d'informations dans le manuel :BEGIN ROLLBACK

Sachez cependant que certaines choses ne peuvent pas être annulées. Pour les instances, les séquences ne sont pas annulées. Ou des commandes spéciales comme dblink appels.

Et certaines commandes ne peuvent pas être exécutées dans une transaction avec d'autres. Comme CREATE DATABASE ou VACUUM .

En outre, il peut y avoir des effets secondaires avec une charge simultanée, comme des blocages. Peu probable, cependant. Vous pouvez définir le niveau d'isolement des transactions à vos besoins pour exclure tout effet secondaire (au détriment des performances).

Je ne ferais pas cela avec des données sensibles. Le risque de commettre par accident est trop grand. Et laisser les utilisateurs exécuter du code arbitraire est un risque difficilement maîtrisable. Mais pour un environnement de formation, cela devrait suffire.

Sauvegardez-le avec une base de données de modèles . En cas de problème, c'est le moyen le plus rapide de restaurer un état de base. Exemple (regardez le dernier chapitre) :
Tronquer toutes les tables d'une base de données Postgres

Cela peut également être utilisé comme alternative à la force brute :pour fournir une nouvelle base de données vierge pour chaque stagiaire.