sql >> Base de Datos >  >> RDS >> PostgreSQL

Importación de PostgreSQL CSV desde la línea de comando

La solución en la respuesta aceptada solo funcionará en el servidor y cuando el usuario ejecute la consulta tendrá permisos para leer el archivo como se explica en esta respuesta SO.

De lo contrario, un enfoque más flexible es reemplazar el COPY de SQL comando con psql El "meta-comando" llamado \copy que toma todas las mismas opciones que la COPIA "real", pero se ejecuta dentro del cliente (sin necesidad de ; al final):

psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv"

Según los documentos, \copy comando:

Realiza una copia de frontend (cliente). Esta es una operación que ejecuta un comando SQL COPY, pero en lugar de que el servidor lea o escriba el archivo especificado, psql lee o escribe el archivo y enruta los datos entre el servidor y el sistema de archivos local. Esto significa que la accesibilidad y los privilegios de los archivos son los del usuario local, no los del servidor, y no se requieren privilegios de superusuario de SQL.

Además, si el the_file.csv contiene el encabezado en la primera línea, se puede reconocer agregando header al final del comando anterior:

psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv header"