sql >> Database teknologi >  >> RDS >> PostgreSQL

Kan jeg dry run/sandbox sql-kommandoer?

I Postgres kan du gøre meget med transaktioner der er rullet tilbage til sidst:

BEGIN;

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

ROLLBACK;   -- !

Mere i manualen:BEGIN ROLLBACK

Vær dog opmærksom på, at nogle ting ikke kan rulles tilbage. For eksempel ruller sekvenser ikke tilbage. Eller nogle specielle kommandoer såsom dblink opkald.

Og nogle kommandoer kan ikke køres i en transaktion med andre. Ligesom CREATE DATABASE eller VACUUM .

Der kan også være bivirkninger ved samtidig belastning, såsom dødvande. Dog usandsynligt. Du kan indstille transaktionsisoleringsniveauet til dine krav for at udelukke eventuelle bivirkninger (til en vis pris for ydeevnen).

Jeg ville ikke gøre det her med fornuftige data. Risikoen for at begå ved et uheld er for stor. Og at lade brugere udføre vilkårlig kode er en risiko, der næppe kan indeholdes. Men til et træningsmiljø burde det være godt nok.

Sikkerhedskopier den med en skabelondatabase . Hvis noget skulle gå galt, er det den hurtigste måde at genoprette en grundlæggende tilstand. Eksempel (se det sidste kapitel):
Trunkering af alle tabeller i en Postgres-database

Dette kan også bruges som brute force alternativ :at give en uberørt ny database for hver praktikant.



  1. Hvordan konverteres rækker til kolonner i SQL Server?

  2. Indlejret eller administreret Oracle-instans til integrationstest

  3. MySQL atomoperationer og bordlåsning

  4. Sådan sender du en ArrayList<String> til en anden aktivitet og konverterer den til dobbelt