2010-05-05 50 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