2012-11-14 13 views
5

私はopen_timeという文字列を作成しましたが、datetime型を使用する必要があります。私はPostgreSQLのタイムゾーンのないタイムスタンプに変更するカラムタイプを変更

change_column :polls, :open_time, :datetime 

をしました。しかし、それは言った:

PG::Error: ERROR: column "open_time" cannot be cast to type timestamp without time zone 
: ALTER TABLE "polls" ALTER COLUMN "open_time" TYPE timestamp 

私はちょうど私が文字列に格納されたデータを失うことになる、文字列の列を削除して、新しいdatetime型の列を追加する場合。また、PostgreSQLでは私が列を追加します。

ALTER TABLE polls ADD COLUMN published_time timestamp; 

は、その後、私は次のように文字列からデータを取得しようとしました:

UPDATE polls SET published_time = strToTimeStamp(open_time); 

だから私の質問は、私はそれができstrToTimeStampとして使用することができますが任意の関数であり、さタイムゾーンタイプのない文字変化型をタイムスタンプに変換する?

+2

あなたは 'ALTER COLUMN ... USING'をしたい:これらの非常によく似た質問の下

ALTER TABLE tbl ALTER COLUMN col TYPE timestamp USING to_timestamp(col, '<your pattern here>'); 

より。たとえば、http://stackoverflow.com/search?q=%5Bpostgresql%5D%20ALTER%20COLUMN%20using(near-dup) –

答えて

-3

データベースの機能によって制限されるため、これを行うことはできません。アイデアは、次のやっている:

  • は別の名前で新しい列を作成し
  • データは、各行
  • ドロップオリジナルコル用に変換した後、列の内容をコピー
  • 新しいCOLへと名前を変更します元の列名

これらのステップは、同じマイグレーションファイルに置くことができ、大文字と小文字を区別しないようにすることができます。

+0

を参照してください。もちろん、DBの機能によって可能です。 –

+0

あなたは、DBのcapailibityを使って、それを行うことができますが、それはレールを使用することです。たとえRaw SQLを使用してレール・マイグレーション内のデータベース列を変更することもできますが、プロジェクトが特定のデータベースに重点を置いていることを明確に理解していない限り、それは良い方法ではありません。 –

関連する問題