使用 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 表可以包含 NULL
或 0000-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 是表示缺失或不适用数据的合法方式。
当使用 pgloader 将表从 MySQL 移动到 Postgres 时,我 运行 遇到的一个问题是某些源 MySQL 表可以包含 NULL
或 0000-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 是表示缺失或不适用数据的合法方式。