(PEMBARUAN:Tidak perlu melakukannya dengan tangan, saya bertanya di milis postgresql, dan ternyata perilaku ini sudah diterapkan, oleh set ON_ERROR_ROLLBACK di klien psql)
Untuk menguraikan jawaban Simon (+1) , dalam skenario Anda, Anda dapat secara rutin menambahkan savepoint setelah setiap kueri interaktif, selalu dengan nama yang sama (itu menimpa yang sebelumnya jika kueri berhasil). Jika terjadi kesalahan, Anda kembali ke yang terakhir disimpan dan melanjutkan dari sana.
Contoh pola kerja ini:
db=# select * from test_gral ;
i | t | n
---+------+------
1 | text | 10.0
(1 row)
db=# begin;
BEGIN
db=# insert into test_gral values (2,'xx',20); savepoint sp;
INSERT 0 1
SAVEPOINT
db=# insert into test_gral values (3,'xx',30); savepoint sp;
INSERT 0 1
SAVEPOINT
db=# insert into test_gralxx values (4,'xx',40); savepoint sp;
ERROR: relation "test_gralxx" does not exist
LINE 1: insert into test_gralxx values (4,'xx',40);
^
ERROR: current transaction is aborted, commands ignored until end of transaction block
db=# ROLLBACK TO SAVEPOINT sp;
ROLLBACK
db=# insert into test_gral values (4,'xx',40); savepoint sp;
INSERT 0 1
SAVEPOINT
db=# commit;
COMMIT
db=# select * from test_gral ;
i | t | n
---+------+------
1 | text | 10.0
2 | xx | 20
3 | xx | 30
4 | xx | 40
(4 rows)