sql >> Database >  >> RDS >> PostgreSQL

Wijzig het type varchar-veld in integer:kan niet automatisch worden gecast om integer te typen

Er is geen impliciete (automatische) cast van text of varchar naar integer (d.w.z. u kunt geen varchar doorgeven naar een functie die integer . verwacht of wijs een varchar . toe veld naar een integer one), dus je moet een expliciete cast specificeren met ALTER TABLE ... ALTER COLUMN ... TYPE ... USING:

ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (col_name::integer);

Houd er rekening mee dat er mogelijk witruimte in uw tekstvelden is; gebruik in dat geval:

ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (trim(col_name)::integer);

om witruimte te verwijderen alvorens te converteren.

Dit zou duidelijk moeten zijn uit een foutmelding als de opdracht werd uitgevoerd in psql , maar het is mogelijk dat PgAdmin-III u niet de volledige fout laat zien. Dit gebeurt er als ik het test in psql op PostgreSQL 9.2:

=> CREATE TABLE test( x varchar );
CREATE TABLE
=> insert into test(x) values ('14'), (' 42  ');
INSERT 0 2
=> ALTER TABLE test ALTER COLUMN x TYPE integer;
ERROR:  column "x" cannot be cast automatically to type integer
HINT:  Specify a USING expression to perform the conversion. 
=> ALTER TABLE test ALTER COLUMN x TYPE integer USING (trim(x)::integer);
ALTER TABLE        

Bedankt @muistooshort voor het toevoegen van de USING link.

Zie ook deze gerelateerde vraag; het gaat over Rails-migraties, maar de onderliggende oorzaak is hetzelfde en het antwoord is van toepassing.

Als de fout zich nog steeds voordoet, heeft deze mogelijk geen betrekking op kolomwaarden, maar indexen over deze kolom of kolomstandaardwaarden kunnen typecast mislukken. Indexen moeten vóór ALTER COLUMN worden verwijderd en daarna opnieuw worden gemaakt. Standaardwaarden moeten op de juiste manier worden gewijzigd.



  1. SQL Server verbinden met Oracle

  2. BadImageFormatException. Dit gebeurt bij het uitvoeren in 64-bits modus met de 32-bits Oracle-clientcomponenten geïnstalleerd

  3. Problemen oplossen Tabel niet gevonden fouten

  4. Waarschuwingen en meldingen van SkySQL