Erreur Postgres: impossible d'ouvrir le fichier en lecture: Autorisation refusée

Ordinateur: Mac OS X, version 10.8 Base De Données: Postgres

Essayer d'importer un fichier csv dans 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

Puis j'ai essayé

$> chown postgres /users/darchcruise/desktop/items_ordered.csv
chown: /users/darchcruise/desktop/items_ordered.csv: Operation not permitted

Enfin, j'ai essayé

$> ls -l
-rw-r--r--  1 darchcruise  staff      1016 Oct 18 21:04 items_ordered.csv

Toute aide est très appréciée!

34
demandé sur Basilevs 2013-10-19 10:20:10

8 réponses

chmod a+rX /users/darchcruise/ /users/darchcruise/desktop /users/darchcruise/desktop/items_ordered.csv

Cela modifiera les droits d'accès pour votre dossier. Notez que tout le monde sera en mesure de lire votre fichier. Vous ne pouvez pas utiliser chown en tant qu'utilisateur sans droits d'administration. Également envisager d'apprendre umask pour faciliter la création de fichiers partagés.

12
répondu Basilevs 2013-10-19 06:43:50

En supposant l'outil de ligne de commande psql, Vous pouvez utiliser \copy au lieu de copy.

\copy ouvre le fichier et alimente le contenu sur le serveur, alors que copy indique au serveur d'ouvrir le fichier lui-même et de le lire, ce qui peut être problématique en termes d'autorisation, voire impossible si le client et le serveur fonctionnent sur des machines différentes sans partage de fichiers entre les deux.

Sous le capot, \copy est mis en œuvre comme COPY FROM stdin et accepte les mêmes options que le côté serveur COPY.

94
répondu Daniel Vérité 2013-10-19 13:31:38

Copiez le fichier CSV dans /tmp

Pour moi, cela a résolu le problème.

40
répondu user637338 2016-05-02 17:06:16

J'ai eu le problème lorsque j'essayais d'exporter des données d'un serveur distant vers le disque local. Je n'avais pas réalisé que SQL copy est réellement exécuté sur le serveur et qu'il essaie d'écrire dans un dossier serveur. Au lieu de cela, la bonne chose à faire était d'utiliser \copy qui est la commande psql et il écrit dans le système de fichiers local comme je m'y attendais. http://www.postgresql.org/message-id/CAFjNrYsE4Za_KWzmfgN1_-MG7GTw_vpMRxPk=OEjAiLqLskxdA@mail.gmail.com

Peut-être que cela pourrait être utile pour quelqu'un d'autre aussi.

5
répondu nikola 2015-12-14 11:50:12

Une Autre façon de le faire, si vous avez pgAdmin et sont à l'aise avec l'interface graphique est d'aller à la table dans le schéma de droite et de cliquer sur la table que vous souhaitez importer le fichier et sélectionnez "Importer" parcourir votre ordinateur pour le fichier, sélectionnez le type de votre fichier, les colonnes que vous voulez que les données soient imputées dans, puis sélectionnez importer.

Cela a été fait en utilisant pgAdmin III et la version 9.4 de PostgreSQL

2
répondu Jeff Spicoli 2015-07-22 16:42:10

Copiez votre fichier CSV dans le dossier /tmp

Les fichiers nommés dans une commande COPY sont lus ou écrits directement par le serveur, et non par l'application cliente. Par conséquent, ils doivent résider sur OU être accessibles à la machine du serveur de base de données, pas au client. Ils doivent être accessibles et lisibles ou inscriptibles par L'utilisateur PostgreSQL (L'ID utilisateur sous lequel le serveur s'exécute), pas par le client. Copier nommer un fichier n'est autorisé qu'aux superutilisateurs de base de données, car il permet de lire ou d'écrire n'importe quel fichier que le serveur a des privilèges d'accès.

2
répondu Antonio 2017-09-28 20:18:55

Pour moi, il a simplement fonctionné pour ajouter sudo (ou exécuter en tant que root) pour la commande chown:

Sudo chown postgres / users/darchcruise/desktop / items_ordered.csv

1
répondu annakeuchenius 2017-03-03 11:36:35

Peut-être que vous utilisez pgadmin en connectant l'hôte distant, puis vous essayez de le mettre à jour à partir de votre système, mais il recherche ce fichier dans le système de fichiers du système distant... c'est l'erreur que j'ai rencontrée peut être aussi pour u check it

-3
répondu raj 2014-03-22 09:48:45