mysql -> PostgreSQL danach Timestamp Fehler korregieren

Datenbank Migration (z. B. von MySQL auf PostgreSQL)
Antworten
nut
Neuer Benutzer
Beiträge: 3
Registriert: Mi 5. Mär 2014, 08:06

mysql -> PostgreSQL danach Timestamp Fehler korregieren

Beitrag von nut » Mi 5. Mär 2014, 08:49

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:

Code: Alles auswählen

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

Code: Alles auswählen

"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

akretschmer
Erfahrener Benutzer
Beiträge: 7683
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: mysql -> PostgreSQL danach Timestamp Fehler korregieren

Beitrag von akretschmer » Mi 5. Mär 2014, 09:00

nut hat geschrieben:
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

Habt Ihr eine Idee für mich?

Vielen Dank
nut


Ja. Die Darstellung ist Sache der Ausgabe.

Du hast:

Code: Alles auswählen

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


und willst:

Code: Alles auswählen

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

nut
Neuer Benutzer
Beiträge: 3
Registriert: Mi 5. Mär 2014, 08:06

Re: mysql -> PostgreSQL danach Timestamp Fehler korregieren

Beitrag von nut » Mi 5. Mär 2014, 09:09

akretschmer hat geschrieben:
Ja. Die Darstellung ist Sache der Ausgabe.

Du hast:

Code: Alles auswählen

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


und willst:

Code: Alles auswählen

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. :-)

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

akretschmer
Erfahrener Benutzer
Beiträge: 7683
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: mysql -> PostgreSQL danach Timestamp Fehler korregieren

Beitrag von akretschmer » Mi 5. Mär 2014, 09:21

nut hat geschrieben:
akretschmer hat geschrieben:
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.

nut


Code: Alles auswählen

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?

nut
Neuer Benutzer
Beiträge: 3
Registriert: Mi 5. Mär 2014, 08:06

Re: mysql -> PostgreSQL danach Timestamp Fehler korregieren

Beitrag von nut » Mi 5. Mär 2014, 09:29

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 :-)

nut

akretschmer
Erfahrener Benutzer
Beiträge: 7683
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: mysql -> PostgreSQL danach Timestamp Fehler korregieren

Beitrag von akretschmer » Mi 5. Mär 2014, 09:29

nut hat geschrieben:Und danke für die extrem schnelle Antwort.


kann ich mir leider nix für kaufen...

Antworten