PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Промяна на типа на полето varchar на цяло число:не може да се прехвърля автоматично към тип цяло число

Няма имплицитно (автоматично) предаване от text или varchar към integer (т.е. не можете да предадете varchar към функция, която очаква integer или задайте varchar поле към integer едно), така че трябва да посочите изрично предаване с помощта на ALTER TABLE ... ALTER COLUMN ... TYPE ... ИЗПОЛЗВАНЕ:

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

Имайте предвид, че може да имате празно пространство в текстовите полета; в този случай използвайте:

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

за премахване на бялото пространство преди конвертиране.

Това би трябвало да е очевидно от съобщение за грешка, ако командата е била изпълнена в psql , но е възможно PgAdmin-III да не ви показва пълната грешка. Ето какво се случва, ако го тествам в psql на 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        

Благодаря @muistooshort за добавянето на USING връзка.

Вижте също този свързан въпрос; става дума за миграции на Rails, но основната причина е същата и отговорът е приложим.

Ако грешката все още се появява, тогава тя може да не е свързана със стойности на колони, но индексите над тази колона или стойностите по подразбиране на колона може да не успеят да присвоят типа. Индексите трябва да бъдат премахнати преди ALTER COLUMN и да бъдат пресъздадени след това. Стойностите по подразбиране трябва да бъдат променени по подходящ начин.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да предоставим всички привилегии за изгледи на произволен потребител

  2. Django:разрешение е отказано при опит за достъп до база данни след възстановяване (миграция)

  3. Как бързо да премахнете потребител със съществуващи привилегии

  4. Намерете разликата между времевите марки в секунди в PostgreSQL

  5. В Rails не можах да създадем база данни за {adapter=>postgresql,