Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 26/04/2017 11:20:01
- Michel Depiesse
- Membre
\copy avec des boolean
Bonjour,
Je veux faire un export csc d'une db pg vers une autre db pg. Les deux dbs sont identiques. Elles sont ont créées par restore à partir d'une même backup.
Export :
\copy (select * from "tblContacts_data" where audit_id in (select audit_id from audit_history where table_name = 'tblContacts_data')) to '/home/rubin/Development/Sync/work/tblContacts_data.csv' with csv header;
Import :
\copy ariel."tblContacts_data" from './work/tblContacts_data.csv' with csv header;
j'obtiens
psql:./work/_import_modifs.sql:2: ERROR: invalid input syntax for integer: "f"
CONTEXT: COPY tblContacts_data, line 2, column Credit: "f"
le fichier : la valuer posant problème est entre !!!!!!!!!!!!!!!!!
Company,Alpha,ContactID,Title,FirstName,LastName,Qualifications,Address1,Address2,Address3,Town/City,County/State,PostalCode,Country,Telephone1,Mobile,Telephone2,Email1,Email2,Fax,Lead,Website,Salutation,English Salutation,ShipName,ShipAddress1,ShipAddress2,ShipAddress3,ShipTown/City,ShipCounty/State,ShipPostalCode,VatNr,EtNr,JbtNr,FinRating,TurnOver $,Memo,COD,Bank,BankAddress1,BankAddress2,BankAddress3,BankTown/City,BankCounty/State,BankPostalCode,BankCountry,AccountNr,Swift,Commission Base,!!!!!!!!!!!!!!!Credit!!!!!!!!!!!!!!,Currency,RSC-Link,ADDED,RIA_NR,ANNICK_NR,Last_Contacted,ContactCycle,UPDATED,SIMIL,KYC,ADC_NR,audit_id,deleted_by,Active,DateAdded,deleted_when
Mi corp,MIMI,16947,,Mi,Mic,prog,str1,str2,str3,Brussels,Beijing,1190,BY,0998898,00998776,,e@kkdze.bbe,,66556,JCK,,Dear Sirs,Ole,,,,,,,,,,,,,,f,,,,,,,,,,,0,0,,!!!!!!!!!!!!!!!f!!!!!!!!!!!!!!,,0,0,,60,f,,,0,8868,,f,2017-04-25,
Dans la db source, la colonne credit (integer) = 0.
Je ne comprends pas pourquoi, \copy me la transforme en f.
Je suis franchement navré de porter à votre connaissance un problème aussi horrible.
Merci pour votre attention
Hors ligne
#2 26/04/2017 11:31:09
- rjuju
- Administrateur
Re : \copy avec des boolean
Je ne reproduis pas votre comportement :
# create table test(id integer);
CREATE TABLE
# insert into test select 0;
INSERT 0 1
# \copy (select * from test) to '/tmp/test.csv' with csv header;
COPY 1
$ cat /tmp/test.csv
id
0
Ça ressemble quand même beaucoup à l'export d'une colonne de type bool plus que de type integer. Peut-être que le type de la colonne a été modifié depuis la restauration sur la base source ?
Julien.
https://rjuju.github.io/
Hors ligne
#3 26/04/2017 13:37:18
- Michel Depiesse
- Membre
Re : \copy avec des boolean
Merci pour votre réponse mais, hélas, les dbs sont identiques.
Indépendamment de la db de destination, l'export de
Table "public.tblContacts_data"
Column | Type | Modifiers
--------------------+-----------------------------+-----------------------------------------------------------------------
...
Credit | integer | default 0
...
met un f pour credit. (sa valeur dans la table est 0.)
De plus, faisant l'export et l'import avec le header, je suis sûr de la colonne qui pose problème.
Je trouve ça étrange...
Hors ligne
#4 26/04/2017 13:59:02
- dverite
- Membre
Re : \copy avec des boolean
La colonne Credit correspond bien à la valeur 0 dans la ligne CSV. En l'état le plus probable parait être une désynchro des colonnes. Vous pouvez montrer le résultat de \d sur la table destination dans psql?
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
#5 26/04/2017 14:04:40
- Michel Depiesse
- Membre
Re : \copy avec des boolean
Encore merci.
J'ai fait le \d sur les deux dbs. Les tables sont identiques (les deux db viennent du restore de la même db).
Je ne vois comment vous voyez que crédit = 0 dans la ligne csv.
Hors ligne
#6 26/04/2017 14:17:12
- Michel Depiesse
- Membre
Re : \copy avec des boolean
Mea culpa. Credit = 0 dans le csv. J'ai importé le csv dans une feuille calc...
Hors ligne
#7 26/04/2017 14:34:55
- Michel Depiesse
- Membre
Re : \copy avec des boolean
j'ai trouvé !
je ne pointais pas vers le bon schema...
Mille excuses
Dalibo devrait se présenter aux présidentielles
ça nous changerait des nullards habituels
bonne journée
Hors ligne
#8 26/04/2017 15:07:31
- dverite
- Membre
Re : \copy avec des boolean
Comment voir que telle colonne correspond à telle valeur sans importer? C'est assez facile avec les commandes Unix sed et paste.
1. faire
sed -e 's/,/\n/g' > entete
et copier coller la ligne d'entête dans le terminal, en entrée standard. Elle va se retrouver dans le fichier entete mais au format une ligne par champ.
2. faire la même chose avec la ligne de données:
sed -e 's/,/\n/g' > ligne
3. faire
paste entete ligne
et ça donne ce type de résultat:
...
BankCounty/State
BankPostalCode
BankCountry
AccountNr
Swift
Commission Base 0
!!!!!!!!!!!!!!!Credit!!!!!!!!!!!!!! 0
Currency
RSC-Link !!!!!!!!!!!!!!!f!!!!!!!!!!!!!!
ADDED
RIA_NR 0
ANNICK_NR 0
Last_Contacted
ContactCycle 60
UPDATED f
...
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
#9 26/04/2017 17:07:44
- Michel Depiesse
- Membre
Re : \copy avec des boolean
génial !
vous méritez le nom que vous avez !
merci !
Hors ligne
Pages : 1