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

#1 04/11/2015 12:21:31

Using a network resource for a COPY FROM

Bonjour,
utilisant
Windows Server 2012 R2
Postgresql 9.5 Beta

J'essaie d'importer des données dans plusieurs tables depuis des fichiers CSV sur un autre serveur.
J'ai un fichier BAT qui lance psql avec un fichier de commandes contenant une serie d'instructions de type \i nomdefichier.sql.


Ce syntaxe fonctionne correctement :

Copy matable  from '\\Serveur9\Donnees\mesdonnees.txt'
  WITH CSV
     DELIMITER E'\t'
     QUOTE AS '"'
     NULL AS '' ;

Mais je dois écrire le chemin en dur dans chacun de mes scripts SQL.

Puisque, l'année prochaine,
je sais que je vais changer le serveur qui héberge les données CSV ,
(et que pendant un temps le serveur actuel et le nouveau serveur vont cohabiter,)
je me suis dit qu'il serait plus facile pour moi de créer un network ressource,
et ainsi, le moment venu de switcher les serveurs,
je n'aurais plus que redéfinir ce ressource.


Je fais donc
Nets use S: \\Serveur9\Donnees /persistent:yes
et j'ai un nouveau disque S: qui pointe vers la source de mes données CSV.
Parfait.

Mais le syntaxe

Copy matable  from 'S:\mesdonnees.txt'
  WITH CSV
     DELIMITER E'\t'
     QUOTE AS '"'
     NULL AS '' ;

ne fonctionne pas.

Voici le message d'erreur :
psql:C:/pgstuff/imprt_1.sql:97: ERREUR:  n'a pas pu ouvrir le fichier « S:\mesdonnees.txt » pour une lecture : No such file or directory


Mes questions :
Est-ce que ce fonctionnement est normal ? ( "By design" ?) dans la logique de l'interdiction des chemins relatifs avec COPY ? (Est-ce que un "disque réseau" est réellement relatif ?)
Ou est-ce que j'ai une faute syntaxe dans le style "escaped backslashes" ?
Ou est-ce que c'est un bug du 9.5 Beta ?
Ou encore autre chose ?

Merci d'avance,

Jason

Hors ligne

#2 04/11/2015 15:36:31

edlm
Membre

Re : Using a network resource for a COPY FROM

Bonjour,


si j'en crois la doc (voir paragraphe nom_fichier): Les utilisateurs Windows peuvent avoir besoin d'utiliser la syntaxe E'' et de doubler tous les antislashs utilisés dans le nom du chemin.


Essayez:

E'S:\\mesdonnees.txt'

Éric

Hors ligne

Pied de page des forums