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,
		
		
        





  Répondre avec citation
Partager