Thread datentyp ändern klappt nicht (9 answers)
Opened by supersucker at 2005-05-20 21:07

supersucker
 2005-05-22 22:14
#33283 #33283
User since
2005-03-17
118 Artikel
BenutzerIn
[default_avatar]
ok,

dafür dass mir bisher keiner geantwortet hat, kann es nur zwei gründe geben:

1. keiner weiss es bzw. kann drauf antworten
2. ich hab meine frage besch.... gestellt

da ich mal hoffe das es 2. war, versuch ich mal das etwas sauberer zu formulieren:

ich hab zwei datenbanken die eine ist postgresql 8, die andere postgresql 7.4.1.
vom inhalt her sind die beiden datenbanken völlig identisch, beide enthalten eine einzige tabelle mit denselben attributen. der einzige unterschied ist die grösse, die postgresql-db v. 8 ist meine testdatenbank die nur ein paar 1000 datensätze enthält, die 7.4.1 läuft auf einer remote-maschine und enthält mehrere milliarden datensätze.

nun hab ich folgendes problem:

die tabelle die in beiden datenbanken vom aufbau her identisch ist, enthält 4 attribute die vom typ float sind. Jetzt möchte ich den typ der 4 attribute von float zu numeric(15,2) ändern, so das ich also in den 4 feldern nur noch fliesskommazahlen habe mit 15 erlaubten vorkommastellen und 2 erlaubten nachkommastellen.

hab also folgendes gemacht:

Code: (dl )
alter table fragment alter column y type numeric(15,2);


das klappt auch wunderbar auf meiner test-datenbank (also v.8), aber nicht auf der 7.4.1-db!
probiere ich hier das gleiche wie bei der v.8, also:

Code: (dl )
alter table fragment alter column y type numeric(15,2);


erhalte ich ein:

Code: (dl )
ERROR:  syntax error at or near "type" at character 37


dies scheint also in der 7.4.1 nicht zu gehen, hab auch in der 7.4.1-doku dafür im gegensatz zu 8-doku kein beispiel gefunden, bei dem durch dieses kommando der typ eines attribures geändert werden kann......

habs dann mit folgender notlösung probiert:

ich runde einfach alle in den feldern vorhandenen floats auf 2 stellen nach dem komma (ist unsauber, ich weiss, war nur die absolute notlösung....), also mit

Code: (dl )
update fragment set x = round(x,2);


da kriege ich aber die fehlermeldung:

Code: (dl )
1
2
3
4
 update fragment set y = round(y,1);
ERROR: function round(double precision, integer) does not exist
HINT: No function matches the given name and argument types.
You may need to add explicit type casts.


hab dann in der doku nachgekuckt und gesehen, dass das mit round so wie oben nur klappt wenn der typ des feldes das gerundet werden soll ein numeric ist....bin also wieder da wo ich angefangen hab.....



wenn ich mit alter nicht den typ ändern kann, wie dann?
hab auch schon in der postgresql-doku das type-cast kapitel durchgelesen, da stand aber auch nichts drin was mir weitergeholfen hat......aber irgendwie muss das ja gehen, es kann ja eigentlich nicht sein das ich in der 7.4.1 version den datentyp nicht von float nach numeric ändern kann.....
gibt es denn noch andere möglichkeiten explizit zu type-casten?

View full thread datentyp ändern klappt nicht