首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类型json aws dms postgres的输入语法无效

类型json aws dms postgres的输入语法无效
EN

Stack Overflow用户
提问于 2020-09-01 03:52:57
回答 3查看 2.7K关注 0票数 6

我正在运行一个任务,它将所有数据从postgres 10.4迁移到RDS postgres 10.4。无法迁移具有jsonb列的表。错误发生后,整个表只获得包含449行的suspended.Table。

我做了跟随错误的策略,仍然整个表暂停。"DataErrorPolicy":"IGNORE_RECORD","DataTruncationErrorPolicy":"IGNORE_RECORD","DataErrorEscalationPolicy":"SUSPEND_TABLE","DataErrorEscalationCount":1000,

我的期望是整个表应该被转移,如果有任何json错误,它可以忽略记录。我不知道为什么它给这个错误‘无效的输入语法类型json’,我已经检查了所有的json和所有的json是有效的。

在调试了更多之后,这个错误被认为是表错误,但是为什么呢?这就是为什么由于TableErrorPolicy是‘悬空_ table’而表被挂起的原因。为什么这个错误被认为是表错误而不是记录错误?

难道DMS不支持JSONB列,这就是为什么我们得到错误以下的原因吗?

日志:-

代码语言:javascript
运行
复制
2020-09-01T12:10:04 https://forums.aws.amazon.com/I: Next table to load 'public'.'TEMP_TABLE' ID = 1, order = 0 (tasktablesmanager.c:1817)
2020-09-01T12:10:04 https://forums.aws.amazon.com/I: Start loading table 'public'.'TEMP_TABLE' (Id = 1) by subtask 1. 
Start load timestamp 0005AE3F66381F0F (replicationtask_util.c:755)
2020-09-01T12:10:04 https://forums.aws.amazon.com/I: REPLICA IDENTITY information for table 'public'.'TEMP_TABLE': Query status='Success' Type='DEFAULT' 
Description='Old values of the Primary Key columns (if any) will be captured.' (postgres_endpoint_unload.c:191)
2020-09-01T12:10:04 https://forums.aws.amazon.com/I: Unload finished for table 'public'.'TEMP_TABLE' (Id = 1). 449 rows sent. (streamcomponent.c:3485)
2020-09-01T12:10:04 https://forums.aws.amazon.com/I: Table 'public'.'TEMP_TABLE' contains LOB columns, change working mode to default mode (odbc_endpoint_imp.c:4775)
2020-09-01T12:10:04 https://forums.aws.amazon.com/I: Table 'public'.'TEMP_TABLE' has Non-Optimized Full LOB Support (odbc_endpoint_imp.c:4788)
2020-09-01T12:10:04 https://forums.aws.amazon.com/I: Load finished for table 'public'.'TEMP_TABLE' (Id = 1). 449 rows received. 0 rows skipped.
Volume transferred 190376. (streamcomponent.c:3770)
2020-09-01T12:10:04 https://forums.aws.amazon.com/E: RetCode: SQL_ERROR SqlState: 22P02 NativeError: 1 Message: ERROR: invalid input syntax for type json; 
Error while executing the query https://forums.aws.amazon.com/ (ar_odbc_stmt.c:2648)
2020-09-01T12:10:04 https://forums.aws.amazon.com/W: Table 'public'.'TEMP_TABLE' (subtask 1 thread 1) is suspended (replicationtask.c:2471)

编辑-调试之后,这个错误被认为是表错误,但是为什么呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-03 03:11:16

在目标DB中,JSONB列数据类型必须为空。

注意-在我的例子中,在使JSONB列为可空之后,此错误消失了。

如AWS文件所述-

在本例中,AWS DMS将JSONB数据视为LOB列。在迁移的满载阶段,目标列必须为空。

Source.PostgreSQL.Prerequisites

https://aws.amazon.com/premiumsupport/knowledge-center/dms-error-null-value-column/

票数 9
EN

Stack Overflow用户

发布于 2020-09-01 05:48:12

AWS将PostgreSQL中的JSON数据类型视为LOB数据类型列。这意味着当您使用有限LOB模式时LOB大小限制适用于JSON数据。例如,假设有限LOB模式设置为4,096 KB。在本例中,任何大于4,096 KB的JSON数据都会在4,096 KB的限制范围内被截断,并在PostgreSQL中通过验证测试。

参考资料:被截断的AWS DMS - JSON数据类型

DataErrorPolicy更新:您可以调整错误处理任务设置以跳过错误行,方法是将的值设置为IGNORE_RECORD,该值确定在记录级别上与数据处理相关的错误时所采取的操作。数据处理错误的一些示例包括转换错误、转换中的错误和坏数据。默认情况是LOG_ERROR。IGNORE_RECORD,任务继续,该记录的数据将被忽略。

参考资料:AWS DMS -错误处理任务设置

票数 3
EN

Stack Overflow用户

发布于 2022-04-20 10:05:42

您提到您正在从PostgreSQL迁移到PostgreSQL。是否有使用AWS DMS的具体原因?

AWS文档:Source.PostgreSQL.Homogeneous

当您从PostgreSQL以外的数据库引擎迁移到PostgreSQL数据库时,AWS几乎总是最好的迁移工具。但是当您从数据库迁移到PostgreSQL数据库时,PostgreSQL工具可能会更有效。

..。

我们建议在以下条件下使用PostgreSQL数据库迁移工具(如pg_dump ):

  • 您有一个同构迁移,从源PostgreSQL数据库迁移到目标PostgreSQL数据库。
  • 您正在迁移整个数据库。
  • 本机工具允许您以最少的停机时间迁移数据。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63681133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档