+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Datenimport

  1. #1
    nixdorf ist offline Benutzer
    Registriert seit
    14.12.2006
    Beiträge
    63

    Standard Datenimport

    Hallo,

    ich habe ein Wahrenwirtschaftssystem mit einer Postgresql - Datenbank.
    Meine Artikelliste möchte ich mit einer CSV-Datei uploaden. Da klappt jetzt auch schon einigermasten. Nur wir jezt jede Woche die Artikelliste aktualisiert und ich möchte die Änderungen dann wieder mit der CSV-Datei uploaden.

    Wenn ich daß aber mache, mekert Postgresql, daß der Artikel schon vorhanden ist, anstadt Ihn zu ändern. Muß man jedesmal die Tabelle erst wieder löschen, und dann die Artikel wieder uploaden? Damit hätte ich probleme, da ich auch noch andere Artiekel per Hand eingegeben habe die ich behalten möchte.


    Hat da wer eine Idee?

    Gruß Nixdorf

  2. #2
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    624

    Standard

    Du könntest eine temporäre Tabelle für die neuen anlegen und dann per UPDATE die reguläre Tabelle dort updaten, wo sie geändert ist. Danach löschst du die temporäre Tabelle wieder.

    CU Uwe
    Have a lot of fun!

  3. #3
    ads
    ads ist offline Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    3.408

    Standard

    Nun, eigentlich müsste ein Programm/Script bei dir dafür sorgen, das nur geänderte Datensätze eingespielt werden. Wie genau das auszusehen hat, kann dir wohl keiner sagen, ohne mehr über die Struktur deiner Db zu kennen und wie die Daten angeliefert werden.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  4. #4
    akretschmer ist offline Erfahrener Benutzer
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    4.478

    Standard

    Zitat Zitat von nixdorf Beitrag anzeigen
    Hallo,

    Meine Artikelliste möchte ich mit einer CSV-Datei uploaden. Da klappt jetzt auch schon einigermasten. Nur wir jezt jede Woche die Artikelliste aktualisiert und ich möchte die Änderungen dann wieder mit der CSV-Datei uploaden.
    Kannst Du bei Deinem tun ausschließen, daß ForeignKey - Bindungen zerstört werden?
    Artikelliste klingt für mich zumindest stark danach, daß da von anderen Tabellen aus via FK referenziert wird.

    Wenn ich daß aber mache, mekert Postgresql, daß der Artikel schon vorhanden ist, anstadt Ihn zu ändern. Muß man jedesmal die Tabelle erst wieder löschen, und dann die Artikel wieder uploaden? Damit hätte ich probleme, da ich auch noch andere Artiekel per Hand eingegeben habe die ich behalten möchte.
    Bei einem Design mit FK-Beziehungen hättest Du da ganz andere Probleme. Gut, okay, man kann mit DEFERRED da einiges abfangen, aber sauberer wäre es hier IMHO, die neuen Daten erst mal in eine temp. Zwischentabelle zu laden und von da aus mit SQL zu schauen, welche Records nun neu und welche geändert sind und dann weiter mit normalem SQL diese Dinge zu tun.

    Andreas
    --
    Papa-Kind-Kur vom 8. bis 29. September ;-)
    PostgreSQL Hosting
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    http://www.amazon.de/gp/registry/2APKFICAIYMWB
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    nixdorf ist offline Benutzer
    Registriert seit
    14.12.2006
    Beiträge
    63

    Standard

    Hallo,

    eine identische zusätzlichen Tabelle parts_temp habe ich erstellt, da werde ich dann die aktuelle Artikelliste zunächst reinpacken. Wie kann ich es dann am besten veranlassen, das alle Artikel die sich geändert haben bzw. neu sind dann in die Tabelle parts übernommen werden. Wie kann ich es veranlassen das Artikel die nicht mehr vorhanden sind gellöscht werden?


    Vielen Dank für die Hilfe...

    Gruß Nixdorf

  6. #6
    akretschmer ist offline Erfahrener Benutzer
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    4.478

    Standard

    Zitat Zitat von nixdorf Beitrag anzeigen
    Hallo,

    eine identische zusätzlichen Tabelle parts_temp habe ich erstellt, da werde ich dann die aktuelle Artikelliste zunächst reinpacken. Wie kann ich es dann am besten veranlassen, das alle Artikel die sich geändert haben bzw. neu sind dann in die Tabelle parts übernommen werden. Wie kann ich es veranlassen das Artikel die nicht mehr vorhanden sind gellöscht werden?


    Vielen Dank für die Hilfe...

    Gruß Nixdorf
    Mal als Ansatz:

    Code:
    test=# select * from parts;
     id |         name
    ----+----------------------
      1 | soll bleiben
      2 | soll erneuert werden
      4 | soll gelöscht werden
    (3 rows)
    
    test=*# select * from parts_temp ;
     id |      name
    ----+-----------------
      2 | geänderter wert
      3 | neuer wert
    (2 rows)
    
    test=*# update parts set name=(select parts_temp.name from parts_temp where parts.id=parts_temp.id) where id in (select id from parts_temp);
    UPDATE 1
    test=*# select * from parts;
     id |         name
    ----+----------------------
      1 | soll bleiben
      4 | soll gelöscht werden
      2 | geänderter wert
    (3 rows)
    
    Andreas
    --
    Papa-Kind-Kur vom 8. bis 29. September ;-)
    PostgreSQL Hosting
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    http://www.amazon.de/gp/registry/2APKFICAIYMWB
    https://www.xing.com/profile/Andreas_Kretschmer7

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

    Standard

    Hallo,

    ich habe es probiert mit:

    update parts set sellprice=(select parts_temp.sellprice from parts_temp where parts.id=parts_temp.id) where id in (select id from parts_temp);

    bekomme aber zur Antwort:

    bash: syntax error near unexpected token `('

    Da muß irgendetwas mit der Syntax nicht stimmen.


    Gruß Nixdorf

  8. #8
    akretschmer ist offline Erfahrener Benutzer
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    4.478

    Standard

    Zitat Zitat von nixdorf Beitrag anzeigen

    bash: syntax error near unexpected token `('

    Da muß irgendetwas mit der Syntax nicht stimmen.


    Gruß Nixdorf

    Mich verwundert zuerst einmal das

    bash:
    Andreas
    --
    Papa-Kind-Kur vom 8. bis 29. September ;-)
    PostgreSQL Hosting
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    http://www.amazon.de/gp/registry/2APKFICAIYMWB
    https://www.xing.com/profile/Andreas_Kretschmer7

  9. #9
    nixdorf ist offline Benutzer
    Registriert seit
    14.12.2006
    Beiträge
    63

    Standard

    Hallo,

    ich habe eine Konsole gestartet. Dann mit su root auf root rewechselt.
    Dann su postgres eingegeben und dann

    update parts set sellprice=(select parts_temp.sellprice from parts_temp where parts.id=parts_temp.id) where id in (select id from parts_temp);

    ausgeführt. Habe ich da noch einen Denkfehler?

    Gruß Nixdorf

  10. #10
    ads
    ads ist offline Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    3.408

    Standard

    Ja, du führst das auf der Shell des Users postgres aus, du musst dich erst noch zur Datenbank mittels psql verbinden.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

+ Antworten
Seite 1 von 2 1 2 LetzteLetzte

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