Ergebnis 1 bis 10 von 10

Thema: Reihenfolge der Spalten ändern

  1. #1
    eremit ist offline Benutzer
    Registriert seit
    19.02.2007
    Ort
    Braunschweig
    Beiträge
    49

    Standard Reihenfolge der Spalten ändern

    Hallo,

    ich möchte in eine bestehende Tabelle drei weitere Spalten ***einfügen***, d. h. sollen nicht, wie es per default geschieht, an die bestehenden Spalten drangehängt werden, sondern irgendwo dazwischen. BSP:

    Bestehen Spalten: A | B | C
    Neue Spalte D soll zwischen A und B, also
    Neue Spalten: A | D | B | C

    Danke

    Eremit

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

    Standard

    Warum? Eigentlich ist die Reihenfolge der Darstellung Sache der zugreifenden Applikation bzw. des SQL-Statments.
    Ich wüsste gerade keinen Weg, ausser droppen und neu anlegen.

    Gruß Uwe
    Geändert von Gisman (21.12.2007 um 13:13 Uhr)
    Have a lot of fun!

  3. #3
    eremit ist offline Benutzer
    Registriert seit
    19.02.2007
    Ort
    Braunschweig
    Beiträge
    49

    Standard

    Für die Funktion der Datenbank ist dies auch nicht zwingend erforderlich. Die Daten werden aber über ein Excel-Frontend eingelesen -> Access -> PostgreSQL. Am Ende der alten Tabelle hängen Spalten, die die User normalerweise nicht unbedingt sehen sollten. In die neuen Spalten müßten sie aber zwingend eintragen. Also würden in der Eingabemaske einige für den Anwender unwichtige und verwirrende Spalten zwischenhängen. Daher meine Frage.

    Und beim Droppen gehen mir doch alle Beziehungen flöten, derer es viele gibt, und die ich ungern alle wieder einrichten möchte.

    In Access kann man Spalten einfügen, aber diese Änderung wird nicht an die PostgreSQL-Datenbank weitergereicht.

    Irgendwelche Ideen?

    Eremit

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von eremit Beitrag anzeigen

    Irgendwelche Ideen?

    Eremit
    Definiere eine Tabelle, in der die Leute die Daten einfügen. Von dieser dann die Daten in die eigentliche Tabelle eintragen. Via TRIGGER zum Bleistift.

    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

  5. #5
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    751

    Standard

    Die nicht benutzten Spalten einfach nicht einlesen bzw darstellen. Zumindest mach ich das immer so, fördert nicht nur die Übersichtlichkeit. Die Darstellung im Frontend kannst du nach Belieben gestalten ohne Postgres anfassen zu müssen.

    Gruß Uwe
    Have a lot of fun!

  6. #6
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Das hört sich für mich so an, als ob die Daten mittels SELECT * ausgelesen werden ... immer ein böser Fehler.
    Wenn sich deine Applikation auf die Reihenfolge der Spalten, die Reihenfolge der Datensätze ect. verlässt, geht das irgendwann schief.

    Für die Reihenfolge der Datensätze gibt es ORDER BY, für die Reihenfolge der Spalten gibt man diese in der gewünschten Reihenfolge beim SELECT an.

    Thema erledigt.
    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

  7. #7
    dasblauehandtuch ist offline Benutzer
    Registriert seit
    04.12.2007
    Beiträge
    86

    Standard

    Zitat Zitat von eremit Beitrag anzeigen
    Die Daten werden aber über ein Excel-Frontend eingelesen -> Access -> PostgreSQL.
    hmm, wozu dient denn access?

    Oder wozu ein excel frontend, wennde schon access verwenden willst?

    Mir scheint die architektur etwas ... hmm ... erklärungsbedürftig

    Ansonsten stimme ich mit ads überein, nutze vernünftig definierte Queries und alles ist gut
    explain analyze is your friend

  8. #8
    eremit ist offline Benutzer
    Registriert seit
    19.02.2007
    Ort
    Braunschweig
    Beiträge
    49

    Beitrag

    Ich habe das Problem für mich gelöst, schiebe aber gerne den Versuch einer Erklärung hinterher

    Die Datenbank ist im Moment noch weitgehend leer. Später sollen Daten mittels eines Delphi-Frontends eingetragen werden. Dieses Frontend, das nicht ich programmiere und mit dem ich nichts zu tun habe, verwendet eine Komponente, über die Datenbanktabellen als Grid dargestellt und bearbeitet werden können. Die Eingaben werden lokal und temporär in Access-Tabellen gespeichert.

    Um den ersten Schwung von einigen tausend Datensätzen auf möglichst einfachem Wege einzuspielen, wollte ich die in Excel bereits vorliegenden Daten in eine Access-Datei laden, die per ODBC mit der PostgreSQL-Datenbank verbunden ist, und dann direkt in die PostgreSQL-Datenbank einspielen.

    Das ist in einigen Fällen auch gegangen, in anderen Fällen verweigerte sich Access aus mir unerfindlichen Gründen. Daraufhin habe ich (erfolgreich) begonnen, die ersten Daten als Textdateien (TAB-getrennt) über das phppgAdmin-Interface einzuspielen. Der einzige Wehrmutstropfen ist, dass die timestamp Felder mit der Vorgabe = now() auf diesem Wege auch nach dem Speichern nur NULL enthalten. Ich werde diesem Wege dennoch weiterhin treu bleiben, da mir Access einfach zu unberechenbar ist.

    Ach ja, und die betreffenden Spalten, um die sich meine Frage drehte: netterweise war nur eine einzige von ihnen verknüpft. Also habe ich mit einer Reihe von alter table add column oder drop column Befehlen alles so zurecht gerückt, wie ich es haben wollte. Die eine Spalte konnte ich mit alter table add constraint wieder verknüpfen.

    Die Funktionsfähigkeit der Datenbank wird durch die Reihenfolge der Spalten oder durch die Reihenfolge, in der diese ausgefüllt werden - selbstverständlich ! - nicht tangiert.

    Vielen Dank für die Antworten

    Eremit

  9. #9
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von eremit Beitrag anzeigen

    Um den ersten Schwung von einigen tausend Datensätzen auf möglichst einfachem Wege einzuspielen, wollte ich die in Excel bereits vorliegenden Daten in eine Access-Datei laden, die per ODBC mit der PostgreSQL-Datenbank verbunden ist, und dann direkt in die PostgreSQL-Datenbank einspielen.

    Das ist in einigen Fällen auch gegangen, in anderen Fällen verweigerte sich Access aus mir unerfindlichen Gründen. Daraufhin habe ich (erfolgreich) begonnen, die ersten Daten als Textdateien (TAB-getrennt) über das phppgAdmin-Interface einzuspielen. Der einzige Wehrmutstropfen ist, dass die timestamp Felder mit der Vorgabe = now() auf diesem Wege auch nach dem Speichern nur NULL enthalten. Ich werde diesem Wege dennoch weiterhin treu bleiben, da mir Access einfach zu unberechenbar ist.

    Das geht einfacher. Aus Excel einfach als CSV speichern und mittels COPY aus psql heraus einlesen. Deine Timestamp-Felder beim COPY-Befehl nicht angeben, dann klappt auch das.

    Code:
    test=*# create table in_copy (id int, ts timestamptz default now(), name text);
    CREATE TABLE
    Time: 258.037 ms
    test=*# copy in_copy (id, name) from stdin csv delimiter ';';
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> 1;foo
    >> 2;bar
    >> \.
    test=*# select * from in_copy;
     id |              ts               | name
    ----+-------------------------------+------
      1 | 2007-12-21 14:53:20.805989+01 | foo
      2 | 2007-12-21 14:53:20.805989+01 | bar
    (2 rows)
    ... mal als Beispiel.

    Mit dem COPY-Befehl kann man viele Dinge prima automatisieren, auf Arbeit z.B. bekomme ich jede Nacht etliche tausend Datensätze, die in diverse Tabellen zu verteilen sind. Wenn ich das händisch via Excel->Access->phpDingens und so weiter machen müßte...


    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

  10. #10
    eremit ist offline Benutzer
    Registriert seit
    19.02.2007
    Ort
    Braunschweig
    Beiträge
    49

    Standard

    Cool... Das werde ich im neuen Jahr doch gleich mal ausprobieren! :-)
    Vielen Dank
    Eremit

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