77 votes

postgreSQL - psql \i : comment exécuter script dans un chemin donné

Je suis nouveau dans le domaine de PostgreSQL et j'ai une question simple :

J'essaie de créer un simple script qui crée un DB afin que je puisse l'appeler plus tard comme ceci :

psql -f createDB.sql

Je veux que le script appelle d'autres scripts (des scripts distincts pour la création de tables, l'ajout de contraintes, de fonctions etc), comme ceci :

\i script1.sql
\i script2.sql

Cela fonctionne bien à condition que createDB.sql soit dans le même répertoire.

Mais si je déplace script2 dans un répertoire sous celui de createDB, et que je modifie le createDB pour qu'il ressemble à ceci :

\i script1.sql
\i somedir\script2.sql

J'ai une erreur :

psql:createDB.sql:2: somedir: Permission denied

J'utilise Postgres Plus 8.3 pour Windows, utilisateur postgres par défaut.

EDIT : je suis bête, les slashs unix résolvent le problème.

103voto

Steve K Points 10475

Postgres a démarré sous Linux/Unix. Je pense que l'inversion de la barre oblique peut régler le problème.

\i somedir/script2.sql

Si vous avez besoin de qualifier complètement quelque chose

\i c:/somedir/script2.sql

Si cela ne résout pas le problème, je pense que vous devez échapper la barre oblique inversée.

\i somedir\\script2.sql

6voto

Grant Johnson Points 968

Avez-vous essayé d'utiliser des barres obliques de style Unix (/ au lieu de \) ?

\ est souvent un caractère d'échappement ou de commande, et peut être la source de confusion. Je n'ai jamais eu de problèmes avec cela, mais je n'ai pas non plus Windows, donc je ne peux pas le tester.

De plus, les permissions peuvent être basées sur l'utilisateur qui exécute psql, ou peut-être l'utilisateur qui exécute le service postmaster, vérifiez que tous deux ont accès en lecture à ce fichier dans ce répertoire.

3voto

phipex Points 156

Essayez ceci, je travaille moi-même pour le faire

\i 'somedir\\script2.sql'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X