Örtük (otomatik) dökme yoktur text
ya varchar
kadar integer
(bir geçemez sizi yani varchar
bekliyor bir işleve integer
veya atamak varchar
bir alanını integer
kullanarak açık döküm belirtmelisiniz, böylece biri) ALTER TABLE ... ALTER COLUMN ... TYPE. .. KULLANIMI :
ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (col_name::integer);
Metin alanlarınızda boşluk olabileceğini unutmayın; bu durumda şunları kullanın:
ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (trim(col_name)::integer);
dönüştürmeden önce beyaz boşluk şerit.
Bu komut, komut çalıştırıldıysa bir hata mesajından açıkça anlaşıldı psql
, ancak PgAdmin-III size tam hatayı göstermiyor olabilir. psql
PostgreSQL 9.2'de test edersem ne olur :
=> 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
USING
Bağlantıyı eklediğiniz için teşekkürler muistooshort .
Ayrıca bu ilgili soruya bakın ; Rails göçleri ile ilgili, ancak bunun altında yatan neden aynı ve cevap geçerli.
Hata devam ederse, sütun değerleri ile ilgili olmayabilir, ancak bu sütun veya sütun varsayılan değerleri üzerindeki dizinler yazım hatası yapılamayabilir. Endekslerin ALTER COLUMN öncesi bırakılması ve sonra yeniden oluşturulması gerekir. Varsayılan değerler uygun şekilde değiştirilmelidir.