sql >> Databáze >  >> RDS >> PostgreSQL

Mohu příkazy dry run/sandbox sql?

V Postgres můžete dělat mnoho s transakcemi které jsou vráceny zpět na konci:

BEGIN;

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

ROLLBACK;   -- !

Více v manuálu:BEGIN ROLLBACK

Uvědomte si však, že některé věci nelze vrátit zpět. Například sekvence se nevrátí zpět. Nebo nějaké speciální příkazy jako dblink hovory.

A některé příkazy nelze spustit v transakci s jinými. Jako CREATE DATABASE nebo VACUUM .

Také se mohou vyskytnout vedlejší účinky se souběžným zatížením, jako jsou uváznutí. Nicméně nepravděpodobné. Můžete nastavit úroveň izolace transakcí na vaše požadavky, abyste vyloučili jakékoli vedlejší účinky (za určitou cenu výkonu).

S rozumnými daty bych to nedělal. Riziko náhodného spáchání je příliš velké. A nechat uživatele spouštět libovolný kód je riziko, které je jen stěží zvládnutelné. Ale pro tréninkové prostředí by to mělo stačit.

Zálohujte jej pomocí databáze šablon . Pokud by se něco pokazilo, je to nejrychlejší způsob, jak obnovit základní stav. Příklad (podívejte se na poslední kapitolu):
Zkrácení všech tabulek v databázi Postgres

To lze také použít jako alternativu hrubé síly :poskytnout čistou novou databázi pro každého účastníka školení.



  1. mysql pivoting - jak mohu načíst data ze stejné tabulky do různých sloupců?

  2. Jaká oprávnění jsou vyžadována k vytvoření uživatele v Oracle s uživatelem, který není DBA?

  3. SQL, jak mazat data a tabulky

  4. Kopírování CSV do hostované databáze Postgresql Amazon RDS