2010-05-05 49 views
1

我想要一个表中的内容复制到另一个Postgres里,但它似乎有些行没有被正确复制:复制整张表的Postgres

ActiveRecord::StatementInvalid: PGError: ERROR: column "email_date" is of type timestamp without time zone but expression is of type character varying HINT: You will need to rewrite or cast the expression.

有什么办法,我可以让它自动跳过(或忽略)无效行?

下面是我使用的查询:

SET statement_timeout = 0; INSERT INTO emails3 SELECT * FROM emails 

回答

1

正如消息说,这不是“一些无效行”的问题,你有不兼容的类型 为email_date列。要么解决这个问题,要么在查询中写明显的转换。

更新:如果(因为它似乎),你要复制的内容表的模式(即创建一个具有相同架构的新表,并复制的内容),你可以简单地用SELECT INTO做。

+0

谢谢,你知道它是否是电子邮件3有错误的列类型或电子邮件?有没有简单的方法让我检查? 我正在使用Rails,当我在控制台中输入“Email”查看电子邮件表格的模型时,它显示email_date列的类型是datetime。对于Rails迁移和Postgres,这对应于“时间戳”。 – NudeCanalTroll 2010-05-05 12:12:58

+0

查看表的架构 - 您是否有权访问psql控制台?我猜源是一个字符,目标(emails3.email_date)是一个时间戳。但是这并不是说哪一个是“错误的”。 – leonbloy 2010-05-05 12:19:37

+0

好吧,太好了。为了确保两个表具有完全相似的结构,我最终这样做了:“CREATE TABLE emails3 AS SELECT * FROM emails WHERE 1 = 2”。之后,我的INSERT INTO能够通过。谢谢你的帮助! – NudeCanalTroll 2010-05-05 12:58:26