Seite 1 von 1

PostgreSQL Table Column "ändern"

Verfasst: So, 29. Jul 2012 0:20
von AUGE_OHR
hi,

mit "ALTER TABLE" fangen wohl die Befehle an die man benötigt wenn man eine Column "hinzufügen", "entfernen" oder "umbenennen" will.

Frage : bleibt beim "umbenennen" der Field "Inhalt" erhalten ?

angenommen ich habe ein Field Type "C" und möchte nun ein Field Type "D" damit "füllen"
also muss ich "C" (DDMMYY) nach "D" (YYYY-MM-DD) umwandeln ...
wenn ich das ich eine "Schleife" machen muss würde ich "meine" Xbase++ FUNCTION dafür nutzen.

Frage : kann ich das mit "einem" Befehl innerhalb von "SELECT ..." machen ?
... und wie bekomme ich "meine" FUNCTION in den "SELECT ..." ?

oder muss ich "in" der PG Table eine "Function" einbauen die ich mit "SELECT ..." aufrufe ?

Re: PostgreSQL Table Column "ändern"

Verfasst: Mi, 01. Aug 2012 14:48
von bgl
AUGE_OHR hat geschrieben:hi,

mit "ALTER TABLE" fangen wohl die Befehle an die man benötigt wenn man eine Column "hinzufügen", "entfernen" oder "umbenennen" will.

Frage : bleibt beim "umbenennen" der Field "Inhalt" erhalten ?

angenommen ich habe ein Field Type "C" und möchte nun ein Field Type "D" damit "füllen"
also muss ich "C" (DDMMYY) nach "D" (YYYY-MM-DD) umwandeln ...
wenn ich das ich eine "Schleife" machen muss würde ich "meine" Xbase++ FUNCTION dafür nutzen.

Frage : kann ich das mit "einem" Befehl innerhalb von "SELECT ..." machen ?
... und wie bekomme ich "meine" FUNCTION in den "SELECT ..." ?

oder muss ich "in" der PG Table eine "Function" einbauen die ich mit "SELECT ..." aufrufe ?
Also ich wuerde ein neues Feld fuer das Datum als Datumsformat einfuegen:

Code: Alles auswählen

ALTER TABLE deine_tabelle ADD COLUMN dein_neues_feld DATE;
Anschliessend ein UPDATE durchfuehren, dass z.B. so aussieht:

Code: Alles auswählen

UPDATE deine_tabelle SET dein_neues_feld=TO_DATE(dein_altes_feld, 'DDMMYY');
Dann das alte Feld rauswerfen:

Code: Alles auswählen

ALTER TABLE deine_tabelle DROP COLUMN dein_altes_feld;
Und das neue umbenennen:

Code: Alles auswählen

ALTER TABLE deine_tabelle RENAME dein_neues_feld TO dein_altes_feld;
Auf die Art kannst du sichergehen, dass deine Daten so umgewandelt werden, wie du sie haben willst - und es prüfen, bevor du die Daten im alten Format killst.

Re: PostgreSQL Table Column "ändern"

Verfasst: Mi, 01. Aug 2012 22:32
von AUGE_OHR
hi,

danke für deine Antwort, das war genau das was ich wissen wollte.

Frage : ich schicke ja 4 Statments "hintereinander" ... was müsste man im Netzwerk beachten ?

p.s. danke für TO_DATE() ... da hätte ich wieder lange gesucht wie nach TIME() -> NOW() ...

Re: PostgreSQL Table Column "ändern"

Verfasst: Do, 02. Aug 2012 0:23
von bgl
AUGE_OHR hat geschrieben:hi,

danke für deine Antwort, das war genau das was ich wissen wollte.

Frage : ich schicke ja 4 Statments "hintereinander" ... was müsste man im Netzwerk beachten ?

p.s. danke für TO_DATE() ... da hätte ich wieder lange gesucht wie nach TIME() -> NOW() ...
Die 4 Statements sind so ausgelegt, dass jeder einzelne Schritt die Datenbank in einem (weiterhin) brauchbaren Zustand hinterlaesst. Es waere natuerlich sinnvoll, neue Eintraege waehrend den Schritten 2-4 zu verhindern, ein Lock auf die Tabelle oder ein blockieren des Eingangsports wären da Möglichkeiten.
"Im Netzwerk" ist also weniger problematisch, als "im laufenden Betrieb" - das würde ich versuchen zu vermeiden.
Vielleicht missverstehe ich hier aber auch deine Frage.

Gibt im PostgreSQL-Handbuch übrigens ein Kapitel zu den ganzen Umwandlungsfunktionen (TO_allesmoegliche), das ist überall da hilfreich, wo einfache CASTs nicht helfen (im Fall deines Beispiels wäre altes_feld::DATE zum Beispiel dann als YYMMDD statt DDMMYY interpretiert worden).

Re: PostgreSQL Table Column "ändern"

Verfasst: Do, 02. Aug 2012 5:32
von Martin Altmann
Hmm,
man sollte latürnich auch die Berechtigungen (GRANTS) nicht außer Acht lassen, die auf der alten (zu droppenden) Spalte waren...

Viele Grüße,
Martin

Re: PostgreSQL Table Column "ändern"

Verfasst: Do, 02. Aug 2012 9:27
von bgl
Martin Altmann hat geschrieben:Hmm,
man sollte latürnich auch die Berechtigungen (GRANTS) nicht außer Acht lassen, die auf der alten (zu droppenden) Spalte waren...

Viele Grüße,
Martin
Faellt mir gerade schwer, da akut ein sonderlich grosses Risiko zu sehen, aber im Prinzip hast du natuerlich recht.