Bonjour à tous,
J'utilise un driver jdbc pour postgresql (postgresql-8.3-604.jdbc4.jar) avec mon appli java. Mon but est de charger (executer) des fichiers .sql au démarrage de l'application pour pouvoir appeler des fonctions sur la base de données juste en appelant SELECT my_function() quand l'utilisateur le désire. Pour la petite précision, ces fichiers ne contiennent que des CREATE FUNCTION.
Pour l'instant, je ne travaille que sur un seul fichier. Mon fichier se charge correctement mais j'ai un problème. Une fois que j'ai appelé une première fois la fonction main de ce fichier, la deuxième fois plante mais sans réelle raison.
J'ai donc essayé de rappeler la fonction (sans recharger le fichier) en utilisant pgAdmin III et là impossible de reproduire l'erreur : je peux appeler autant de fois que je veux la fonction juste en faisant 'SELECT my_function'.
Voici le bout de code (quelques commentaires en moins) qui plante lors de la deuxième exécution et son log d'errors associé :
En regardant dans le fichier de log de postgreSQL, il me dit qu'il plante sur le dernier INSERT de la function :
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 CREATE OR REPLACE FUNCTION tools.ver_proj_init_declaration() RETURNS void as $$ DECLARE BEGIN DROP SCHEMA IF EXISTS verproj CASCADE; CREATE SCHEMA verproj; SET search_path TO verproj,tools,pg_catalog, public; -- init VER_PROJ_REPORT CREATE TABLE verproj.VER_PROJ_REPORT (line_nb INTEGER,report_line VARCHAR); CREATE TABLE VER_TIME_REPORT (line_nb INTEGER, prof_nb INTEGER, coltext VARCHAR, coltime VARCHAR); CREATE TABLE verproj.MyGlobalVar_TBL(line_nb INTEGER, prof_nb INTEGER); CREATE TABLE verproj.MyGVar_TBL(card INTEGER, card_head INTEGER, diag_index INTEGER, direct_dic_max INTEGER, eq_index INTEGER, line_nb INTEGER, nb_of_pages INTEGER, out_text VARCHAR, simdru_dic_max INTEGER, simple_dic_max INTEGER); INSERT INTO verproj.MyGlobalVar_TBL VALUES ( 0 /* line_nb */, 1 /* profondeur */); -- init My_GVar_TBL : Table of global variables necessary INSERT INTO verproj.MyGVar_TBL VALUES ( 0 /* card */, 0 /* card_head */, 1 /* diag_index */, 0 /* direct_dic_max */, 0 /* eq_index */, 0 /* line_nb */, 0 /* nb_of_pages */, '' /* out_text */, 0 /* simdru_dic_max */, 0 /* simple_dic_max */); [...] return; END; $$ LANGUAGE plpgsql;
Voilà j'espère avoir été claire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 2009-02-23 11:02:46 GMT ERREUR: la relation « mygvar_tbl » n existe pas 2009-02-23 11:02:46 GMT CONTEXTE : instruction SQL « INSERT INTO MyGVar_TBL VALUES ( 0 , 0 , 1 , 0 , 0 , 0 , 0 , '' , 0 , 0 ) » PL/pgSQL function "ver_proj_init_declaration" line 40 at SQL statement instruction SQL « SELECT ver_proj_init_declaration() »
Je suis incapable de comprendre d'où ça vient. Sachant que si je charge le fichier directement dans postgresql sans passer par l'appli, le même comportement se produit...
Si l'un d'entre vous aurait une piste ou une vague idée, je suis toute ouïe.
Merci beaucoup & bonne journée![]()
Partager