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

Rails thay đổi loại cột và cập nhật giá trị cột

Bạn có thể làm điều đó một lần khá dễ dàng bằng cách sử dụng mệnh đề USING của ALTER BẢNG :

Một kiểu truyền kiểu SQL đơn giản sẽ để lại cho bạn các chuỗi 'true''false' vì vậy bạn muốn thêm một SỬ DỤNG. Tôi sẽ bỏ qua AR và làm điều đó bằng tay:

connection.execute(%q(
  alter table users
  alter column active
  type text
  using case when active then 'active' else 'inactive' end
))

Phần quan trọng đối với bạn là using case ... một phần ở cuối. Bạn có thể sử dụng nó cùng với AR-ish change_column thông thường bằng cách lừa AR thực hiện Điều đúng:

class ChangeColumnTypeInUsers < ActiveRecord::Migration
  def up
    change_column :users, :active, "text using case when active then 'active' else 'inactive' end"
  end

  def down
    change_column :users, :active, "boolean using active = 'active'"
  end
end

Lưu ý rằng tôi đang sử dụng text như kiểu cột. Rails sẽ sử dụng varchar(255) bên trong cơ sở dữ liệu khi bạn nói :string không có giới hạn, điều đó khá vô nghĩa với PostgreSQL vì nó xử lý bộ nhớ cho tất cả các loại chuỗi khá giống nhau nội bộ , giới hạn độ dài trên char(n)varchar(n) thực sự làm cho chúng đắt hơn để sử dụng so với text . Sau đó, chỉ thời gian :string có ý nghĩa với PostgreSQL là khi bạn có lý do để bao gồm một :limit cụ thể (và sau đó là text cột có CHECK hạn chế về độ dài sẽ có ý nghĩa hơn nhưng AR quá ngu ngốc để biết về những thứ "nâng cao" như CHECK ràng buộc).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để cấu hình Cơ sở dữ liệu PostgreSQL?

  2. use \ set biến bên trong khối khai báo plpgsql

  3. Postgres:xác định giá trị mặc định cho lỗi CAST?

  4. Sự khác biệt giữa hai ngày trong postgresql

  5. Cập nhật phần (số đơn hàng) là khóa chính trong Postgres