我有两个表--在Microsoft中我们称之为tbl_parent和tbl_child,并试图将这些表的数据传输到AWS极光PostgreSQL。
在这里,tbl_child在tbl_parent上有一个外键引用,因此为了避免在满载期间出现FK问题,我提到了tbl_parent比表tbl_child更高的加载顺序。在aws 文档中也提出了同样的观点。
因此,在加载顺序设置下,我希望只有在用tbl_child完成完全插入之后才会将数据插入到tbl_parent中。
此外,我还希望对子表执行并行加载,因此我已经指定了表设置规则,以按照aws 文档中的建议执行并行加载。
由于某些原因,我看到tbl_child中的数据甚至在tbl_parent加载完成之前就被插入了,并且我得到了外键问题,如下所示.
2021-07-14T18:53:43 TARGET_LOAD W: Load命令输出: psql: /usr/lib 64/libcom_err.so.2:没有可用的版本信息(/rdsdbbin/awsdms/awsdms/lib/libgssapi_krb5.so.2所要求的) psql: /usr/lib 64/libcom_err.so.2:没有可用的版本信息(/rdsdbbin/awsdms/lib/librb5.so.3所要求的)错误:插入或更新表"tbl_child“违反外键约束"tbl_child_tbl_parent”_fkey“DETAIL: Key (parent_id)=(1468137)”不在表"tbl_parent“中。(csv_target.c:1018)
如果有帮助,请在下面查找映射规则json
{
"rules": [
{
"rule-type": "selection",
"rule-id": "101",
"rule-name": "101",
"object-locator": {
"schema-name": "dbo",
"table-name": "tbl_parent"
},
"rule-action": "include",
"filters": [],
"load-order": 2
},
{
"rule-type": "selection",
"rule-id": "102",
"rule-name": "102",
"object-locator": {
"schema-name": "dbo",
"table-name": "tbl_child"
},
"rule-action": "include",
"filters": [],
"load-order": 1
},
{
"rule-type": "table-settings",
"rule-id": "131",
"rule-name": "Parallel_Range_Child",
"object-locator": {
"schema-name": "dbo",
"table-name": "tbl_child"
},
"parallel-load": {
"type": "ranges",
"columns": [
"child_id"
],
"boundaries": [
[
"100"
],
[
"200"
],
[
"300"
]
]
}
}
]
}发布于 2021-07-15 06:38:48
如果希望严格控制加载顺序,例如,完成一个表然后完成另一个表,则必须设置maxFullloadsubtasks=1。
实际上,为了避免此类问题,一种方法是禁用目标db中的FK/RI检查,这些选项在Server/MySQL/Oracle中是a/v,但在PgSQL中似乎不是a/v。总之,您使用DMS进行full + CDC的步骤可能:
https://stackoverflow.com/questions/68384148
复制相似问题