説明されているように、ここ
、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つの同時トランザクションを実行して関数を同時に作成することはできません。トランザクションの終了時に、ロックは自動的に解放されます。