web-dev-qa-db-fra.com

Autorisation refusée lors d'une tentative d'importation d'un fichier CSV à partir de PGAdmin

J'utilise PGAdmin 1.14.3.

Lorsque j'essaie d'exécuter une commande d'importation:

COPY grad(country_code, postal_code, place_name, admin_name1, admin_code1, admin_name2, admin_code2, admin_name3, admin_code3, latitude, longitude, accuracy)
FROM 'C:\\Users\\denis\\Desktop\\BP2Project\\USA\\US.txt';

J'ai un 

ERREUR: impossible d'ouvrir le fichier "C:\Utilisateurs\denis\Bureau\BP2Project\USA\US.txt" pour lire: Autorisation refusée: état SQL: 42501

J'ai cherché d'autres similaires questions et aucune d'elles n'a résolu mon problème.

Je me suis connecté en tant qu'utilisateur "postgres" qui est le superutilisateur. Je ne vois pas pourquoi il me manque des autorisations. Je suis sous Windows 7.

27
Tool

L'utilisateur Postgres doit avoir un accès en lecture sur le fichier à partir duquel vous êtes sur le point de copier.

Regardez cet article pour voir comment modifier l’accès sécurisé des fichiers sous Windows.

8
Houari

L'article permissions mentionné dans la réponse de Houari et Flimzy est un bon matériau de référence, mais une réponse directe (la solution rapide que j'ai utilisée) est la suivante:

  • Cliquez avec le bouton droit de la souris sur le dossier contenant le ou les fichiers de données pour lesquels l'autorisation a été refusée, puis cliquez sur Propriétés.
  • Dans la fenêtre Propriétés du dossier, sélectionnez l'onglet Sécurité.
  • Cliquez sur le bouton Modifier.
  • Dans la fenêtre "Autorisations pour le dossier" qui s’est ouverte, cliquez sur le bouton Ajouter ....
  • Tapez Everyone dans la zone de texte "Entrez les noms des objets à sélectionner".
  • Cliquez OK et la fenêtre se fermera.
  • Vérifiez que les autorisations par défaut Read & Execute ont été définies sur Allow via la case à cocher de la fenêtre précédente.
  • Cliquez OK et la fenêtre se fermera.
  • Cliquez sur le bouton Appliquer dans la fenêtre Propriétés du dossier.

Vous pouvez maintenant exécuter l'instruction SQL COPY nécessaire pour accéder à ces fichiers.

  • Une fois cela fait, retournez à la fenêtre Propriétés du dossier.
  • Cliquez sur le bouton Modifier.
  • Sélectionnez l'entrée Everyone dans le champ "Noms de groupe ou d'utilisateur:".
  • Cliquez sur le bouton Supprimer
  • Cliquez sur OK dans les fenêtres restantes ouvertes.

Les autorisations ont maintenant été retournées à ce qu'elles étaient.

53
Kevin

Ok, c’est ainsi que la commande COPY a fonctionné, pour exporter une table au format CSV, étape par étape . Veuillez noter que j’utilise pgAdmin 111.

  1. Créez le dossier cible vers lequel vous souhaitez exporter une table. E.g C:\myExports
  2. Définissez une autorisation de lecture/écriture sur ce dossier en procédant comme suit:

Cliquez avec le bouton droit de la souris sur le dossier contenant le (s) fichier (s) de données pour lequel/lesquels l'autorisation a été refusée, puis cliquez sur Propriétés.

Dans la fenêtre Propriétés du dossier, sélectionnez l'onglet Sécurité . Cliquez sur le bouton Modifier.

Dans la fenêtre "Autorisations pour le dossier" qui s’est ouverte, cliquez sur le bouton Ajouter ... . Tapez Tout le monde dans la zone de texte "Entrez les noms des objets à sélectionner".

Cliquez sur OK et la fenêtre se fermera . Vérifiez que les autorisations par défaut Lecture et exécution ont été définies sur Autoriser via la case à cocher> Cochez dans la fenêtre précédente . Cliquez sur OK et la fenêtre se fermera.

Cliquez sur le bouton Appliquer dans la fenêtre Propriétés du dossier.

  1. Dans ce dossier, créez un fichier CSV vierge portant le nom de votre choix. Par exemple, employee.csv.

  2. Puis lancez la commande Copier comme ceci: 

    copier un employé dans le séparateur 'C:\myExports\employee.csv', 'csv;

employé est le nom de la table dans cet exemple.

J'espère que cela t'aides.

7
folorunso joseph

Si vous ne souhaitez pas accorder d'autorisations à tout le monde, vous pouvez ajouter des autorisations au compte qui a démarré le service. Dans le Panneau de configuration - Outils d’administration - Services, copiez le nom du compte dans l’onglet 'Connexion'. (Sur mon système, le compte s'appelle 'Service réseau'.) Ensuite, partagez le dossier avec le fichier CSV avec cet utilisateur, comme indiqué dans la réponse ci-dessus.

2
Jonas B

Les réponses à ce problème sur différents threads ressemblent à ceci 1. "Dis-moi exactement quelle commande tu as utilisée" 2. "Assurez-vous que vous disposez des autorisations adéquates" 3. "Juste utiliser/copier"

Je viens d'essayer de donner des autorisations à Tout le monde sur le fichier CVS que je tente de copier, et il me donne toujours l'erreur d'autorisation refusée. Je pense que cette fonctionnalité est cassée et a été cassée pour plusieurs versions consécutives sur plusieurs versions consécutives de Windows.

0
Alex

pour moi, et je viens de passer de longues heures sur cette . J'ai une base de données centrale résidant sur une boîte HP fonctionnant sous 14.04 postgresql-9.5 pgAdmin3 postgis-2.2, les actions sont réalisées via une action Samba tweeked. Mes clients utilisent un mélange de Windows 10.1, 7, 8.1 et j'ai un bureau Ubuntu 14.04.

Je travaille avec des tables volumineuses mettant à jour des enregistrements et normalisant des données. J'ai également construit des routines autour des instructions de copie SQL à partir de fichiers CSV, créées à partir du fichier COPY public.table_1 TO (le dossier de partage que j'avais configuré dans Samba https: //www.youtube.com/watch?v=ndAYZ0DJ-U4 ) '/srv/samba/share/[filename].csv'

Je peux ensuite mettre à jour la base de données une fois que les tables ont été modifiées à l'aide de COPY table_1 dans '/srv/samba/share/test.csv' USING DELIMITERS ',' WITH NULL AS '' CSV HEADER; de l'un de mes clients.

La clé, pour autant que j'ai pu déterminer, est que les clients effectuant la mise à jour doivent être des super-utilisateurs, tout doit également être lié au nombre d'utilisateurs, car 4 serveurs fonctionnent ensemble ici, Postgresql, Samba, UNIX et WINS de mes utilisateurs sont enregistrés sur chacun des serveurs avec le même nom d'utilisateur et mot de passe homogénéité est le facteur principal. 

J'avais essayé pendant longtemps de déplacer et d'essayer diverses conventions de nommage, mais c'était finalement http://www.postgresql.org/message-id/CFF47E56EA077241B1FFF390344B5FC10ACB1C0C@webmail.begavalley.nsw.gov.au Cela m’a arrangé c’était comme un gros déclic. Les 777 sur vos actions et la gestion de groupe ont été une courbe d’apprentissage importante, mais, les heures que j’ai consacrées à cela rapporteront des fruits sur toute la ligne ... Aimant Ubuntu, aimant la vie et aimer l'esprit de l'open source mais cela pourrait bien être la privation de sommeil qui entre en jeu ... CELA FONCTIONNE

0
Terry