उपरोक्त @ सूडो की टिप्पणी के लिए धन्यवाद, अगर मैं इस तरह के बयानों को आगे बढ़ाता हूं:
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;
तो ऐसा लगता है कि समस्या से बचने के लिए, मैंने बड़े डेटा का उपयोग किया है (वास्तव में इसे उसी डेटा के माध्यम से बार-बार लूप के साथ बना दिया गया है)। ध्यान दें कि इस तरह का काम करने का यह सबसे कारगर तरीका नहीं हो सकता है, लेकिन, यह काम करता है। प्रश्न में दिए गए प्रयास में समस्या यह था कि ताला शायद केवल उस लेनदेन तक ही सीमित था जिसमें इसे परिभाषित किया गया था और इसलिए फ़ंक्शन का निर्माण अभी भी इसके दायरे से बाहर था यानी लॉक नहीं था, इसलिए संघर्ष दिखाई दे रहा था। लेकिन, अब सब ठीक और बांका लगता है।