postgreSQL-alter Spalte Datentyp Zeitstempel ohne Zeitzone
Möchte ich ändern eine Spalte mit Daten aus dem text in den Typ timestamp. Es gibt keine Zeitzone, in meine Daten. Das format meiner Daten wie 28-03-17 17:22, einschließlich Uhrzeit und Datum, aber keine Uhrzeit zone. In anderen Worten, alle meine Daten liegen in der gleichen Zeitzone. Wie kann ich es tun?
Versuchte ich mehrere Möglichkeiten unten, aber ich kann immer noch nicht finden den richtigen Ansatz. Hoffe Ihr könnt mir helfen.
Sicherlich, ich kann eine neue Tabelle, wenn meine Probleme gelöst werden können.
alter table AB
alter create_time type TIMESTAMP;
ERROR: column "create_time" cannot be cast automatically to type timestamp without time zone
HINT: You might need to specify "USING create_time::timestamp without time zone".
********** Error **********
ERROR: column "create_time" cannot be cast automatically to type timestamp without time zone
SQL state: 42804
Hint: You might need to specify "USING create_time::timestamp without time zone".
alter table AB
alter create_time type TIMESTAMP without time zone;
ERROR: column "create_time" cannot be cast automatically to type timestamp without time zone
HINT: You might need to specify "USING create_time::timestamp without time zone".
********** Error **********
ERROR: column "create_time" cannot be cast automatically to type timestamp without time zone
SQL state: 42804
Hint: You might need to specify "USING create_time::timestamp without time zone".
alter table AB
alter create_time::without time zone type TIMESTAMP;
ERROR: syntax error at or near "::"
LINE 2: alter create_time::without time zone type TIMESTAM
^
********** Error **********
ERROR: syntax error at or near "::"
SQL state: 42601
Character: 50
alter table AB
alter create_time UTC type TIMESTAMP;
ERROR: syntax error at or near "UTC"
LINE 2: alter create_time UTC type TIMESTAMP;
^
********** Error **********
ERROR: syntax error at or near "UTC"
SQL state: 42601
Character: 50
Als Allgemeine Regel gilt, bitte fügen Sie alle relevanten Fehlermeldungen in Ihren Fragen. Wenn kein Fehler vorhanden ist, erwähnen, warum Sie glauben, dass es nicht so funktioniert wie erwartet. Sagen, es "ist nicht der richtige Ansatz" ist nicht sehr hilfreich oder ausführlich.
Hinzugefügt alle Fehler. bitte überprüfen Sie es. Danke.
Lesen Sie die Fehlermeldung und den code:
Hinzugefügt alle Fehler. bitte überprüfen Sie es. Danke.
Lesen Sie die Fehlermeldung und den code:
USING create_time::timestamp without time zone
vs. code: create_time::without time zone type TIMESTAMP;
InformationsquelleAutor Amy | 2017-03-28
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn
create_time
ist vom Typ TEXT mit Gültiger date-Wert, es wird einfacher sein, zu gehen mit der änderung wie folgt vor (beachten Sie bitte zuerst eine Tabelle dump als backup):Nach dem Wechsel das format, alle meine vorhandenen Daten ist gut. Aber das problem ist, dass wenn ich versuche zu importieren Daten mit der gleichen vorherigen format, es zeigte mir eine Fehlermeldung. Ich setze Trennzeichen mit ','. FEHLER: zusätzliche Daten nach letzter erwarteter Spalte " KONTEXT: COPY ca_manifest_checkpoint, Zeile 2: "Kanada,YYZ01A,YYZ01A_20170329_151501.txt,953353795858,31,,29/03/2017 14:57:55,30/03/2017 03:20:02,,ich..."
Hast du durch Zufall exportieren Sie die Tabelle zusammen mit den zusätzlichen Halter Spalte, dann re-importieren, wenn der Halter Spalte gelöscht wurde?
es ist komisch für mich. Langfristig brauche ich für den import neuer Daten in die Tabelle jeden Tag. Es ist nicht bequem, es zu tun in diesem Ansatz jedes mal.
Wenn dies eine reguläre task importieren, und Sie können nicht Ihre Daten-Quelle gemäß der neuen timestamp-format, möchten Sie vielleicht zu prüfen, vor-Verarbeitung von text-Daten mit einigen scripts mit awk, sed, etc.
InformationsquelleAutor Leo C
USING...
kommt nach der Art:Ich bin traurig, dass es zeigt Fehler wieder.
Dies ist meine Abfrage und es funktioniert tadellos auf postgresql 10.5. "alter table tmp_usersgroups alter column datecreated Typ timestamp mit datecreated::timestamp;"
datestyle to 'sql,dmy'
InformationsquelleAutor Jasen
Sie nicht angegeben haben, die ursprüngliche Art der create_time, so nehme ich es ZEIT mit Zeitzone (als Typ DATE oder TIMESTAMP with time zone sollte keine der besagten Fehler, wenn Sie versuchen zu ändern, ZEITSTEMPEL ohne Zeitzone). Seit ZEITSTEMPEL Datums-Informationen zusätzlich zu der ZEIT, die Sie brauchen, um zu ergänzen Ihre aktuellen Informationen-Ihr ALTER-Anweisung, wie:
Wenn Sie ein entsprechendes DATE-Spalte (sagen, create_date), können Sie übergeben es an die date () - Funktion, wie:
Ich habe meine Kommentare als andere Antwort — Kommentaren ist zu beschränkt für die Anzeige von multi-line-code.
InformationsquelleAutor Leo C
zum ändern des Datentyps der Spalte vom Datentyp bigint timestamp(für die Epoche timestamp)
zB;
zum ändern des Datentyps der Spalte timestamp bigint(für timestamp-Epoche)
zB;
InformationsquelleAutor raman.pndy