Postgresでは、トランザクションで多くのことができます ロールバック 最後に:
BEGIN;
UPDATE foo ...:
INSERT bar ...;
SELECT baz FROM ...;
CREATE TABLE abc...; -- even works for DDL statements
DROP TABLE def...;
ALTER TABLE ghi ...:
ROLLBACK; -- !
ただし、ロールバックできないものもあることに注意してください。たとえば、シーケンスはロールバックしません。または、dblink などの特別なコマンド 呼び出します。
また、一部のコマンドは、他のコマンドとのトランザクションでは実行できません。 CREATE DATABASE
のように またはVACUUM
。
また、デッドロックなど、同時ロードによる副作用が発生する可能性があります。しかし、ありそうもない。 トランザクション分離レベル を設定できます 副作用を除外するための要件に応じて(パフォーマンスにいくらかのコストがかかります)。
私は賢明なデータではこれを行いません。偶然に犯すリスクは大きすぎます。また、ユーザーに任意のコードを実行させることは、ほとんど封じ込められないリスクです。ただし、トレーニング環境の場合は、それで十分です。
テンプレートデータベースでバックアップします 。何か問題が発生した場合、それが基本的な状態を復元するための最速の方法です。例(最後の章を参照):
Postgresデータベース内のすべてのテーブルを切り捨てる
これは、ブルートフォース代替としても使用できます。 :各研修生に手付かずの新しいデータベースを提供します。