sql >> データベース >  >> RDS >> PostgreSQL

Railsは列タイプを変更し、列値を更新します

    ALTERの USING句を使用すると、一度に簡単に実行できます。表 :

    単純な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風の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. OracleSQLクエリのログ

    2. JqueryAjaxを使用してMysqlからデータを取得する

    3. Postgresシーケンスによって生成された数値の穴/ギャップを修正する

    4. MySQLdbを使用してPythonからSQL分離レベルをどのように変更しますか?