PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Rails променя типа на колоната и актуализира стойностите на колоната

Можете да го направите наведнъж доста лесно, като използвате клаузата USING на ALTER ТАБЛИЦА :

Едно просто преобразуване на SQL тип ще ви остави с низовете 'true' и 'false' така че искате да добавите USING. Бих заобиколил AR и бих го направил на ръка:

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

Важната част за вас е using case ... част в края. Можете да го използвате заедно с обичайния AR-ish change_column неща, като подмами AR да направи правилното нещо:

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

Имайте предвид, че използвам text като тип колона. Rails ще използва varchar(255) вътре в базата данни, когато кажете :string без ограничение, това е доста безсмислено с PostgreSQL, тъй като той обработва съхранението за всички типове низове почти по същия начин вътрешно , ограниченията за дължина на char(n) и varchar(n) всъщност ги прави по-скъпи за използване от text . След това само време :string има смисъл с PostgreSQL, когато имате причина да включите конкретен :limit (и след това text колона с CHECK ограничението върху дължината би имало повече смисъл, но AR е твърде тъп, за да знае за "разширени" неща като CHECK ограничения).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Индекси на таблици за колони на масив Text[].

  2. Обединяване на връзки към база данни на Celery Worker

  3. Относно полезността на индексите на изразяване

  4. PostgreSQL срещу версии на ядрото на Linux

  5. PHP Postgres:Вземете ID на последното вмъкване