in postgres datentypen ändern
steffen
- datenbank
0 romy0 Daniela Koller
Hi,
ich habe in einer postgres datenbank eine tabelle test mit dem feld wort, das den datentyp varchar hat.
wie kann ich den datentyp ändern? möchte, dass wort zu in(4) wird, habe aber leider keine möglichkeiz in postgres
gefunden!
ein ALTER table io ALTER COLUMN wort RENAME TO wort int(4); oder ähnliches hat nicht gefunzt!
danke für hilfe!
Hi,
ich habe in einer postgres datenbank eine tabelle test mit dem feld wort, das den datentyp varchar hat.
vielleicht hilft Dir das:
ALTER TABLE - Modifies table properties
ALTER TABLE table [ * ]
ADD [ COLUMN ] column type
ALTER TABLE table [ * ]
ALTER [ COLUMN ] column { SET DEFAULT value | DROP DEFAULT }
ALTER TABLE table [ * ]
RENAME [ COLUMN ] column TO newcolumn
ALTER TABLE table
RENAME TO newtable
ALTER TABLE table
ADD table constraint definition
table -> The name of an existing table to alter.
column -> Name of a new or existing column.
type -> Type of the new column.
newcolumn -> New name for an existing column.
newtable -> New name for the table.
also in Deinem Falle:
ALTER TABLE tabellenname ALTER COLUMN wort {SET DEFAULT int4};
danke für hilfe!
bitte
hoh
ROmy
ALTER TABLE - Modifies table properties
ALTER TABLE table [ * ]
ADD [ COLUMN ] column type
ALTER TABLE table [ * ]
ALTER [ COLUMN ] column { SET DEFAULT value | DROP DEFAULT }
ALTER TABLE table [ * ]
RENAME [ COLUMN ] column TO newcolumn
ALTER TABLE table
RENAME TO newtable
ALTER TABLE table
ADD table constraint definition
also in Deinem Falle:ALTER TABLE tabellenname ALTER COLUMN wort {SET DEFAULT int4};
ne, das isses eben nicht! der default wert ist mir egal, ich möchte den datentyp ändern!
folgendes ändert eben den spaltennamen, aber den datentyp kann ich eben so nicht ändern!
alter table io rename wort to newwort;
das muss doch gehen!!!!!!
Hallo,
ne, das isses eben nicht! der default wert ist mir egal, ich möchte den datentyp ändern!
sorry, hab mich verlesen in dieser Doku, aber sie ist trotzdem Dein Weg.
Soweit ich das überblicke, gibt es keinen Befehl der dies direkt tut, also geh einen Umweg über drop column und add column, da Du bei add die neue Value angeben kannst!
hilft das jetzt?
romy
Hallo,
Some features are not yet implemented though :
dropping a column
changing a column from NULL to NOT NULL or vice versa
adding a primary key
changing a column type
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
romy
Hallo,
das muss doch gehen!!!!!!
nicht unbedingt. Die wenigsten Datenbanken erlauben eine solche Operation (wegen möglicher Einwende: MS Access zählt für mich nicht als Datenbank), weil sie auch große Gefahren birgt. Nämlich das die Daten dadurch verfälscht werden (typisches beispiel int4 --> int2; bei großen Zahlen werden die überschüssigen Bits einfach abgeschnitten).
Der übliche (und auch sicherere) Weg ist daher erst die Tabellendaten wegzuschreiben die Tabelle neu anzulegen und dann die Daten wieder zu importieren. Dann ist sichergestellt, dass gültige Daten vorliegen weil bei ungültigen gibt es eine Fehlermeldung.
Im Falle von PostgreSQL wäre das ganze sogar noch einfacher. Das Programm pg_dump erlaubt ein DUMP von Tabellen und das wird dann alles im SQL-Klartext in einer angegebenen Datei abgelegt. Da brauchst Du dann nur noch das CREATE TABLE Statement zu manipulieren, die Tabelle in der Datenbank zu löschen und dann die Daten per psql wieder einzuspielen.
Ich hoffe das hilft Dir weiter
Gruss
MichaelB
Hi steffen
So weit ich weis ist das nicht möglich bei PostgreSQL. Was aber
möglich ist, ist eine Tabelle aus einer Query zu kreieren (mit
allen Daten die drin sind.
http://www.postgresql.org/idocs/index.php?sql-createtableas.html
Das würde für dich bedeuten, kreiere die Tabelle aus der bisherigen
Tabelle ohne die varchar Spalte. Dann fügst du an die neue Tabelle
die Spalte an (das geht ja), löscht die alte Tabelle und nennst die
neue Tabelle um.
Falls Inhalte übernommen werden sollen aus der varchar-Spalte, wirst
du in der as Query etwas tricksen müssen mit Konvertierungsfunktionen
und Spaltenaliasen.
Gruss Daniela