Berkat komentar @sudo di atas, Jika saya memindahkan pernyataan seperti ini:
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;
maka sepertinya untuk menghindari masalah, saya telah menggunakan data besar (sebenarnya memalsukannya dengan loop berulang melalui data yang sama). Perhatikan bahwa itu mungkin bukan cara yang paling efisien untuk melakukan hal semacam ini, tetapi, itu berhasil. Masalah dengan upaya yang diberikan dalam pertanyaan adalah bahwa kunci itu mungkin hanya terbatas pada transaksi yang didefinisikan di dalamnya dan karenanya pembuatan fungsi masih di luar cakupannya yaitu tidak dikunci, karenanya konflik muncul. Tapi, semua tampak baik-baik saja dan keren sekarang.