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 Re : Général » COPY FROM et COPY FROM STDIN » 08/03/2013 10:22:23

Bonjour,

Merci de votre intervention. Je suis complètement dépanné.

Pour ceux que ça intéresse, voici le détail, sous Unix :
cat MonFichierAuMemeFormatQueLaTable.csv | psql -c "copy MaTable from stdin delimiter ';' -p 5432 -U NomLogin  NomBase -h NomServeur

Dans le cas ou le nb de colonne dans le fichier est inférieur au nb de colonne dans la table, il faut ajouter la description du nom des colonnes. La commande devient :
cat MonFichierAuMemeFormatQueLaTable.csv | psql -c "copy MaTable (Colonne1, Colonne2, Colonne3) from stdin delimiter ';' -p 5432 -U NomLogin  NomBase -h NomServeur

Cordialement

Carmichael

#2 Général » COPY FROM et COPY FROM STDIN » 07/03/2013 19:58:52

Carmichael_fr
Réponses : 2

Bonjour,

Cette demande fait suite à une lecture attentive de la documentation, dans laquelle à mon avis, il manque un exemple pour bien comprendre.
Voici donc la situation : Je travaille sous Unix avec un client Postgres 8.4 qui adresse ses requetes à un serveur distant (qui héberge effectivement la base).

Je voulais faire un chargement de fichier en base de cette façon en me connectant avec le client :

MaBase=# copy MaTable
MaBase-# from 'MonFichierAuMemeFormatQueLaTable.csv'
MaBase-# delimiter ';'
MaBase-# null '';

Ce qui retourne :
ERROR:  could not open file 'MonFichierAuMemeFormatQueLaTable.csv" for reading: No such file or directory

J'ai bien compris que l'erreur provenait du fait que le serveur ne parvenait pas à accéder au fichier.
Comme alternative, il est mentionné dans la documentation d'utiliser STDIN pour une utilisation dans un script (ce sera le cas). Dans ce cas le client enverra les requetes au serveur.
Ce que je ne vois pas bien, c'est, quelle est la syntaxe exacte à utiliser pour mettre en oeuvre STDIN ?

Si j'écris :
MaBase=# copy MaTable
MaBase-# from STDIN
MaBase-# delimiter ';'
MaBase-# null '';
Je ne fais plus de référence à mon fichier csv. Donc ça ne marchera pas.

Si j'écris :
MaBase=# copy MaTable
MaBase-# from 'MonFichierAuMemeFormatQueLaTable.csv' |STDIN
MaBase-# delimiter ';'
MaBase-# null '';

c'est syntaxiquement incorrect.

Pour le moment, le fichier 'MonFichierAuMemeFormatQueLaTable.csv contient :
Champ11; Champ21; Champ31
Champ11; Champ22; Champ32
Champ13; Champ23; Champ33
Champ14; Champ24; Champ34

Dois-je modifier le contenu du fichier csv ?

Donc mes questions sont :
- quelle est la syntaxe exacte à utiliser pour mettre en oeuvre STDIN ?
- dois-je modifier mon fichier dcsv ?

Cordialement

Carmichael

#3 Re : C et C++ » PostgreSQL et Embarcadero C++ XE3 » 14/01/2013 23:00:59

Bonjour,

Alors d'abord merci de répondre aux attentes des utilisateurs même le dimanche !
Je vais potasser un peu la doc sur la mise en trace, car je ne suis pas DBA, mais je pense que ça devrait aller, la doc est claire.

Pour ce qui est de la 2ème intervention, ce n'est plus DataSet.post, mais :
SimpleDataSetPostgres->ApplyUpdates(0);
et l'objet SimpleDataSetPostgres effectue l'ordre d'envoi. Merci tout de même pour la suggestion.

Cordialement
Carmichael_fr

#4 C et C++ » PostgreSQL et Embarcadero C++ XE3 » 13/01/2013 16:55:36

Carmichael_fr
Réponses : 3

Bonjour,

Je souhaiterai échanger une expérience avec des personnes utilisant :
- Windows 7 SP1
- Embarcadero C++ XE3
- PostrgreSQL 9.1
- Les drivers Devart 3.3

L'idée est que dans un projet C++, il est tout à fait possible de se connecter à une base Postgres avec Embarcadero, mais j'ai constaté que l'écriture dans la base posait un problème :

1/ Au niveau de l'EDI, l'explorateur de données autorise les modifications, mais en fait seule la 1ere est bien enregistrée. Les autre modifications ne sont pas transmises au moteur Postgres. Tout se passe comme si la 2ème modif restait dans le cache.
Question : Est-il posible de vérifier que l'EDI a envoyé une requete dans Postgres ?
Autre formulation : Comment voir si un appel à Postrgres a été effectué  ? Mise en trace de Postgres ?

2/ Au niveau d'un projet en C++.
Si on suit la cinématique : TSQLConnection1 => TSimpleDataSet1 => DataSource1 => TSQLGrid1
Le projet compile parfaitement, la consultation fonctionne, les données d'une tables sont affichées dans la grille, mais les modifications ne sont pas envoyées à Postgres, ou du moins, je ne les vois pas.
Est-ce qu'une personne aurait une idée ?


Cordialement

Carmichael_fr

#5 PSQL » Requete en ligne de commande avec parametres » 12/04/2012 20:53:51

Carmichael_fr
Réponses : 1

Bonjour,

Je passe progressivement d'Oracle à Postgres.

Avec Oracle :
Sous Unix, je tape la commande suivante :
sqlplus login/motdepasse@Nom_Base @Requete.sql 01/04/2012

Le contenu de Requete.sql est :
select count(*) from INDICATEUR where Date_Debut >= to_date('&1','dd/mm/yyyy');
exit;


Je voudrais faire la même chose avec Postgres :
Toujours depuis Unix, je tape la commande :

psql –f Requete.sql –h Serveur –p 5432 Nom_base login ????????

Le contenu de la requete serait le même :
select count(*) from INDICATEUR where Date_Debut >= to_date(???????);

Pourriez-vous m'indiquer la syntaxe exacte de la ligne de commande, de la requete ?

Cordialement

Carmichael.

Pied de page des forums

Propulsé par FluxBB