PostgreSQL Table Column "ändern"

Alles zum SQL-Dialekt

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

PostgreSQL Table Column "ändern"

Beitrag 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 ?
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 »

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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: PostgreSQL Table Column "ändern"

Beitrag 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() ...
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 »

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: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: PostgreSQL Table Column "ändern"

Beitrag 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
: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
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 »

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