【问题标题】:Converting NULL and '0000-00-00 00:00:00' to Non-NULL Using PGLoader MySQL to Postgres使用 PGLoader MySQL 到 Postgres 将 NULL 和 '0000-00-00 00:00:00' 转换为非 NULL
【发布时间】:2018-04-04 02:29:29
【问题描述】:

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

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

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

我已经考虑修改源表,使其日期类似于纪元时间,但这充其量只是临时修改,并且会根据 MySQL 表更改一些报告。

【问题讨论】:

    标签: mysql postgresql pgloader


    【解决方案1】:

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

    • 在导出数据之前,将 MySQL 数据更新为某个实际值,即 0000-00-00 00:00:00 或 NULL。不应使用任何特殊值来代替 NULL。

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

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

    【讨论】:

    • 感谢您的回复,比尔!我最终能够找到数据团队的中间立场,将 MySQL 端的所有 NULL 转换为 0000-00-00 00:00:00 并从那里转换。感谢完整性检查。
    猜你喜欢
    • 2014-02-19
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    相关资源
    最近更新 更多