Không có đúc (tự động) ẩn từ text
hoặc varchar
đến integer
(nghĩa là bạn không thể truyền một hàm varchar
cho một hàm mong đợi integer
hoặc gán một varchar
trường cho một trường integer
), vì vậy bạn phải chỉ định một biểu mẫu rõ ràng bằng cách sử dụng ALTER TABLE ... ALTER COLUMN ... TYPE. .. SỬ DỤNG :
ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (col_name::integer);
Lưu ý rằng bạn có thể có khoảng trắng trong các trường văn bản của bạn; trong trường hợp đó, sử dụng:
ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (trim(col_name)::integer);
để dải trắng trước khi chuyển đổi.
Điều này rõ ràng từ một thông báo lỗi nếu lệnh được chạy psql
, nhưng có thể PGAdmin-III không hiển thị cho bạn toàn bộ lỗi. Đây là những gì xảy ra nếu tôi kiểm tra nó psql
trên PostgreQuery 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
Cảm ơn @muistooshort đã thêm USING
liên kết.
Xem thêm câu hỏi liên quan này ; đó là về việc di chuyển Rails, nhưng nguyên nhân cơ bản là như nhau và câu trả lời được áp dụng.
Nếu lỗi vẫn xảy ra, thì nó có thể không liên quan đến các giá trị cột, nhưng các chỉ mục trên cột này hoặc các giá trị mặc định của cột có thể không thành công kiểu chữ. Các chỉ mục cần được loại bỏ trước ALTER COLUMN và được tạo lại sau. Giá trị mặc định nên được thay đổi một cách thích hợp.