Dankzij de opmerking van @sudo hierboven, als ik de uitspraken als volgt heb verplaatst:
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;
dan lijkt het probleem te voorkomen, ik heb grote gegevens gebruikt (eigenlijk vervalst met herhaalde lussen door dezelfde gegevens). Houd er rekening mee dat het misschien niet de meest efficiënte manier is om dit soort dingen te doen, maar het werkt. Het probleem met de poging gegeven in de vraag was dat het slot waarschijnlijk alleen beperkt was tot de transactie waarin het was gedefinieerd en dat het creëren van een functie nog steeds buiten het bereik lag, d.w.z. niet vergrendeld, vandaar dat het conflict verscheen. Maar alles lijkt nu goed en dandy.