Ne peut pas accéder à un fichier “$libdir/plpgsql”: Aucun fichier ou répertoire
Je suis à une perte, je vais avoir des problèmes de la création d'une procédure stockée dans mon local serveur Postgres (postgres.app, Mac OS X 10.7), ainsi
$ psql
psql (9.3.0)
Type "help" for help.
dchaston=# CREATE OR REPLACE FUNCTION table_update()
dchaston-# RETURNS TRIGGER AS $$
dchaston$# BEGIN
dchaston$# NEW.last_edit = now();
dchaston$# RETURN NEW;
dchaston$# END;
dchaston$# $$ language 'plpgsql';
ERROR: could not access file "$libdir/plpgsql": No such file or directory
J'ai vérifié les éléments suivants:
Langues installées:
dchaston=# select * from pg_language;
lanname | lanowner | lanispl | lanpltrusted | lanplcallfoid | laninline | lanvalidator | lanacl
---------+----------+---------+--------------+---------------+-----------+--------------+--------
internal | 10 | f | f | 0 | 0 | 2246 |
c | 10 | f | f | 0 | 0 | 2247 |
sql | 10 | f | t | 0 | 0 | 2248 |
plpgsql | 10 | t | t | 12019 | 12020 | 12021 |
(4 rows)
lib (et pkglibdir juste au cas où):
$ pg_config --libdir
/Applications/Postgres.app/Contents/MacOS/lib
$ pg_config --pkglibdir
/Applications/Postgres.app/Contents/MacOS/lib
Fichier présent:
$ cd /Applications/Postgres.app/Contents/MacOS/lib; ls plpg*
plpgsql.so
DLSUFFIX définir correctement:
lib/pgxs/src/Makefile.shlib:135: DLSUFFIX = .so
Ont essayé de désinstaller et de réinstaller, mais il ne fait aucune différence. Des idées?
OriginalL'auteur CaffeinatedDave | 2013-12-29
Vous devez vous connecter pour publier un commentaire.
Avez-vous installé plusieurs instances (plusieurs versions ou plusieurs instances de la même version) de Postgres sur la même case? Standard Postgres n'est pas adapté pour cela. Debian ou Ubuntu ont infrastructures supplémentaires pour permettre à plusieurs versions en parallèle. Je ne sais pas sur OS X, mais.
Dans la norme Postgres la chemin pour
$libdir
est compilé dans le programme. Plusieurs versions de ne pas obtenir le long.Lorsque vous exécutez
pg_config --pkglibdir
, assurez-vous qu'il est celui associé à votre installation. Exécuter:Mineur notes:
9.3.0
? Il est recommandé de toujours mettre à jour à la dernier point, libération, qui est 9.3.2 de l'atm. Peut-être une source de courant résout votre problème.Également vérifier votre configuration si vous utilisez le
$libdir
- vous que vous utilisezNe jamais citer le nom de la langue
. C'est un identificateur:'plpgsql'
plpgsql
.Et utiliser le plpgsql opérateur d'affectation :=. = est sans-papiers, mais toléré atm.Depuis Postgres 9.4
:=
et=
sont documentées.Sinon, votre définition de la fonction est fine. C'est pas la racine du problème:
OriginalL'auteur Erwin Brandstetter
J'utilise FreeBSD et a trouvé un moyen simple de résoudre le problème, il suffit de copié la bibliothèque à partir d'un autre serveur et collé dans le répertoire /usr/local/lib/postgresql/, qui est la façon dont $libdir. Bien que les versions de PostgreSQL sont différents, tout fonctionne et je n'ai eu aucun problème à nouveau.
OriginalL'auteur Bsantos