Di Postgres, Anda dapat melakukan banyak hal dengan transaksi yang diputar kembali di akhir:
BEGIN;
UPDATE foo ...:
INSERT bar ...;
SELECT baz FROM ...;
CREATE TABLE abc...; -- even works for DDL statements
DROP TABLE def...;
ALTER TABLE ghi ...:
ROLLBACK; -- !
Selengkapnya di manual:BEGIN
ROLLBACK
Ketahuilah bahwa beberapa hal tidak dapat dibatalkan. Untuk contoh urutan tidak memutar kembali. Atau beberapa perintah khusus seperti dblink panggilan.
Dan beberapa perintah tidak dapat dijalankan dalam transaksi dengan orang lain. Seperti CREATE DATABASE
atau VACUUM
.
Juga, mungkin ada efek samping dengan beban bersamaan, seperti kebuntuan. Tidak mungkin, meskipun. Anda dapat menyetel tingkat isolasi transaksi dengan kebutuhan Anda untuk mengesampingkan efek samping apa pun (dengan mengorbankan kinerja).
Saya tidak akan melakukan ini dengan data yang masuk akal. Risiko melakukan secara tidak sengaja terlalu besar. Dan membiarkan pengguna mengeksekusi kode arbitrer adalah risiko yang hampir tidak dapat ditahan. Tapi untuk lingkungan pelatihan, itu sudah cukup baik.
Cadangkan dengan basis data template . Jika terjadi kesalahan, itulah cara tercepat untuk memulihkan keadaan dasar. Contoh (lihat bab terakhir):
Memotong semua tabel di database Postgres
Ini juga dapat digunakan sebagai kekuatan alternatif :untuk menyediakan database baru yang murni untuk setiap peserta pelatihan.