|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||
|
Invité de passage
![]() |
Bonjour,
Je me suis enfin décidé à passer en version PostgreSQL 8.4 (je viens de la 7.4!) Je n'ai pas eu trop de peine malgré des petites adaptations pour mes procédures stockées en langage C (remplacement de VARATT_SIZEP par SET_VARSIZE ainsi que l'ajout du bloc "magique" PG_MODULE_MAGIC). Mon problème est apparu lors de mon premier DUMP ou plutôt mon premier RESTORE. En effet, j'ai souvent besoin de copier des bases de données d'une machine à l'autre et j'utilise beaucoup le pg_dump. Je retrouve bien les fonctions 'C' de ma librairie dans le fichier dump généré: Code :
Citation:
Quelqu'un aurait-il une explication à mon problème? Ou encore mieux, une solution? |
|||
|
|
00
|
|
|
#2 |
|
Invité de passage
![]() |
Personne n'a une idée
|
|
|
00
|
|
|
#3 |
![]() ![]() Inscription : octobre 2008 Messages : 1 708 ![]() |
Il parait invraisemblable que le message d'erreur que tu cites corresponde à l'instruction SQL (CREATE FUNCTION) au-dessus.
Est-ce que c'est reproductible en-dehors de la restauration? |
|
|
00
|
|
|
#4 | ||||
|
Invité de passage
![]() |
Oui, évidement, j'aurais dû préciser, l'erreur ne vient pas du "restore", je voulais simplement expliquer pourquoi ma table n'existait pas encore.
Mais le message d'erreur apparait également hors restauration. Si je fais l'instruction suivante dans une base qui n'a pas encore la table ville : Code :
Code :
|
||||
|
|
00
|
|
|
#5 | |
![]() ![]() Inscription : octobre 2008 Messages : 1 708 ![]() |
Citation:
Et le CREATE FUNCTION n'est normalement pas capable, sans exécuter la fonction, de savoir qu'elle peut faire une requête sur cette table ville. Il y a quelque chose de très curieux là-dedans. |
|
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() |
Exactement
|
|
|
00
|
|
|
#7 |
![]() ![]() Inscription : octobre 2008 Messages : 1 708 ![]() |
Et est-ce que tu peux supprimer dans la fonction C l'appel à cette requête, juste pour tester le résultat du CREATE FUNCTION dans ce cas de figure?
|
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() |
En fait ma fonction 'C' fait appel à une fonction d'initialisation qui fait différentes requêtes dans la BD. Je suppose que si je l'enlève, ça devrait créer la fonction, je vais quand même tester...
En fait, je crois surtout que le problème vient du fait que quand je charge ma librairie dynamique .so, il exécute une initialisation (je sais pas pourquoi) qui exécute les requêtes... Admettons, mais ce qui me surprend un peu, c'est que ça passe sans problème en version 7.4 ![]() Je vous tiens au courant. Merci pour votre aide en tout cas |
|
|
00
|
|
|
#9 |
![]() ![]() Inscription : octobre 2008 Messages : 1 708 ![]() |
A voir aussi s'il n'y a rien de particulier sur le type de retour __vals
de la fonction. Est-ce que c'est un type avec des fonctions d'input et d'output en C? |
|
|
00
|
|
|
#10 |
![]() ![]() Inscription : octobre 2008 Messages : 1 708 ![]() |
Est-ce que cette initialisation se produit dans la fonction _PG_init() ?
Cette fonction est appelée automatiquement dès le chargement du fichier .so, mais à partir de la version 8.2 seulement. Ca expliquerait cette différence de comportement entre 7.4 et 8.4. |
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() |
Bingo
Merci pour l'info! Je vais voir comment je peux arranger ça, mais c'est évident que c'est ça le problème! Merci!
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com