2012-04-09 58 views
8

Me gustaría utilizar la función COPY en PostgreSQL para importar un archivo CSV en una base de datos PostgreSQL.Función COPY en PostgreSQL

Donde dice el nombre del archivo en el documentation, el archivo CSV debe almacenarse en una ubicación específica o puede almacenarse en cualquier ubicación.

Por ejemplo, copy data_table from '/tmp/outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';. Donde dice tmp, significa eso la carpeta tmp en la unidad C :. ¿Se puede cambiar a otro nombre de carpeta?

Respuesta

15

Parece que usted está confundido con Linux vs notación file-path de Windows. Lo que tienes allí es una ruta de Linux anclada a la raíz. Windows usa letras de unidad, que puede especificar igual de bien cuando se ejecuta en Windows.

Si utiliza la notación de Windows, tener cuidado de que usted tiene que barras invertidas de escape si no está utilizando standard_conforming_strings = on - que es el valor por defecto en la última versión 9.1 pero no en las versiones anteriores. De esta manera:

COPY data_table from E'C:\\tmp\\outputdata.csv' WITH ... 

Funciona en cualquier caso.
Con standard_conforming_strings = on también se podría escribir:

COPY data_table from 'C:\tmp\outputdata.csv' WITH ... 

Tenga en cuenta que un servidor PostgreSQL Windows también entiende la notación de ruta predeterminada con barras en lugar de barras invertidas.

Para SQL COPY FROM/TO puede utilizar cualquier ruta que el propietario del proceso del servidor (postgres de forma predeterminada) tenga permiso para leer/escribir.

Tenga en cuenta que para el comando meta \copy del cliente psql se aplican los permisos del usuario local actual.

+0

Gracias por la explicación. – Jeiman

+0

No use el comando COPY con pgAdmin en una máquina con Windows e intente leer un archivo desde su entorno local de Windows. Esto fallará Puede importar un archivo csv de todos modos. Usa la GUI para hacer eso. Haga clic derecho en la tabla deseada y elija la importación ... – R13e

5

Sí, por supuesto puede especificar cualquier ubicación donde tenga acceso de lectura. No hay problema para cambiar la ruta del archivo.

mantener la atención sólo en el hecho de que en las ventanas que tiene que escapar de la barra invertida de esta manera:

copy data_table from 'c:\\Temp\\outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';