PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zmień typ pola varchar na integer:nie można automatycznie rzutować na typ integer

Nie ma niejawnego (automatycznego) rzutowania z text lub varchar na integer (tj. nie możesz przekazać varchar do funkcji oczekującej integer lub przypisz varchar pole na integer jeden), więc musisz określić jawne rzutowanie za pomocą ALTER TABLE ... ALTER COLUMN ... TYPE ... USING:

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

Zauważ, że możesz mieć białe znaki w swoich polach tekstowych; w takim przypadku użyj:

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

usunąć białe znaki przed konwersją.

To powinno być oczywiste z komunikatu o błędzie, jeśli polecenie zostało uruchomione w psql , ale możliwe, że PgAdmin-III nie pokazuje pełnego błędu. Oto, co się stanie, jeśli przetestuję go w psql na 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        

Dziękujemy @muistooshort za dodanie USING link.

Zobacz także to powiązane pytanie; chodzi o migracje Railsów, ale podstawowa przyczyna jest ta sama i odpowiedź ma zastosowanie.

Jeśli błąd nadal występuje, może to być związane nie z wartościami kolumn, ale indeksy nad tą kolumną lub wartościami domyślnymi kolumny mogą zakończyć się niepowodzeniem rzutowania typu. Indeksy muszą zostać usunięte przed ALTER COLUMN i ponownie utworzone po. Wartości domyślne należy odpowiednio zmienić.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. psycopg2 odpowiednik mysqldb.escape_string?

  2. SQL - Łączenie wielu podobnych zapytań

  3. Jaki jest najszybszy sposób skrócenia znaczników czasu do 5 minut w Postgresie?

  4. Postgres/JSON - zaktualizuj wszystkie elementy tablicy

  5. Konwertuj nazwę miesiąca na numer miesiąca w PostgreSQL