Bonjour,

J'ai deux fonctions :

alimentation() et alimentation(my_insee character varying).

La première est définit ainsi :
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 je lance ma fonction générale (sans paramètre) cela engendre la création automatique d'un nombre conséquent de verrous.
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,