Tout d'abord, vous devez changer relocatable
à false
dans le fichier de contrôle de l'extension.
À part cela, la recommandation que vous avez reçue est en partie raisonnable et en partie absurde.
Vous devez définir vos fonctions comme ceci :
CREATE FUNCTION .... AS
$$ /* function body */ $$
SET search_path = @[email protected];
Puis le search_path
est fixé à pg_catalog
, pg_temp
et votre schéma d'extension pour la durée de l'appel de la fonction. Cela signifie que tout accès aux objets sans schéma explicite ne cherchera que dans ces schémas.
Ensuite, vous n'avez pas à vous soucier de qualifier explicitement tout dans la fonction avec @[email protected]
, et vous pouvez utiliser des opérateurs sans vous inquiéter, car search_path
s'applique également aux opérateurs. (Vous pouvez également qualifier les opérateurs de schéma :OPERATOR(schema.+)
, mais c'est évidemment douloureux et nuit à la lisibilité.)