当使用pgloader将表从MySQL移动到Postgres时,我遇到的一个问题是某些源MySQL表可以在NULL
中包含0000-00-00 00:00:00
或datetime
值字段,以及其中一些列的转换证明是有问题的。
我经常遇到的一个示例错误是:
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表更改一些报告。
答案 0 :(得分:0)
我想你已经知道你有两个选择:
在导出数据之前,将MySQL数据更新为某个实际值,其中的结果为00:00:00或NULL。您不应使用任何特殊值作为NULL的替代。
在PostgreSQL数据库中允许NULL,并将零日期时间值的数据导入为NULL。
NULL是表示丢失或不适用数据的合法方式。