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

Thay đổi loại cột thành chuỗi dài hơn trong đường ray

Bạn nên sử dụng text với Rails nếu bạn muốn một chuỗi không có giới hạn độ dài. Sự di chuyển như thế này:

def up
  change_column :your_table, :your_column, :text
end
def down
  # This might cause trouble if you have strings longer
  # than 255 characters.
  change_column :your_table, :your_column, :string
end

nên sắp xếp mọi thứ. Bạn có thể muốn :null => false hoặc một số tùy chọn khác ở cuối quá trình đó.

Khi bạn sử dụng string cột không có giới hạn rõ ràng, Rails sẽ thêm một :limit => 255 ngầm định . Nhưng nếu bạn sử dụng text , bạn sẽ nhận được bất kỳ loại chuỗi có độ dài tùy ý nào mà cơ sở dữ liệu hỗ trợ. PostgreSQL cho phép bạn sử dụng varchar cột không có độ dài nhưng hầu hết cơ sở dữ liệu sử dụng một loại riêng biệt cho điều đó và Rails không biết về varchar không có chiều dài. Bạn phải sử dụng text trong Rails để lấy text trong PostgreSQL. Không có sự khác biệt trong PostgreSQL giữa một cột loại text và một loại varchar (but varchar(n) khác nhau). Hơn nữa, nếu bạn đang triển khai trên PostgreSQL, không có lý do gì để sử dụng :string (AKA varchar ) ở tất cả, cơ sở dữ liệu xử lý textvarchar(n) giống nhau bên trong ngoại trừ các ràng buộc về độ dài bổ sung cho varchar(n); bạn chỉ nên sử dụng varchar(n) (AKA :string ) nếu bạn có một ràng buộc bên ngoài (chẳng hạn như biểu mẫu của chính phủ nói rằng trường 432 trên biểu mẫu 897 / B sẽ dài 23 ký tự) về kích thước cột.

Ngoài ra, nếu bạn đang sử dụng string ở bất kỳ đâu, bạn phải luôn chỉ định :limit như một lời nhắc nhở cho bản thân rằng có một giới hạn và bạn nên xác thực trong mô hình để đảm bảo rằng giới hạn đó không bị vượt quá. Nếu bạn vượt quá giới hạn, PostgreSQL sẽ phàn nàn và đưa ra một ngoại lệ, MySQL sẽ lặng lẽ cắt bớt chuỗi hoặc khiếu nại (tùy thuộc vào cấu hình máy chủ), SQLite sẽ để nó vượt qua nguyên trạng và các cơ sở dữ liệu khác sẽ làm điều gì đó khác (có thể là phàn nàn) .

Ngoài ra, bạn cũng nên phát triển, thử nghiệm và triển khai trên cùng một cơ sở dữ liệu (thường sẽ là PostgreSQL tại Heroku), thậm chí bạn nên sử dụng các phiên bản tương tự của máy chủ cơ sở dữ liệu. Có những khác biệt khác giữa các cơ sở dữ liệu (chẳng hạn như hoạt động của GROUP BY) mà ActiveRecord sẽ không cách ly bạn. Bạn có thể đã làm điều này rồi nhưng tôi nghĩ dù sao thì tôi cũng sẽ đề cập đến nó.

Cập nhật :Các phiên bản ActiveRecord mới hơn không hiểu varchar không có giới hạn, vì vậy, với PostgreSQL ít nhất, bạn có thể nói:

change_column :your_table, :your_column, :string, limit: nil

để thay đổi varchar(n) cột thành varchar . textvarchar vẫn giống như PostgreSQL có liên quan nhưng một số trình tạo biểu mẫu sẽ xử lý chúng theo cách khác:varchar nhận được một <input type="text"> trong khi text nhận được một <textarea> nhiều dòng .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dữ liệu lớn với PostgreSQL và Apache Spark

  2. PGEast, Đo điểm chuẩn phần cứng và Trang trại hiệu suất PG

  3. Sử dụng Hàm tương quan PostgreSQL

  4. DROP TABLE IF EXISTS Ví dụ trong PostgreSQL

  5. datagrip Không thể áp dụng các thay đổi Bảng này chỉ được đọc. Không thể áp dụng các thay đổi của trình chỉnh sửa ô