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!
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.
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
.
Copiez le fichier CSV dans /tmp
Pour moi, cela a résolu le problème.
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.
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
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.
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
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