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

postgresql / PL/pgSQLで関数を作成するときにタプルが同時に更新されます

    説明されているように、ここ 、postgresでは現在CREATE FUNCTIONを使用できません 同時に:

    これに対する解決策は、2つのトランザクションがCREATE FUNCTIONを実行しようとしないようにすることです。 同時に。

    posgresアドバイザリロックを使用できます そのために。

    アドバイザリロックの優れた紹介はここにあります: https:// vladmihalcea .com / how-do-postgresql-advisory-locks-work /

    たとえば、次のように使用できます。

    BEGIN; -- start of transaction
    
    SELECT pg_advisory_xact_lock(2142616474639426746); -- random 64-bit signed ('bigint') lock number
    
    CREATE OR REPLACE FUNCTION myfunction ...
    
    COMMIT;
    

    これにはトランザクションレベルの排他的アドバイザリロックが必要であるため、2つの同時トランザクションを実行して関数を同時に作成することはできません。トランザクションの終了時に、ロックは自動的に解放されます。




    1. MySQLサーバーでテーブルを表示するさまざまな方法

    2. 同じテーブル名の挿入クエリ内でselectクエリを使用します

    3. 子レコードの選択、値の乗算、および親レコードの更新をトリガーします

    4. Oracle-単一の行を複数の行に分割