Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Copy Befehl ausführen

  1. #11
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von nixdorf Beitrag anzeigen
    Hallo,

    ich habe anstadt Kommas Tabs, aber immer noch ist postgres noch nicht zufrieden mit mir.

    So sieht jetzt der Anfang meiner CSV-Datei aus:

    "copy parts_tmp from stdin"
    "id" "partnumber" "description" "listprice" "sellprice" "lastcost" "priceupdate"
    ...

    Als Fehlermeldung bekomme ich jetzt:

    psqlreisliste_2.csv:1: FEHLER: ungültige Eingabesyntax für ganze Zahl: »"id"«
    CONTEXT: COPY parts_tmp, Zeile 1, Spalte id: »"id"«


    Das ist die 1000 in der CSV-Datei. Danach kommt ein Tab. Eine ganze Zahl ist es doch auch.
    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
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  2. #12
    nixdorf ist offline Benutzer
    Registriert seit
    14.12.2006
    Beiträge
    66

    Standard

    Hallo,

    ich habe das leider immer noch nicht gelöst. Warum ist 1000 eine ungültige Eingabesytax für eine ganze Zahl?

    Gruß NIxdorf

  3. #13
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von nixdorf Beitrag anzeigen
    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
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  4. #14
    nixdorf ist offline Benutzer
    Registriert seit
    14.12.2006
    Beiträge
    66

    Standard

    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

  5. #15
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von nixdorf Beitrag anzeigen

    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?
    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""

    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.
    0 != NULL
    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)
    Das nur als Hinweis, falls Du Dich mal wunderst, wenn Deine Statistiken später Dir komisch vorkommen.

    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)
    Wie kommt das das ich mit dem Copy-Befehl das immer nicht kann, In der Datenbank aber solche Einträge vorhanden sind?
    Das ist eine Frage der Darstellung.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  6. #16
    nixdorf ist offline Benutzer
    Registriert seit
    14.12.2006
    Beiträge
    66

    Standard

    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)

  7. #17
    nixdorf ist offline Benutzer
    Registriert seit
    14.12.2006
    Beiträge
    66

    Standard

    Hallo,

    ok, das kann man dann wohl noch mal mit einem Editor machen, da bin ich gerade dabei...


    Gruß Nixdorf

  8. #18
    nixdorf ist offline Benutzer
    Registriert seit
    14.12.2006
    Beiträge
    66

    Standard

    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

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Antworten: 11
    Letzter Beitrag: 09.07.2009, 10:07
  2. Funktionen ausführen
    Von jamax im Forum Trigger und Funktionen
    Antworten: 5
    Letzter Beitrag: 16.03.2009, 18:19
  3. Probleme mit Datumswert bei COPY- Befehl
    Von mari im Forum Allgemeines
    Antworten: 7
    Letzter Beitrag: 22.11.2007, 17:23
  4. psql und der copy -befehl
    Von joe89 im Forum Allgemeines
    Antworten: 2
    Letzter Beitrag: 05.07.2006, 14:36
  5. COPY-Befehl aus Views
    Von tippex im Forum SQL
    Antworten: 4
    Letzter Beitrag: 06.01.2006, 14:07

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum