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

テーブル全体を明示的にロックしているときにpostgresが同時に行更新エラーを表示する理由

    上記の@sudoのコメントのおかげで、次のようにステートメントを移動した場合:

    BEGIN;    
        SELECT pg_advisory_xact_lock(2142616474639426746);
        CREATE OR REPLACE FUNCTION my_function() ....
        --the whole function definition is wrapped by an advisory lock
        SELECT * FROM my_function();
    COMMIT;
    

    それからそれは問題を回避するようです、私は大きなデータを使用しました(実際には同じデータを繰り返しループすることでそれを偽造しました)。この種のことを行うのに最も効率的な方法ではないかもしれないが、それは機能することに注意してください。 質問で与えられた試みの問題 ロックはおそらくそれが定義されたトランザクションにのみ制限されていたため、関数の作成はまだその範囲外でした。つまり、ロックされていなかったため、競合が発生していました。しかし、今ではすべてが順調でダンディに見えます。




    1. 指定された文字列を分割し、caseステートメントを準備します

    2. mysqliの最後の挿入ID

    3. DBMS_SCHEDULERジョブは1時間ごとに実行する例

    4. c++コネクタを使用したc++mysql接続bad_alloc