Hallo,
ich habe das leider immer noch nicht gelöst. Warum ist 1000 eine ungültige Eingabesytax für eine ganze Zahl?
Gruß NIxdorf
Nein. Das ist das "id". Wenn Du eine CSV-Datei mit Headern einlesen willst, dann solltest Du das ankündigen und nicht erwarten, daß PG ein "id" von sich aus zu 1000 wandelt...
Wie wäre es, jetzt mal die Doku zu lesen?
Btw.: die " um die Zeile mit dem COPY drumherum sind hyperfluid, dafür fehlt das abschließende ';'.
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hallo,
ich habe das leider immer noch nicht gelöst. Warum ist 1000 eine ungültige Eingabesytax für eine ganze Zahl?
Gruß NIxdorf
Weil in Deinem Beispiel der COPY-Befehl NICHT angekündigt hat, daß die CSV-Datei CSV-Header enthält. Damit versucht PG, die nächste Zeile bereits als Daten zu interpretieren und fällt gleich mit dem "id" auf die Schnauze beim Versuch, aus "id" eine Integer-Zahl zu machen. Ein String "id" läßt sich dummerweise halt auch selbst mit viel Liebe kaum als 1000 interpretieren.
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hallo,
ok, die zweite Zeile mit:
"id" "partnumber" "description" "listprice" "sellprice" "lastcost" "priceupdate" "weight" "onhand" "notes" "makemodel" "assembly" "alternate" "rop" "inventory_accno_id" "income_accno_id" "expense_accno_id" "bin" "shop" "obsolete" "bom" "image" "drawing" "microfiche" "partsgroup_id" "ve" "gv" "itime" "mtime" "unit" "formel" "not_discountable" "buchungsgruppen_id" "payment_id" "ean"
habe ich rausgenommen.
Die erte Zeile sieht so aus:
copy parts_tmp from stdin;
So sah zunächst die Zeile für einen Artikel aus:
1000 1001114 "HP Nr15 Tinte schwarz 25ml HV DJ840c DJ843c" "\N" 17.56 17.56 10.04.07 "\N" 0 "Verbrauchsmaterial" "f" "f" "f" 0 15 79 151 "\N" "f" "f" "f" "\N" "\N" "\N" 0 0 "0.00000" "2007-04-16 12:46:07.497966" "2007-04-16 15:26:33.434352" "Stck" "\N" "f" 815 0 "\N"
Bei den \N ` s hat postgres gemeckert das man soetwas in ein Feld vom Typ Numreik nicht eintragen darf. In der Datenbank sind aber Artikle drin, die mit dem Wahrenwirtschftsystem abgelegt wurden und die auch überall diese \N - Eintrage haben. Nur mit dem Copy-Befehl kann die so nicht eintragen. Kann man da etwas machen?
Ich habe mir so beholfen, das ich überall eine 0 eingetragen habe. Da das aber auch Preise sind, kann ich mir auch vorstellen das das Wahrewirtschaftsystem damit Propbleme hat.
Was noch auftritt, ich habe felder das trägt das Wahrewirtschaftsystem ein f ein. Die Felder in der DB sind als boolean formatiert.
Wenn ich jetzt aber mit meiner CSV-Datei und dem Copy-Befehl versuche die Daten in die DB zu schreiben, kommt:
psql:/home/frank/linbyte/lieferanten/actebis/preisliste.csv:1: FEHLER: ungültige Eingabesyntax für Typ boolean: »"f"«
CONTEXT: COPY parts_tmp, Zeile 1, Spalte makemodel: »"f"«
Wie kommt das das ich mit dem Copy-Befehl das immer nicht kann, In der Datenbank aber solche Einträge vorhanden sind?
Gruß Nixdorf
Ja, man könnte es richtig machen.
Code:test=# create table forum (id int, wert numeric(10,2)); CREATE TABLE test=*# copy forum from stdin; Enter data to be copied followed by a newline. End with a backslash and a period on a line by itself. >> 1 \N >> 2 1 >> \. test=*# select * from forum; id | wert ----+------ 1 | 2 | 1.00 (2 rows) test=*# copy forum from stdin; Enter data to be copied followed by a newline. End with a backslash and a period on a line by itself. >> 2 "\N" >> \. ERROR: invalid input syntax for type numeric: ""N"" CONTEXT: COPY forum, line 1, column wert: ""N""0 != NULL
Ich habe mir so beholfen, das ich überall eine 0 eingetragen habe. Da das aber auch Preise sind, kann ich mir auch vorstellen das das Wahrewirtschaftsystem damit Propbleme hat.
Das nur als Hinweis, falls Du Dich mal wunderst, wenn Deine Statistiken später Dir komisch vorkommen.Code:test=*# select * from forum; id | wert ----+------- 1 | 2 | 0.00 3 | 10.00 (3 rows) test=*# select avg(wert) from forum; avg -------------------- 5.0000000000000000 (1 row) test=*# select avg(coalesce(wert,0)) from forum ; avg -------------------- 3.3333333333333333 (1 row)
Was noch auftritt, ich habe felder das trägt das Wahrewirtschaftsystem ein f ein. Die Felder in der DB sind als boolean formatiert.
Wenn ich jetzt aber mit meiner CSV-Datei und dem Copy-Befehl versuche die Daten in die DB zu schreiben, kommt:
psql:/home/frank/linbyte/lieferanten/actebis/preisliste.csv:1: FEHLER: ungültige Eingabesyntax für Typ boolean: »"f"«
CONTEXT: COPY parts_tmp, Zeile 1, Spalte makemodel: »"f"«Code:test=# create table forum (id int, flag bool); CREATE TABLE test=*# copy forum from stdin; Enter data to be copied followed by a newline. End with a backslash and a period on a line by itself. >> 1 f >> 2 0 >> 3 t >> 4 1 >> \. test=*# select * from forum; id | flag ----+------ 1 | f 2 | f 3 | t 4 | t (4 rows)Das ist eine Frage der Darstellung.Wie kommt das das ich mit dem Copy-Befehl das immer nicht kann, In der Datenbank aber solche Einträge vorhanden sind?
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hallo,
also wenn ich Dich richtig verstanden habe stören die Anführungszeichen bei "\N". Das sind die Textrenner in meiner CSV-Datei, das kann ich auch noch ' verwenden, wenn ich die CSV-Datei mit Openoffice abspeichere. Das habe ich schon probiert, klappt aber auch nicht. Andere Optionen habe ich aber nicht. Das weiß ich jetzt nicht wie ich die " bei den "\N" - Einträgen herausbekommen soll.
Beim "f" - Eintrag ist das wohl genau das selbe problem.
Da würde ich noch mal einen Denkanstoß benötigen.
Mit freundlichen Grüßen
NIxdorf
Geändert von nixdorf (18.05.2007 um 09:30 Uhr)
Hallo,
ok, das kann man dann wohl noch mal mit einem Editor machen, da bin ich gerade dabei...
Gruß Nixdorf
Hallo,
das sieht so aus als ob es jetzt geklappt hat.
Jetzt muß ich nur noch die Daten die jetzt in einer Temporären Tabelle parts_tep sind in die Tabelle parts überführen. Das mache damit ich später die artikel in der Tabelle parts immer wieder aktualisieren kann und ggf. nicht mehr vorhandene Artikel auch automatisch löschen kann.
Vielen Dank für die HIlfe....
Gruß Nixdorf
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen