转换NULL和' 0000-00-00 00:00:00'使用PGLoader MySQL到Postgres非NULL

时间:2018-04-03 18:13:00

标签: mysql postgresql pgloader

当使用pgloader将表从MySQL移动到Postgres时,我遇到的一个问题是某些源MySQL表可以在NULL中包含0000-00-00 00:00:00datetime值字段,以及其中一些列的转换证明是有问题的。

我经常遇到的一个示例错误是: ERROR Database error 23502: null value in column "created_at" violates not-null constraint.

鉴于该值必须为非null,那么理想的CAST语句是什么?我已经使用过:--cast "type date drop not null drop default using zero-dates-to-null",如果我理解正确,则会在Postgres中转换为NULL值。是否有关键字转换为特定日期或非空值?也许是一个更健全的方法?

我打算修改源表,以便它们的日期类似于纪元时间,但这最好是暂时的黑客攻击,并会根据MySQL表更改一些报告。

1 个答案:

答案 0 :(得分:0)

我想你已经知道你有两个选择:

  • 在导出数据之前,将MySQL数据更新为某个实际值,其中的结果为00:00:00或NULL。您不应使用任何特殊值作为NULL的替代。

  • 在PostgreSQL数据库中允许NULL,并将零日期时间值的数据导入为NULL。

NULL是表示丢失或不适用数据的合法方式。