¿Cómo importar archivos * .sql existentes en PostgreSQL 8.4?

105

Estoy usando PostgreSQL 8.4 y tengo algunos archivos * .sql para importar a una base de datos. ¿Como lo puedo hacer?

Badr
fuente

Respuestas:

142

Desde la línea de comando:

psql -f 1.sql
psql -f 2.sql

Desde el psqlmensaje:

\i 1.sql
\i 2.sql

Tenga en cuenta que es posible que deba importar los archivos en un orden específico (por ejemplo: definición de datos antes de la manipulación de datos). Si tiene bashshell (GNU / Linux, Mac OS X, Cygwin) y los archivos se pueden importar en orden alfabético , puede usar este comando:

for f in *.sql ; do psql -f $f ; done

Aquí está la documentación de la psqlaplicación (gracias, Frank): http://www.postgresql.org/docs/current/static/app-psql.html

Bolo
fuente
@moon ¿Quizás no tiene derechos de acceso a los archivos SQL? ¿En qué sistema operativo estás
Bolo
@moon Es la contraseña asociada con su usuario de PostgreSQL (el par de usuario y contraseña se almacena en PostgreSQL).
Bolo
8
@moon Te sugiero que dividas tu problema en tres etapas: 1) asegúrate de que puedes empezar a psqlcorrer. 2) asegurarse de que su usuario tiene los privilegios de escritura necesarias, tales como: CREATE, INSERT, UPDATE, etc. 3) importar los archivos SQL. Por lo que tengo entendido, ahora estás en la etapa 1.
Bolo
@Bolo: ¿Pondría las tres etapas en la respuesta?
AH
@Bolo, como mencionaste, ahora estoy en los terceros pasos. pero ¿cómo puedo importar el archivo .sql desde mi máquina local? Intenté \ i [ruta completa con extensión] pero aparece el mensaje de error .sql no existe tal archivo o directorio. ¿Podría dar un ejemplo?
75

en la línea de comandos, primero llegue al directorio donde está presente psql y luego escriba comandos como este:

psql [database name] [username]

y luego presione enter. psql solicita la contraseña proporcione la contraseña del usuario:

a continuación, escribir

> \i [full path and file name with extension]

luego presione enter inserción hecha.

Badr
fuente
Yo también uso esto. Y funciona. Pero cambio las declaraciones SQL proporcionadas. Anteriormente, el * .sql existente no usaba ningún carácter; como la terminación de una línea. Y también debo quitar el GO. ¿Crees que el script sql no es un script psql?
swdev
Traté de usar \ i [ruta completa con extensión] pero aparece el mensaje de error .sql no existe tal archivo o directorio. ¿Podría cargar un ejemplo? Gracias.
Si \ i dice que no existe tal archivo, entonces no encontró un archivo en esa posición. Es mejor proporcionar la URL absoluta. Para mí en Windows, esta línea de comandos funcionó: \ i /tmp/robert/test.sql, por supuesto, debe tener comandos SQL válidos en ese archivo.
shevy
36

Bueno, la forma más corta que conozco es la siguiente:

psql -U {user_name} -d {database_name} -f {file_path} -h {host_name}

nombre de la base de datos: qué base de datos debe insertar los datos de su archivo.

ruta de archivo: ruta absoluta al archivo a través del cual desea realizar la importación.

host_name: el nombre del host. Para fines de desarrollo, es principalmentelocalhost .

Al ingresar este comando en la consola, se le pedirá que ingrese su contraseña.

Arslan Ali
fuente
25

Tenga cuidado con "/" y "\". Incluso en Windows, el comando debe tener el siguiente formato:

\i c:/1.sql
sofiane
fuente
1

Siempre se prefiere usar un archivo de servicio de conexión (lookup / google 'archivo de servicio de conexión psql')

Entonces simplemente:

psql service={yourservicename} < {myfile.sql}

Donde yourservicenamees un nombre de sección del archivo de servicio.

Ted Rybicki
fuente