2008-09-24 13 views
70

Soy nuevo a PostgreSQL y tengo una pregunta simple:PostgreSQL - psql i: la forma de ejecutar secuencias de comandos en un camino dado

Estoy intentando crear un simple script que crea una base de datos de modo que pueda más tarde llamaría así:

psql -f createDB.sql 

Quiero la secuencia de comandos para llamar a otras secuencias de comandos (separados para la creación de tablas, añadir restricciones, funciones, etc.), así:

\i script1.sql 
\i script2.sql 

funciona bien siempre y cuando creado B.sql está en el mismo dir.

Pero si muevo SCRIPT2 a un directorio bajo el que tiene createDB, y modificar el createDB por lo que se parece a esto:

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

consigo un error:

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

estoy usando Postgres Plus 8.3 para Windows, usuario postgres predeterminado.

EDIT:

Me tonto, UNIX barras resuelto el problema.

Respuesta

91

Postgres iniciado en Linux/Unix. Sospecho que revertir la barra con arreglarlo.

\i somedir/script2.sql 

Si tiene que calificar totalmente algo

\i c:/somedir/script2.sql 

Si eso no soluciona el problema, mi siguiente conjetura sería que necesita para escapar de la barra invertida.

\i somedir\\script2.sql 
+4

Revertir las barras era suficiente, no se necesitaban escapes. –

+2

Cabe destacar que las barras diagonales son perfectamente válidas en Windows y son compatibles de forma nativa. Por lo tanto, puede usar barras diagonales casi en todas partes en Windows (con la excepción de aplicaciones mal escritas). Dado que la barra diagonal inversa se utiliza a menudo como un carácter de escape, su comportamiento será inconsistente entre aplicaciones e incluso usos dentro de una sola aplicación. – Kat

6

¿Ha intentado utilizar barras de estilo Unix (/ en lugar de \)?

\ a menudo es un carácter de escape o comando, y puede ser la fuente de confusión. Nunca he tenido problemas con esto, pero tampoco tengo Windows, así que no puedo probarlo.

Además, los permisos pueden estar basados ​​en el usuario que ejecuta psql, o tal vez el usuario que está ejecutando el servicio postmaster, verifica que ambos hayan leído ese archivo en ese directorio.

3

probar esto, yo trabajo a mí mismo para hacerlo

\i 'somedir\\script2.sql' 
0

Yo probé esto y su trabajo en la máquina de Windows para ejecutar un archivo sql en un esquema específico.

psql -h localhost -p 5432 -U username -d databasename -v schema=schemaname < e:\Table.sql

Cuestiones relacionadas