PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bisakah saya meminta Postgresql untuk mengabaikan kesalahan dalam transaksi?

(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)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membuat tabel dalam mode pengguna tunggal di postgres

  2. Bagaimana cara menghapus sejumlah baris tetap dengan penyortiran di PostgreSQL?

  3. Kendala tumpang tindih tanggal postgres

  4. JDBCTemplate mengatur POJO bersarang dengan BeanPropertyRowMapper

  5. Pemahaman operasi batch JDBC