在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
如果我只删除字符串列并添加新的datetime列,我将丢失存储在字符串列中的数据。或者,在PostgreSQL中我添加列:
ALTER TABLE polls ADD COLUMN published_time timestamp;
然后我尝试从字符串列中获取数据,如:
UPDATE polls SET published_time = strToTimeStamp(open_time);
所以我的问题是有没有我可以用作strToTimeStamp
的函数可以将字符变化类型转换为没有时区类型的时间戳?
答案 0 :(得分: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
答案 1 :(得分:-3)
不要认为你能做到这一点,因为它受到数据库能力的限制。这个想法正在做:
这些步骤可以放在同一个迁移文件中,并保存到事务中以防万一。