sql >> Databasteknik >  >> RDS >> PostgreSQL

Kan jag torrköra/sandbox sql-kommandon?

I Postgres kan du göra mycket med transaktioner som återställs i slutet:

BEGIN;

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

ROLLBACK;   -- !

Mer i manualen:BEGIN ROLLBACK

Var medveten om att vissa saker inte kan rullas tillbaka. Till exempel rullar sekvenser inte tillbaka. Eller några speciella kommandon som dblink samtal.

Och vissa kommandon kan inte köras i en transaktion med andra. Som CREATE DATABASE eller VACUUM .

Det kan också finnas biverkningar med samtidig belastning, som dödläge. Osannolikt dock. Du kan ställa in transaktionsisoleringsnivån till dina krav för att utesluta eventuella biverkningar (till viss kostnad för prestanda).

Jag skulle inte göra det här med vettig data. Risken att begå av misstag är för stor. Och att låta användare exekvera godtycklig kod är en risk som knappast går att hantera. Men för en träningsmiljö borde det vara tillräckligt bra.

Säkerhetskopiera den med en malldatabas . Om något skulle gå fel är det det snabbaste sättet att återställa ett grundläggande tillstånd. Exempel (titta på det sista kapitlet):
Trunkera alla tabeller i en Postgres-databas

Detta kan också användas som brute force alternativ :att tillhandahålla en ren ny databas för varje praktikant.



  1. Hur man trimmar tiden från tidsstämpeln med php

  2. Vad är skillnaden mellan vyer och materialiserade vyer i Oracle?

  3. Rätt sätt att hantera dubbelriktad 1:m i Green-DAO

  4. Välj att beräkna försäljningsgenomsnitt genom att kunden tar med första försäljningen i MYSQL