PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tôi có thể yêu cầu Postgresql bỏ qua lỗi trong giao dịch không

(CẬP NHẬT:Không cần phải làm điều này bằng tay, tôi đã hỏi trong danh sách gửi thư postgresql và hóa ra là hành vi này đã được thực hiện, bởi bộ ON_ERROR_ROLLBACK trong máy khách psql)

Để giải thích rõ hơn về câu trả lời của Simon (+1), trong trường hợp của bạn, bạn có thể bắt đầu thêm một điểm lưu sau mỗi truy vấn tương tác, luôn có cùng tên (nó sẽ ghi tên trước đó nếu truy vấn thành công). Trong trường hợp xảy ra lỗi, bạn quay lại lần lưu cuối cùng và tiếp tục từ đó.

Một ví dụ về kiểu làm việc này:

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. Cài đặt PostgreSQL trên Ubuntu cho Ruby on Rails

  2. Câu lệnh Postgresql đơn giản - tên cột không tồn tại

  3. Nhập tệp CSV đã nén vào PostgreSQL

  4. Cách sử dụng pgBackRest để sao lưu PostgreSQL và TimescaleDB

  5. Tổng quan về các cột được tạo cho PostgreSQL