PostgreSQL Table Column "ändern"

Alles zum SQL-Dialekt

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11515
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

PostgreSQL Table Column "ändern"

Beitrag von AUGE_OHR » So, 29. Jul 2012 0:20

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 ?
gruss by OHR
Jimmy

bgl
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 43
Registriert: Di, 30. Aug 2011 20:45

Re: PostgreSQL Table Column "ändern"

Beitrag von bgl » Mi, 01. Aug 2012 14:48

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.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11515
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: PostgreSQL Table Column "ändern"

Beitrag von AUGE_OHR » Mi, 01. Aug 2012 22:32

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() ...
gruss by OHR
Jimmy

bgl
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 43
Registriert: Di, 30. Aug 2011 20:45

Re: PostgreSQL Table Column "ändern"

Beitrag von bgl » Do, 02. Aug 2012 0:23

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).

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 14548
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: PostgreSQL Table Column "ändern"

Beitrag von Martin Altmann » Do, 02. Aug 2012 5:32

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
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

bgl
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 43
Registriert: Di, 30. Aug 2011 20:45

Re: PostgreSQL Table Column "ändern"

Beitrag von bgl » Do, 02. Aug 2012 9:27

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.

Antworten