sql >> データベース >  >> RDS >> PostgreSQL

トランザクション内のエラーを無視するようにPostgresqlに依頼できますか

    (更新:これを手動で行う必要はありません。postgresqlメーリングリストで質問したところ、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)
    


    1. MySQLWorkbenchの代替-ClusterControlのポイントアンドクリックGUI

    2. MariaDBでのSECOND()のしくみ

    3. SQL Server:テーブルの最大行数

    4. SQL Serverに監査テーブルを実装するための提案はありますか?