2

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

我经常遇到的一个示例错误是: 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",如果我理解正确的话,它会转换为NULLPostgres 中的一个值。是否有关键字可以转换为特定日期或非空值?也许是一种更理智的方法?

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

4

1 回答 1

0

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

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

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

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

于 2018-04-03T18:29:29.567 回答