Như được mô tả tại đây
, postgres hiện không cho phép bạn sử dụng CREATE FUNCTION
đồng thời:
Giải pháp cho điều này là đảm bảo rằng không có hai giao dịch nào cố gắng thực hiện CREATE FUNCTION
đồng thời.
Bạn có thể sử dụng khóa tư vấn posgres cho điều đó.
Bạn có thể tìm thấy phần giới thiệu hay về khóa tư vấn tại đây: https://vladmihalcea .com / how-do-postgresql -visory-lock-work /
Ví dụ:bạn có thể sử dụng:
BEGIN; -- start of transaction
SELECT pg_advisory_xact_lock(2142616474639426746); -- random 64-bit signed ('bigint') lock number
CREATE OR REPLACE FUNCTION myfunction ...
COMMIT;
Điều này có một khóa tư vấn độc quyền ở cấp độ giao dịch, để không có hai giao dịch đồng thời nào có thể chạy chức năng này cùng một lúc. Khi kết thúc giao dịch, khóa sẽ tự động được giải phóng.