(अद्यतन:हाथ से इसकी कोई आवश्यकता नहीं है, मैंने पोस्टग्रेस्क्ल मेलिंग सूचियों में पूछा, और यह बदल गया कि यह व्यवहार पहले से ही psql क्लाइंट में ON_ERROR_ROLLBACK सेट द्वारा लागू किया गया है)
साइमन के उत्तर (+1) पर विस्तृत करने के लिए, आपके परिदृश्य में आप प्रत्येक इंटरैक्टिव क्वेरी के बाद हमेशा एक ही नाम के साथ एक बचत बिंदु जोड़ सकते हैं (यदि क्वेरी सफल होती है तो यह पिछले को ओवरराइट करता है)। त्रुटि के मामले में, आप अंतिम सहेजे गए एक पर वापस जाते हैं और वहां से जारी रखते हैं।
इस कार्य पैटर्न का एक उदाहरण:
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)