PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Thay đổi loại trường varchar thành số nguyên:không thể được truyền tự động thành loại số nguyên

Không có truyền ngầm (tự động) nào từ text hoặc varchar thành integer (tức là bạn không thể vượt qua varchar đến một hàm mong đợi integer hoặc gán một varchar trường thành một số nguyên integer một), vì vậy bạn phải chỉ định một diễn viên 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 mình; trong trường hợp đó, hãy sử dụng:

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

để loại bỏ khoảng trắng trước khi chuyển đổi.

Điều này rõ ràng là từ một thông báo lỗi nếu lệnh được chạy trong 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ì sẽ xảy ra nếu tôi kiểm tra nó trong psql trên 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        

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à giống nhau và câu trả lời sẽ á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 đánh máy được. Chỉ mục cần được loại bỏ trước ALTER COLUMN và tạo lại sau đó. Giá trị mặc định phải được thay đổi một cách thích hợp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JPA tuôn ra so với cam kết

  2. Sao lưu PostgreSQL bằng pg_dump và pg_dumpall

  3. Ưu tiên dựa trên thời gian trong Truy vấn Bản ghi Hoạt động

  4. Làm thế nào để sử dụng lại kết quả cho các mệnh đề SELECT, WHERE và ORDER BY?

  5. Xóa các hàng trùng lặp khỏi bảng nhỏ