PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 30/06/2017 13:36:08

databaser
Membre

Permission denied

Bonjour,

J'importe une table dans PGS via la commande COPY FROM :

COPY BD.CP FROM 'C:\Users\NOMUSER\Desktop\MONDOSSIER\Fichier.csv' with delimiter ';';

Message d'erreur :
pour une lecture : Permission denied
SQL state: 42501

Or, dans les propriétés du dossier, ou même du fichier, NOMUSER est bien dans les personnes autorisées. Donc, où est le souci ??

Pour info, j'ai un Windows 10, et c'est la 1ère fois que je fais un import après l'installation de PGAdmin 4

Merci,

Hors ligne

#2 30/06/2017 15:04:16

superette
Membre

Re : Permission denied

Bonjour,

Il faut aussi que l'utilisateur PostgreSQL qui réalise la commande copy ai les droits suffisants sur la table dans laquelle les données sont importées, dans votre exemple BD.CP

Vous pouvez vérifier les droits et les privilèges avec les méta commandes \dp (describe privilege) et \du (describe users)

Hors ligne

#3 21/04/2018 21:09:02

databaser
Membre

Re : Permission denied

Bonjour,

J'ajoute ma question ici car j'ai un nouveau souci (mais je ne suis pas sur le même PC ni la même table). Admin 4 et PGS 10.
1/
J'utilise COPY FROM et je sais que ma syntaxe est correcte. Mais voici la réponse !! :

 HINT:  COPY TO indique au serveur PostgreSQL de lire un fichier. Vous pourriez vouloir utiliser la fonctionnalité \copy de psql pour lire en local.
SQL state: 42501 

L'owner de la BD est postgres donc j'ai le privilège d'accès. Néanmoins, si je tente de vérifier avec :

2/
J'utilise

\dp

Réponse !! ::

 ERROR:  ERREUR:  erreur de syntaxe sur ou près de « \ »
LINE 1: \dp
        ^
SQL state: 42601
Character: 1 

3/ème point noir : j'enregistre l'onglet SQL de PGS en fichier de type SQL. Il est bien créé dans mon dossier de destination. Par contre, il n'a pas d'extension .SQL, c'est un "fichier" (?). Si je regarde dans les propriétés de ce "fichier", il est indiqué "fichier" dans type de document....

Que se passe-t-il svp ? Est-ce normal ? Merci...

Dernière modification par databaser (21/04/2018 21:37:09)

Hors ligne

#4 21/04/2018 22:36:47

rjuju
Administrateur

Re : Permission denied

Bonjour,

1.  Il manque le message d'erreur

2. \dp est une commande pour psql, pas pgadmin

3.  pgadmin a probablement pour philosohpie de vous laisser le choix de l'extension à utiliser.  Des gens utilisent .sql, d'autres .ddl etc.  Je suppose que c'est à vous d'utiliser excplitement .sql.  Pour le reste, il s'agit du comportement de windows pour un fichier sans extension.

Hors ligne

#5 21/04/2018 22:42:54

databaser
Membre

Re : Permission denied

1/Voici le message en entier :

ERROR:  ERREUR:  n'a pas pu ouvrir le fichier « C:\Users\NOMUSER\Desktop\MONDOSSIER\Fichier.csv »  pour une lecture : Permission denied
HINT:  COPY TO indique au serveur PostgreSQL de lire un fichier. Vous pourriez vouloir utiliser la fonctionnalité \copy de psql pour lire en local.


SQL state: 42501

