Datentyp einer Tabellenspalte ändern

Hallo,

ich suche seit einer ganzen weile ob es mit ‘alter table’ möglich ist den Datentyp einer bereits gefüllten Tabellenspalte zu ändern. Habe aber irgendwie nichts passendes gefunden. Habt Ihr vielleicht eine Idee wie oder ob es geht?

Gruß
Alexander

Sollte es nicht funktionieren, kannst du dir noch mit einem Umweg behelfen:

  1. neue Spalte erstellen
  2. Daten von der alten in die neue Spalte kopieren mit: update tabelle set neue_spalte=alte_spalte
  3. alte Spalte löschen
  4. neue Spalte umbenennen

Hierbei kannst du beim Update auch beliebige Umwandelfunktionen nutzen, um z.B. aus einem Textfeld oder einem Integer (Unix Timestamp) einen Timestamp zu machen.

Geht nur, wenn sich der Typ konvertieren läßt: Bleistift:

test=# create table foo (id int);
CREATE TABLE
Time: 165.789 ms
test=*# insert into foo values (1);
INSERT 0 1
Time: 1.878 ms
test=*# alter table foo alter column id type text;
ALTER TABLE
Time: 200.537 ms
test=*# select * from foo;
 id
----
 1
(1 row)

Time: 19.105 ms
test=*#

Ansonsten: guggst Du das, was ads sagte.

Andreas

Hallo und danke für die schnellen Antworten.

Am Sonntag habe ich die Änderungen an der Datenbank durchgeführt. Einen Teil konnte ich direkt ändern und andere musste ich kopieren und dann die alte Löschen. Mit ‘alter table’ kann man scheinbar eine Text Spalte nicht in eine numerische Umwandeln (enthält sicher nur numerische Daten). Also zumindest bei mir gings nicht. Hat aber dann mit kopieren in eine neu Spalte und Löschen mit Umbenennen bestens geklappt.

Vielen Dank für die Hilfe und schöne Ostern
Alexander