5

在 Rails 中,我创建了一个名为 open_time 的字符串列,但后来我意识到我应该使用 datetime 类型。我做了

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

如果我只是删除字符串列并添加新的日期时间列,我将丢失存储在字符串列中的数据。或者,在 PostgreSQL 中我添加列:

 ALTER TABLE polls ADD COLUMN published_time timestamp;

然后我尝试从字符串列中获取数据,例如:

UPDATE polls SET published_time = strToTimeStamp(open_time);

所以我的问题是我可以使用任何函数strToTimeStamp来将字符变化类型转换为没有时区类型的时间戳?

4

2 回答 2

5

.. 有没有可以用作 strToTimeStamp 的函数,可以将字符变化类型转换为没有时区类型的时间戳?

用于to_timestamp()更改列的数据类型。

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

更多在这些非常相似的问题下:
Alter character field to date
Cast varchar type to date

于 2012-11-14T10:03:02.247 回答
-3

不要认为你可以这样做,因为它受到数据库能力的限制。这个想法正在做以下事情:

  • 创建了一个具有不同名称的新列
  • 每行数据转换后复制列内容
  • 删除原来的col
  • 将新 col 重命名为原始 col 名称

这些步骤可以放在同一个迁移文件中,并将它们保存在一个事务中以防万一。

于 2012-11-14T04:07:35.183 回答