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

Postgresはネストされたトランザクションまたは自律的なトランザクションをサポートしていますか?

    Postgresはネストされたトランザクションをサポートしますが、ネストされた部分的なポイントを持つトランザクションのように、従来のSQLとは異なります。

    トップレベルには、常に典型的なBEGIN/COMMIT/ROLLBACKがあります。 、およびネストされたレベルでは、次のコマンドを使用する必要があります:

    • SAVEPOINT name -トランザクションに固有の名前で新しいセーブポイントを作成します
    • RELEASE SAVEPOINT name -セーブポイントをコミットしますが、含まれているトランザクションがコミットした場合にのみ保持されます
    • ROLLBACK TO SAVEPOINT name -セーブポイントをロールバックします

    また、次のことを確認する必要があります。

    • SAVEPOINTに使用される名前 ユニークです;
    • 1つのSAVEPOINTでの失敗 トップレベルまで上向きに伝播されます。

    自動的にそれを実行できるライブラリを使用しない限り、最後のビットは少し注意が必要です。

    pg-promiseを書いたとき、これら2つの規定が保証されていることを確認しました。

    • level_1として、セーブポイント名を自動的に生成します 、level_2 、など、トランザクションレベルに基づきます。
    • ROLLBACK TO SAVEPOINT nameを含めて実行します 、およびトップレベルのROLLBACK 子トランザクションが失敗した場合-すべて標準のpromise-chainingロジックに基づいて構築されています。

    説明されているPostgreSQLネストトランザクションの制限も参照してください...



    1. 指定された名前の列を含むすべてのテーブルを検索します-MSSQLServer

    2. Oracleで複数行の挿入を行う最良の方法は?

    3. Oracleの数値フォーマット要素のリスト

    4. mysql_real_escape_string()とmysql_escape_string()はアプリのセキュリティに十分ですか?