mysql -> PostgreSQL danach Timestamp Fehler korregieren

Hallo,

ich bin neu hier und nicht wirklich erfahren mit PostgreSQL und mit SQL allgemein.

Nun habe ich über einen mysql Dump eine Datenbank auf PostgreSQL migriert.
Es handelt sich um ca 20 Tabellen mit teilweise bis zu 30.000 Logging-Datensätzen in welche Daten mit Timestamp geschrieben werden.
Die Tabellen sehen etwa so aus:

-- Table: item23

-- DROP TABLE item23;

CREATE TABLE item23
(
  "time" timestamp without time zone NOT NULL,
  value double precision,
  CONSTRAINT item23_pkey PRIMARY KEY ("time")
)
WITH (
  OIDS=FALSE
);

Allerdings hat die Konvertierung des Timestampo nicht korrekt funktioniert:

"2014-01-08 15:59:21";          2423
"2014-01-08 16:00:31";          2424
"2014-01-08 16:01:42";          2425
"2014-01-08 16:02:52";          2426    <- letzter importierter Datensatz
"2014-01-08 17:45:19.468454";   2432    <- erster geschriebener Datensatz
"2014-01-08 17:47:12.684939";   2432
"2014-01-08 17:50:58.754476";   2433
"2014-01-08 18:12:06.141468";   2434
"2014-01-08 18:21:54.594123";   2435

Nun suche ich ein Skript oder eine Möglichkeit die alten mysql timesatamps auf den aktuellen Stand zu bringen, am besten Tabellenweise:
YYYY-MM-DD HH24:MI:SS to YYYY-MM-DD HH24:MI:SS.US

Die harte aber extrem aufwändige Methode wäre, zu exportieren -> manipulieren -> zurück spielen.

Ich hoffe aber über ALTER oder
-> lesen eines Datensatzes
-> manipulieren des Timestamp (zB .000001 anhängen)
-> zurückschreiben/einlesen an die ursprüngliche Stelle.
sollte doch über SQL bzw. spezielle PostgreSQL Befehle auch möglich sein die Timestamp zu manipulieren??

Habt Ihr eine Idee für mich?

Vielen Dank
nut

Ja. Die Darstellung ist Sache der Ausgabe.

Du hast:

test=# select * from nut;
             ts
----------------------------
 2014-01-08 16:02:52
 2014-01-08 17:45:19.468454
(2 rows)

und willst:

test=*# select *, to_char(ts, 'YYYY-MM-DD HH24:MI:SS.US') from nut;
             ts             |          to_char
----------------------------+----------------------------
 2014-01-08 16:02:52        | 2014-01-08 16:02:52.000000
 2014-01-08 17:45:19.468454 | 2014-01-08 17:45:19.468454
(2 rows)

Andreas

Wahh, super das ging ja schnell. :slight_smile:

EXAKT!

EDIT: Ich glaube es ist aber nicht nur eine Sache der Ausgabe, denn ich erhalte über Abfragen der Zeiträume nur noch die neu geschriebenen YYYY-MM-DD HH24:MI:SS.US Daten.
Du meinst ich soll einfach meine Abragen korregieren… hmmm.
Die Ausgabe über
SELECT *, to_char(time, ‘YYYY-MM-DD HH24:MI:SS.US’) FROM item23;
bringt auf jeden Fall schon mal das richtige Ergebnis.

nut



test=*# insert into nut values ('2014-01-08 17:45:20.00000');
INSERT 0 1
test=*# select * from nut;
             ts
----------------------------
 2014-01-08 16:02:52
 2014-01-08 17:45:19.468454
 2014-01-08 17:45:20
(3 rows)

Und nun?

Warum sollte die DB ungefragt 3, 5 oder 42 Nullen dranhängen, wenn diese das Resultat nicht ändern? Stehen auf Deinem Kontoauszug statt 5,00 auch 5,00000?

Vielen Dank für den Schubs, akretschmer!
Habe viel zu kompliziert gedacht…
Wieder was über PostgreSQL gelernt.

Dann werde ich diese Unzulänglichkeiten in meiner Abfrage mal korrigieren.

Und danke für die extrem schnelle Antwort.
Schönen Tag noch :slight_smile:

nut

kann ich mir leider nix für kaufen…