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

libpqxxを使用してデータを一括保存するか、またはlibpqxxでCOPYステートメントを使用する方法

    pushLog 関数はすべての挿入を個別にコミットし、コミットは遅いです。

    ドキュメントのデータベースへの入力 で説明されているように :

    また:

    ただし、あなたの場合、各INSERTが主キー違反で失敗し、最後のコミット以降の前のINSERTがキャンセルされる可能性があるため、これはメリットではなく問題になります。これはCOPY 、それを使用する必要があります。

    パフォーマンスのためにトランザクション内のクエリをグループ化することが本当に必要なので、トランザクションを中止しない方法で主キー違反に対処する必要があります。

    通常、次の2つの方法が使用されます。

    1. エラーを回避します: INSERT INTO ... WHERE NOT EXISTS(SELECT 1 FROM table WHERE primary_key =...)

    2. itrを無視するEXCEPTIONブロックを持つplpgsql関数内に挿入して、エラーをトラップします。重複の原因となっている特定のINSERTはキャンセルされますが、トランザクションは中止されません。

    同時挿入がある場合は、これらのメソッドをロック戦略で改良する必要があります。




    1. ストアドプロシージャへの入力としてのPHP配列

    2. アラビア文字??????? phpとmysqlで

    3. Laravel Delete Query Builder

    4. JDBCの困ったSQL例外