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

Converting NULL and '0000-00-00 00:00:00' to Non-NULL Using PGLoader MySQL to Postgres

当使用 pgloader 将表从 MySQL 移动到 Postgres 时,我 运行 遇到的一个问题是某些源 MySQL 表可以包含 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 数据更新为实际值 0000-00-00 00:00:00 或 NULL。您不应使用任何特殊值代替 NULL。

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

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