texto - roles en postgresql
ERROR de Postgres: no se pudo abrir el archivo para leer: Permiso denegado (8)
Computadora: Mac OS X, versión 10.8 Base de datos: Postgres
Intentando importar archivos csv a postgres.
pg> copy items_ordered from ''/users/darchcruise/desktop/items_ordered.csv'' with CSV;
ERROR: could not open file "/users/darchcruise/desktop/items_ordered.csv" for reading: Permission denied
Entonces probé
$> chown postgres /users/darchcruise/desktop/items_ordered.csv
chown: /users/darchcruise/desktop/items_ordered.csv: Operation not permitted
Por último, probé
$> ls -l
-rw-r--r-- 1 darchcruise staff 1016 Oct 18 21:04 items_ordered.csv
¡Cualquier ayuda es muy apreciada!
Asumiendo la herramienta de línea de comandos psql
, puede usar /copy
lugar de copy
.
/copy
abre el archivo y alimenta el contenido al servidor, mientras que copy
le dice al servidor que abra el archivo y lo lea, lo que puede ser problemático en términos de permisos, o incluso imposible si el cliente y el servidor se ejecutan en diferentes máquinas sin compartir archivos entre.
Bajo el capó, /copy
se implementa como COPY FROM stdin
y acepta las mismas opciones que COPY
lado del servidor.
Copie el archivo CSV a / tmp
Para mí, esto resolvió el problema.
Otra forma de hacerlo, si tiene pgAdmin y se siente cómodo con la GUI, es ir a la tabla en el esquema y hacer clic derecho sobre la tabla en la que desea importar el archivo y seleccionar "Importar" para buscar el archivo, seleccionar el tipo de su archivo, las columnas en las que desea imputar los datos, y luego seleccione importar.
Eso fue hecho usando pgAdmin III y la versión 9.4 de PostgreSQL
Para mí, funcionó simplemente agregar sudo (o ejecutar como raíz) para el comando chown:
sudo chown postgres /users/darchcruise/desktop/items_ordered.csv
Puede ser que esté utilizando pgadmin conectando el host remoto y luego U intenta actualizar desde su sistema, pero busca ese archivo en el sistema de archivos del sistema remoto ... es el error al que me enfrenté. Puede ser también que lo compruebes.
Tuve el problema cuando estaba tratando de exportar datos desde un servidor remoto al disco local. No me había dado cuenta de que la copy
SQL en realidad se ejecuta en el servidor y que intenta escribir en una carpeta del servidor. En su lugar, lo correcto era usar /copy
que es el comando psql y escribe en el sistema de archivos local como esperaba. http://www.postgresql.org/message-id/CAFjNrYsE4Za_KWzmfgN1_-MG7GTw_vpMRxPk=OEjAiLqLskxdA@mail.gmail.com
Quizás eso también podría serle útil a alguien más.
Copie su archivo CSV en la carpeta / tmp
Los archivos nombrados en un comando COPY son leídos o escritos directamente por el servidor, no por la aplicación cliente. Por lo tanto, deben residir o ser accesibles a la máquina del servidor de la base de datos, no al cliente. Deben ser accesibles y legibles o escribibles por el usuario de PostgreSQL (la identificación de usuario con la que se ejecuta el servidor), no el cliente. COPY nombrar un archivo solo se permite a los superusuarios de la base de datos, ya que permite leer o escribir cualquier archivo al que el servidor tenga privilegios de acceso.
chmod a+rX /users/darchcruise/ /users/darchcruise/desktop /users/darchcruise/desktop/items_ordered.csv
Esto cambiará los derechos de acceso para su carpeta. Tenga en cuenta que todos podrán leer su archivo. No puede usar chown como usuario sin derechos administrativos. También considere aprender umask para facilitar la creación de archivos compartidos.