Annonce
Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !
10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …
Retrouver nos membres bienfaiteurs
#1 Wed 22 February 2023 16:08
- Kiecane
- Participant actif
- Date d'inscription: 31 Oct 2021
- Messages: 91
copy insert into \N
Bonjour,
On m'a envoyé un dump .sql avec des données à insérer : chaque paragraphe de données à insérer commence par un COPY schema.table (champ1, champ2, ...) FROM stdin; suivi des données en question. Comme cela ne fonctionne pas lorsque je copie-colle ce type de paragraphe dans pgAdmin, j'utilise Excel pour les réécrire avec des INSERT INTO et rentrer ainsi les données dans les tables de ma bdd. Le seul problème, c'est que parfois les données à la suite du COPY... sont des \N (ce qui doit correspondre à des NULL je suppose) et, lors de l'insertion, cela bloque lorsque la taille du champ est de 1 ou lorsque son type n'est pas un alphanumérique... J'ai essayé de remplacer ces \N par du vide, par des null ou des NULL mais c'est toujours le même problème. Comment faire s'il-vous-plaît ?
Merci d'avance pour l'aide apportée.
Hors ligne
#2 Thu 23 February 2023 11:43
Re: copy insert into \N
Bonjour,
On m'a envoyé un dump .sql avec des données à insérer : chaque paragraphe de données à insérer commence par un COPY schema.table (champ1, champ2, ...) FROM stdin; suivi des données en question. Comme cela ne fonctionne pas lorsque je copie-colle ce type de paragraphe dans pgAdmin, j'utilise Excel pour les réécrire avec des INSERT INTO et rentrer ainsi les données dans les tables de ma bdd. Le seul problème, c'est que parfois les données à la suite du COPY... sont des \N (ce qui doit correspondre à des NULL je suppose) et, lors de l'insertion, cela bloque lorsque la taille du champ est de 1 ou lorsque son type n'est pas un alphanumérique... J'ai essayé de remplacer ces \N par du vide, par des null ou des NULL mais c'est toujours le même problème. Comment faire s'il-vous-plaît ?
Merci d'avance pour l'aide apportée.
Bonjour, je vous conseille vivement d'utiliser pg_restore ou psql pour executer ce dump. C'est fait pour ça. Réécrire un dump avec Excel.. ne faites pas ça.
Sinon, les \N sont des retours à la ligne.
Hors ligne
#3 Mon 27 February 2023 11:25
- Kiecane
- Participant actif
- Date d'inscription: 31 Oct 2021
- Messages: 91
Re: copy insert into \N
Merci pour votre réponse mais j'ai essayé et ça ne fonctionne pas (voici l'erreur que j'obtiens : pg_restore: [archiveur] version non support�e (1.14) dans le fichier d'en-t�te). Par ailleurs, j'aurais bien aimé savoir si quelqu'un pouvait m'apporter une solution concrète expliquant pourquoi le copié-collé des paragraphes COPY ne fonctionne pas et comment supprimer/changer les \N pour pouvoir réaliser les insertions des données dans ma base plus aisément. Je vous remercie.
Hors ligne
#4 Tue 28 February 2023 13:28
- Kiecane
- Participant actif
- Date d'inscription: 31 Oct 2021
- Messages: 91
Re: copy insert into \N
Bonjour,
J'ai essayé différentes solutions pour pouvoir faire ces insertions sans perdre un temps infini sur Excel mais je n'y suis pas encore parvenue, ce pourquoi je sollicite à nouveau votre aide. J'ai vu sur internet qu'il était possible, lorsqu'on rencontrait ce problème, de créer dans un premier temps un fichier Excel avec l'intégralité des données qu'on souhaite insérer dans une table donnée. Puis, dans pgAdmin, il suffit d'écrire COPY nom_schema.nom_table FROM 'chemin/fichier.csv';
J'ai donc testé cette solution, mais pgAdmin me renvoie alors l'erreur suivante : ERROR: ERREUR: n'a pas pu ouvrir le fichier « chemin/acces.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.
Je ne sais pas si c'est lié à une erreur dans l'écriture de mon chemin d'accès, ce qui me paraîtrait très étrange, étant donné que lorsque je le colle dans la barre de mon explorateur de fichier, il me permet bien d'ouvrir le fichier .csv correspondant.
Merci d'avance.
Hors ligne
#5 Tue 28 February 2023 13:40
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: copy insert into \N
Bonjour,
PgAdmin n'a pas un editeur capable de bien gérer les requetes sql sous forme de dump, d'ou votre erreur et le conseil de Régis de passer par des outils adaptés.
Il ne FAUT PAS supprimer de caractères dans le fichier de dump qu'on vous a donné, mais utiliser un outil capable de lire ces requêtes.
Le dump que vous manipulez est au format SQL (pg_dump peut dumper dans plusieurs formats).
Pour restaurer ce dump, il faut utiliser le programme "psql" comme le disait Régis. psql est le client par défaut de Postgres, très puissant mais en ligne de commande.
(pg_restore est à utiliser lorsque le format de dump postgresql est "custom" = format compressé binaire que seul pg_restore peut comprendre)
Pour restaurer ce dump, indiquez à psql les paramètres de connexion (les memes que ceux mis dans pgAdmin pour configurer la bd), la base de données: et le fichier SQL à executer:
Code:
psql -U username -h dbhost -d dbname -f dump.sql
Nicolas
Hors ligne
#6 Tue 28 February 2023 13:50
- Kiecane
- Participant actif
- Date d'inscription: 31 Oct 2021
- Messages: 91
Re: copy insert into \N
Je précise par ailleurs qu'à l'origine (cf 1er message posté ci-dessus), l'erreur initiale liée au COPY suivi de l'ensemble des données est toujours une erreur de syntaxe sur la première donnée, telle que : ERROR: ERREUR: erreur de syntaxe sur ou près de « 1 »
LINE 2: 1 2022-04-11
Hors ligne
#7 Tue 28 February 2023 14:24
- Kiecane
- Participant actif
- Date d'inscription: 31 Oct 2021
- Messages: 91
Re: copy insert into \N
Merci pour votre réponse, je ne l'avais pas vu avant d'envoyer mon précédent message. J'ai bien inscrit dans le Query Editor la phrase indiquée avec mes paramètres personnels : psql -U mon_username -h mon_nom_d'hôte -d ma_base -f chemin_d'accès_de_mon_dump.sql
Cependant pgAdmin me renvoie tout de suite une erreur : ERROR: ERREUR: erreur de syntaxe sur ou près de « psql »
LINE 1: psql -U mon_username -h mon_nom_d'hôte -d ma_base -f chemin_d'accès...
L'erreur est située au niveau du psql et je ne comprends vraiment pas pourquoi... J'ai bien indiqué les bons paramètres, j'ai seulement un doute sur ce que vous avez indiqué comme dbhost : d'après mes paramètres ce serait localhost.
Hors ligne
#8 Tue 28 February 2023 20:58
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: copy insert into \N
Ce n'est pas dans le "Query Editor" de pgadmin qu'il faut executer cette commande.
psql est un outil en ligne de commande.
C'est dans un shell. Vous pouvez par exemple utiliser cmd sous Windows.
Si votre cluster postgres est installé sur votre machine, le paramètre dbhost est bien localhost.
Hors ligne
#9 Wed 01 March 2023 11:23
- Kiecane
- Participant actif
- Date d'inscription: 31 Oct 2021
- Messages: 91
Re: copy insert into \N
Bonjour et merci pour votre réponse. J'ai tapé "cmd" dans ma barre de recherche Windows, ce qui m'a ouvert une fenêtre "Invite de commandes". J'y ai ensuite inscrit la phrase qu'on m'avait indiqué ci-dessus, et ce directement à la suite du C:\Users\prenom.nom> qui s'affichait. Je l'ai bien sûr fait avec mes propres paramètres évoqués précédemment ainsi que le chemin d'accès de mon fichier dump en .sql. Cependant cela me génère l'erreur suivante : 'psql' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.
Que puis-je faire pour remédier à cela ?
Hors ligne
#10 Wed 01 March 2023 11:45
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: copy insert into \N
Il faut que vous ajoutiez vos exécutables postgres dans votre PATH en spécifiant bien le répertoire ou psql et ses amis sont sur votre machine.
Quelque chose qui ressemble à ça normalement : C:\Program Files\PostgreSQL\<votre version de postgres>\bin
Voila une ressource qui vous explique tout ça.
https://stackoverflow.com/questions/304 … al-command
Dernière modification par YoLecomte (Wed 01 March 2023 11:45)
Hors ligne
#11 Wed 01 March 2023 11:56
- Kiecane
- Participant actif
- Date d'inscription: 31 Oct 2021
- Messages: 91
Re: copy insert into \N
A quel moment et endroit dois-je indiquer ce chemin ? Dans la phrase qu'on m'a indiqué d'inscrire (au niveau du chemin de mon dump en .sql), avant cette phrase, ou bien d'une autre manière encore ? J'ai été consulté le lien fourni mais j'avoue avoir du mal à comprendre.
Hors ligne
#12 Wed 01 March 2023 12:28
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: copy insert into \N
C'est dans les variables d'environnements de votre système.
https://www.malekal.com/comment-modifie … ows-10-11/
Sinon vous pouvez naviguer dans votre invite de commande vers l'endroit où est psql et lancer la commande lorsque vous êtes dans ce répertoire. Ca fonctionnera sans avoir à mettre à jour la variable PATH.
Pour naviguer en ligne de commande utilisez cd C:/chemin/vers/ou/vous/voulez/aller
Sinon depuis votre explorateur de fichier Windows naviguez vers le répertoire qui contient psql puis tapez cmd dans la barre qui indique le chemin où vous êtes cela ouvrira une invite de commande dans ce répertoire.
A partir de là vous pouvez entrer votre commande psql qui s'exécutera.
Hors ligne
#13 Wed 01 March 2023 12:33
- sandrine.ccvh
- Juste Inscrit !
- Date d'inscription: 2 May 2022
- Messages: 6
Re: copy insert into \N
Bonjour,
Dans l'invite de commande, si vous êtes sous Windows, il faut au préalable changer le chemin pour qu'il comprenne qu'il doit travailler sur un autre dossier.
Généralement, on arrive dans l'invite de commande avec C:\users\ton_compte> mais l'interrogation de postgres se fait sur un dossier différent.
Donc il faut écrire "cd C:\Program Files\PostgreSQL\[version_de_PostgreSQL]\bin"
et à partir de là, le chemin d'accès en début de commande va changer.
La commande "cd" permet de changer le chemin et préciser là où vous voulez interagir.
Puis après, rentrer les paramètres psql pour se connecter à votre base de données et appliquer le script, donc "psql -U username -h dbhost -d dbname -f chemin/du/dump.sql"
Bonne journée
Marie
Dernière modification par sandrine.ccvh (Wed 01 March 2023 12:34)
Hors ligne
#14 Wed 01 March 2023 14:47
- Kiecane
- Participant actif
- Date d'inscription: 31 Oct 2021
- Messages: 91
Re: copy insert into \N
Bonjour, merci beaucoup pour vos réponses et votre patience. J'ai enfin compris et réussi à passer par l'invite de commandes comme indiqué pour faire tourner le script. Le message de Marie notamment m'a beaucoup aidé. Bonne journée à tous.
Hors ligne