有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

检查详情

如果目标库版本在12及以上,且待迁移的表包含abstimereltimetinterval三种数据类型,则校验任务报错。
abstimereltimetinterval数据类型是一些较旧的时间和日期类型,在新的 PostgreSQL 版本中已被废弃,建议使用以下类型进行替代:
abstime:可以使用 timestamptimestamp with time zone 类型来替代。这些类型提供了更广泛的日期和时间表示能力。
reltime:可以使用 interval 类型来替代。interval 类型用于表示时间间隔,可以包含年、月、日、小时、分钟、秒等单位。
tinterval:可以使用 tsrangetstzrange 类型来替代。这些类型用于表示时间范围,可以包含起始时间和结束时间。

修复方法

abstimereltimetinterval三种数据类型的修改方法类似,都是先新建一个列,将旧版数据格式转化为新版数据格式并存储在新列中,验证新列数据无误后删除旧的列,最后根据需要,将新的列重命名为旧的列的名称。
如下以将abstime修改为 timestamp 为例进行介绍。
1. 在校验任务提示报错的表中,新增一个 timestamp 类型的列。
ALTER TABLE your_table ADD COLUMN new_column TIMESTAMP;
2. 将 abstime 列的数据转换为 timestamp 类型,并将结果存储在新的列中。
UPDATE your_table SET new_column = your_abstime_column::TIMESTAMP;
3. 验证新的列中的数据是否正确。
SELECT * FROM your_table;
4. 如果确认新的列中数据正确,可以删除旧的 abstime 列。
ALTER TABLE your_table DROP COLUMN your_abstime_column;
5. 如果需要,可以将新的列重命名为旧的列的名称。
ALTER TABLE your_table RENAME COLUMN new_column TO your_abstime_column;