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

Tiếp tục giao dịch sau lỗi vi phạm khóa chính

Bạn cũng có thể sử dụng SAVEPOINTs trong giao dịch.

Mã giả Pythonish được minh họa từ phía ứng dụng:

database.execute("BEGIN")
foreach data_row in input_data_dictionary:
    database.execute("SAVEPOINT bulk_savepoint")
    try:
        database.execute("INSERT", table, data_row)
    except:
        database.execute("ROLLBACK TO SAVEPOINT bulk_savepoint")
        log_error(data_row)
        error_count = error_count + 1
    else:
        database.execute("RELEASE SAVEPOINT bulk_savepoint")

if error_count > error_threshold:
    database.execute("ROLLBACK")
else:
    database.execute("COMMIT")

Chỉnh sửa:Đây là một ví dụ thực tế về điều này đang hoạt động trong psql dựa trên một biến thể nhỏ của ví dụ trong tài liệu (các câu lệnh SQL có tiền tố là ">"):

> CREATE TABLE table1 (test_field INTEGER NOT NULL PRIMARY KEY);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "table1_pkey" for table "table1"
CREATE TABLE

> BEGIN;
BEGIN
> INSERT INTO table1 VALUES (1);
INSERT 0 1
> SAVEPOINT my_savepoint;
SAVEPOINT
> INSERT INTO table1 VALUES (1);
ERROR:  duplicate key value violates unique constraint "table1_pkey"
> ROLLBACK TO SAVEPOINT my_savepoint;
ROLLBACK
> INSERT INTO table1 VALUES (3);
INSERT 0 1
> COMMIT;
COMMIT
> SELECT * FROM table1;  
 test_field 
------------
          1
          3
(2 rows)

Lưu ý rằng giá trị 3 đã được chèn sau lỗi, nhưng vẫn nằm trong cùng một giao dịch!

Tài liệu cho SAVEPOINT có tại http://www.postgresql.org/docs/8.4/static/sql-savepoint.html.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tổng quan về các phương thức JOIN trong PostgreSQL

  2. vấn đề bí danh cột postgres

  3. Cách ánh xạ PostgreSQL enum với JPA và Hibernate

  4. Các tính năng PostgreSQL Enterprise mới và đang phát triển với các bản phát hành gần đây

  5. Cách thay đổi mã hóa bộ sưu tập cơ sở dữ liệu mẫu