Seperti yang dijelaskan di sini
, postgres saat ini tidak mengizinkan Anda menggunakan CREATE FUNCTION
bersamaan:
Solusi untuk ini adalah memastikan bahwa tidak ada dua transaksi yang mencoba melakukan CREATE FUNCTION
pada saat yang sama.
Anda dapat menggunakan kunci saran posgres untuk itu.
Pengantar yang baik untuk kunci penasihat dapat ditemukan di sini:https://vladmihalcea .com/how-do-postgresql-advisory-locks-work/
Misalnya, Anda dapat menggunakan:
BEGIN; -- start of transaction
SELECT pg_advisory_xact_lock(2142616474639426746); -- random 64-bit signed ('bigint') lock number
CREATE OR REPLACE FUNCTION myfunction ...
COMMIT;
Ini membutuhkan kunci penasihat eksklusif tingkat transaksi, sehingga tidak ada dua transaksi bersamaan yang dapat menjalankan fungsi tersebut pada saat yang sama. Di akhir transaksi, kunci akan dilepas secara otomatis.