Bonjour,
J'ai deux fonctions :
alimentation() et alimentation(my_insee character varying).
La première est définit ainsi :
Lorsque je lance ma fonction générale (sans paramètre) cela engendre la création automatique d'un nombre conséquent de verrous.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 CREATE OR REPLACE FUNCTION alimentation() RETURNS void AS $BODY$ DECLARE commune_en_cours nav_commune%ROWTYPE; BEGIN FOR commune_en_cours IN (SELECT * FROM nav_commune) LOOP PERFORM alimentation(commune_en_cours.insee); END LOOP; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; ALTER FUNCTION alimentation() OWNER TO "schema";
Lorsque ma table nav_commune contient beaucoup de champs, j'obtiens un message d'erreur m'indiquant que je dépasse le nombre de verrous autorisés.
Bien sûr je pourrais modifier la valeur de max_locks_per_transaction mais c'est peu générique.
De ce fait mes questions sont les suivantes :
Pourquoi cette méthode -une fonction globale qui appelle une sous fonction paramétrée pour différentes valeurs du paramètre- engendre-t-elle toutes ces créations de verrous ?
Quelle méthode employer pour corriger ce problème, ou comment interdire la création de verrous ?
note : en effet, je garantis que cette fonction ne sera pas en concurence avec d'autres appels pour les tables considérées et donc les verrous ne me sont pas nécessaire...
Merci. Cordialement,
Partager