(j'ai juste remplacé mon chemin par des mots généraux pour le forum)

Pour le 3/ je viens de trouver : lors de l'enregistrement, il faut directement écrire : nomfichier.sql
Merci,

Dernière modification par databaser (21/04/2018 22:44:27)

Hors ligne

#6 21/04/2018 23:24:15

rjuju
Administrateur

Re : Permission denied

Il s'agit bien d'un problème de droit.  postgres est exécuté en tant qu'un utilisateur spécifique (à voir comment le service windows est démarré), et il faut autoriser cet utilisateur à accéder au fichier qui est présent dans une aborescence qui vous est à priori réservée.  Le plus simple est probablement de déposer le fichier dans un répertoire où n'importe quel utilisateur à accès.


Au passage, je précise que la commande COPY est effectuée sur le serveur.  Si l'instance postgres n'est pas en local, il vous faudra déposer le fichier sur le serveur et non sur votre propre poste.

Hors ligne

#7 21/04/2018 23:55:49

databaser
Membre

Re : Permission denied

merci, je ne comprends pas grand chose...

"service windows" --> càd ? De quel service s'agit-il ?
Comment aurais-je pu créer un utilisateur spécifique ? A quel endroit ?

Est-ce que cela peut être causée lors de la création de la BD ? Car on choisit certaines options (tablespace, etc)

" commande COPY est effectuée sur le serveur." --> je n'ai pas de serveur. En fait, la BD pour l'instant je la crée sur mon PC.

Dans les propriétés de PGS 10 dans pgAdmin4 : Host Name/Address : localhost

Merci...

Dernière modification par databaser (21/04/2018 23:59:22)

Hors ligne

#8 22/04/2018 13:15:30

rjuju
Administrateur

Re : Permission denied

Quand vous avez installé postgres, un utilisateur a probablement été créé (ou alors un utilisateur spécial a été utilisé), et un service windows (https://fr.wikipedia.org/wiki/Service_(Windows) ) a été enregistré.  La configuration du service, changement de l'utilisateur etc est propre à windows.  Vous devriez pouvoir trouver de la documentation sur le sujet, je ne suis pas du tout connaisseur personnellement.



Même si vous n'avez pas de serveur à proprement parler, vous vous connectez quand même à un serveur postgres, et c'est ce serveur (machine et utllsateur démarrant postgres) qui effectue le travail.  Le fait qu'il soit en local ne change pas cela.

Hors ligne

#9 22/04/2018 20:11:10

databaser
Membre

Re : Permission denied

Merci Julien. Si quelqu'un d'autre s'y connait, je serai reconnaissante d'avoir des retours smile
Je reviens sur certains détails des messages ci-dessus pour tenter de comprendre le problème puisque je regarde cette histoire de service windows mais je vois mal où chercher car via panneau de configuration ou gestionnaire des tâches : rien.

si j'ai bien compris, vous voulez dire que ce n'est pas PGS qui pose problème mais windows qui empêche l'accès à ses fichiers à l'utilisateur postgres, c'est bien cela ?

"Quand vous avez installé postgres, un utilisateur a probablement été créé (ou alors un utilisateur spécial a été utilisé)" --> oui, à l'installation, c'est l'utilisateur nommé postgres qui est créé. Pourquoi un autre utilisateur serait-il créé ?

PS : j'avais installé PGS9 l'an dernier, et parce que j'avais perdu le nom d'utilisateur (!!)de PGS pour connecter un autre logiciel à PGS, j'avais désinstallé PGS puis réinstallé à plusieurs reprises! Du coup, j'ai PGS 9.6 qui reste dans mon pgAdmin4 et PGS 10.
Merci

Hors ligne

#10 22/04/2018 20:22:59

rjuju
Administrateur

Re : Permission denied

si j'ai bien compris, vous voulez dire que ce n'est pas PGS qui pose problème mais windows qui empêche l'accès à ses fichiers à l'utilisateur postgres, c'est bien cela ?


Oui, vous avez accès à ce fichier, mais postgres n'y a pas accès.  Comme dit précédemment, il faut donner ce droit à l'utilisateur démarrant la base de données, ou déplacer le fichier à un endroit accessible à tout le monde.

oui, à l'installation, c'est l'utilisateur nommé postgres qui est créé. Pourquoi un autre utilisateur serait-il créé ?

Parlez-vous d'utilisateur windows ou de rôle sur la base de données ?  J'ai le vague souvenir que l'installeur windows fournit par enterprisedb a été modifié il y a quelques années pour ne plus créer un utilisateur windows nommé postgres, pour utiliser à la place un utilisateur spécial windows préexistant.  Dans tous les cas, vous aurez la réponse en cherchant la liste des services windows et en configurant le service postgres.

Hors ligne

#11 23/04/2018 16:39:38

databaser
Membre

Re : Permission denied

j'ouvre pgAdmin4. Dans le Gestionnaire des tâches, onglet 'Services', il y a un "postgresql-x64-10", colonne 'Description' = 'postgresql-64-10 - PostgreSQL Server 10".

c'est ce dont vous parlez ? Son statut est en "Arrêté" mais si on clique "Ouvrir les services", on retrouve le même et 'Type de démarrage' = automatique.

Donc, où est le problème ? Merci...

Qu'est-ce que l'on doit modifier pour donner l'autorisation à l'utilisateur ?

Dans le manuel de PGS 10, il n'y a aucune indication, sauf erreur de ma part.

Dernière modification par databaser (23/04/2018 16:43:05)

Hors ligne

#12 23/04/2018 18:27:52

rjuju
Administrateur

Re : Permission denied

Je me suis peut être mal exprimé.  Il faut donner des autorisations sur le fichier cible (ainsi que probablement toute l’arborescence pour y accéder) à l'utilisateur démarrant postgres.  Comme je n'ai aucune idée de qui est cet utilisateur, vu que ça dépend de comment a été installé postgres et ce que fait l'installeur, il faut trouver qui est cet utilisateur, et on le sait on cherchant dans le service associé.


Pour la liste des actions exactes à faire, je n'en sais rien car je n'utilise pas windows.  À moins que quelqu'un ici s'y connaisse, vous auriez plus vite fait de chercher de la documentation ou de l'aide spécifique pour ces actions sous windows.

Hors ligne

#13 27/04/2018 23:00:36

databaser
Membre

Re : Permission denied

merci @rjuju!! smile

Dernière modification par databaser (27/04/2018 23:01:29)

Hors ligne

Pied de page des forums