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

Melanjutkan transaksi setelah kesalahan pelanggaran kunci utama

Anda juga dapat menggunakan SAVEPOINT dalam transaksi.

Pseudocode Python diilustrasikan dari sisi aplikasi:

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

Sunting:Berikut adalah contoh aktual dari tindakan ini di psql berdasarkan sedikit variasi dari contoh dalam dokumentasi (pernyataan SQL diawali dengan ">"):

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

Perhatikan bahwa nilai 3 dimasukkan setelah kesalahan, tetapi masih di dalam transaksi yang sama!

Dokumentasi untuk SAVEPOINT ada di 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. Apa sebenarnya yang dilakukan HIBAH PENGGUNAAN PADA SKEMA?

  2. Cara Mendapatkan Waktu Saat Ini (Tanpa Zona Waktu) di PostgreSQL

  3. Arsitektur dan Penyetelan Memori di Database PostgreSQL

  4. Penjajaran planet

  5. Array agregat Postgresql