Ich habe eine kleine Tabelle und ein bestimmtes Feld enthält den Typ " Zeichen variieren ". Ich versuche es in " Integer " zu ändern, aber es gibt einen Fehler, dass Casting nicht möglich ist.
Gibt es einen Weg, dies zu umgehen, oder sollte ich einfach eine andere Tabelle erstellen und die Datensätze mithilfe einer Abfrage in diese Tabelle einfügen?
Das Feld enthält nur ganzzahlige Werte.
SQL error: ERROR: column "MID" cannot be cast to type integer
SELECT
Listen verwenden, ohne sich auf die Ordnungspositionen der Spalten zu verlassen. Der in den Antworten angegebene Ansatz behält jedoch die Spaltenposition bei.Antworten:
Es gibt keine implizite (automatische) Umwandlung von
text
odervarchar
nachinteger
(dh Sie können a nichtvarchar
an eine Funktion übergeben,integer
die einvarchar
Feld erwartet oder einem Feld zuweist). Daherinteger
müssen Sie eine explizite Umwandlung mit ALTER TABLE ... ALTER COLUMN ... TYPE angeben. .. VERWENDUNG :Beachten Sie, dass Ihre Textfelder möglicherweise Leerzeichen enthalten. Verwenden Sie in diesem Fall:
Leerzeichen vor dem Konvertieren entfernen.
Dies sollte aus einer Fehlermeldung ersichtlich sein, wenn der Befehl ausgeführt wurde
psql
, aber es ist möglich, dass PgAdmin-III Ihnen nicht den vollständigen Fehler anzeigt . Folgendes passiert, wenn ich es inpsql
PostgreSQL 9.2 teste:Vielen Dank an @muistooshort für das Hinzufügen des
USING
Links.Siehe auch diese verwandte Frage ; Es geht um Rails-Migrationen, aber die zugrunde liegende Ursache ist dieselbe und die Antwort gilt.
Wenn der Fehler weiterhin auftritt, hängt er möglicherweise nicht mit Spaltenwerten zusammen, aber Indizes über diese Spalte oder Spaltenstandardwerte schlagen möglicherweise fehl. Indizes müssen vor ALTER COLUMN gelöscht und danach neu erstellt werden. Standardwerte sollten entsprechend geändert werden.
quelle
psql
viel schneller und einfacher finde . Ich habe vor einiger Zeitdas hat bei mir funktioniert.
Ändern Sie die varchar-Spalte in int
bekam:
chnged zu
quelle
Sie können es tun wie:
oder versuchen Sie dies:
Wenn Sie mehr über dieses Thema erfahren möchten, lesen Sie diesen Artikel: https://kolosek.com/rails-change-database-column
quelle
Versuchen Sie dies, es wird sicher funktionieren.
Wenn Sie Rails-Migrationen schreiben, um eine Zeichenfolgenspalte in eine Ganzzahl zu konvertieren, sagen Sie normalerweise:
PostgreSQL wird sich jedoch beschweren:
Der "Hinweis" sagt Ihnen im Grunde, dass Sie bestätigen müssen, dass dies geschehen soll und wie Daten konvertiert werden sollen. Sagen Sie dies einfach in Ihrer Migration:
Das Obige ahmt nach, was Sie von anderen Datenbankadaptern wissen. Wenn Sie nicht numerische Daten haben, können die Ergebnisse unerwartet sein (aber Sie konvertieren schließlich in eine Ganzzahl).
quelle
PG::InvalidTextRepresentation: ERROR: invalid input syntax for integer: ""
Fehler passiertIch habe das gleiche Problem. Dann wurde mir klar, dass ich einen Standardzeichenfolgenwert für die Spalte hatte, die ich ändern wollte. Durch Entfernen des Standardwerts wurde der Fehler behoben :)
quelle
Wenn Sie versehentlich oder nicht ganzzahlig mit Textdaten gemischt haben, sollten Sie zunächst den folgenden Aktualisierungsbefehl ausführen (falls nicht, schlägt das Ändern der Tabelle fehl):
quelle
regexp_replace(col_name, '[^0-9.]','','g')
wenn Sie versuchen, unerwünschte Zeichen und Leerzeichen zu entfernen. Sie würden etwas ein bisschen anspruchsvolle benötigen , wenn Sie behalten wollenNaN
undInf
und10E42
wissenschaftliche Notation, though.Wenn Sie an einer Entwicklungsumgebung arbeiten (oder an einer Produktionsumgebung, in der möglicherweise Ihre Daten gesichert werden), müssen Sie zuerst die Daten aus dem DB-Feld löschen oder den Wert auf 0 setzen.
Führen Sie danach die folgende Abfrage aus und führen Sie die Abfrage nach erfolgreicher Ausführung zur Schemamigration aus. Führen Sie anschließend das Migrationsskript aus.
Ich denke, es wird dir helfen.
quelle
Ich hatte das gleiche Problem. Ich fing an, die Standardeinstellung der Spalte zurückzusetzen.
quelle