配置对象映射和转换规则¶
SynchDB 具有默认的名称和数据类型映射规则来处理传入的更改事件。大多数情况下,默认规则即可正常工作。但是,如果您有特定的转换要求,或者默认规则不适合您,则可以为特定连接器配置自己的对象映射规则。
synchdb_add_objmap¶
此实用函数可用于配置表名、列名、数据类型以及转换规则。它需要 4 个参数:
参数 | 描述 | 必需 | 示例 | 备注 |
---|---|---|---|---|
name |
此连接器的唯一标识符 | ✓ | 'mysqlconn' |
必须在所有连接器中唯一 |
object type |
对象映射的类型 | ✓ | 'table' |
可以是 table 来映射表名,column 来映射列名,datatype 来映射数据类型,或 transform 来运行数据转换表达式 |
source object |
以完全限定名称表示的源对象 | ✓ | inventory.customers |
远程数据库中的对象名称 |
destination object |
目标对象名称 | ✓ | 'schema1.people' |
PostgreSQL 端的目标对象名称。可以是完全限定表名、列名、数据类型或转换表达式 |
配置表名映射¶
source object
表示远程数据库中以完全限定名称表示的表destination object
表示 PostgreSQL 中的表名。它可以只是一个名称(默认为公共架构)或 schema.name 格式。
此示例将源数据库中的 inventory.customers
表映射到 PostgreSQL 中的 schema1.people
。
SELECT synchdb_add_objmap('mysqlconn','table','inventory.customers','schema1.people');
配置列名映射¶
源对象
表示远程数据库中完全限定名称的列目标对象
表示 PostgreSQL 中的列名。无需将其格式化为完全限定列名。
此示例将源表中的 inventory.customers.email
列映射到 PostgreSQL 中的 contact
。
SELECT synchdb_add_objmap('mysqlconn','column','inventory.customers.email','contact');
配置数据类型映射¶
源对象
可以表示为以下之一:- 完全限定列 (inventory.geom.g)。这意味着数据类型映射仅适用于此特定列。
-
通用数据类型字符串 (int)。如果是自增数据类型,请使用竖线 (|) 添加(int|true 表示自增 int),否则使用竖线 (|) 添加(int|false 表示非自增 int)。这意味着数据类型映射适用于所有符合条件的数据类型。
-
destination object
应表示为 PostgreSQL 中存在的通用数据类型字符串。使用竖线 (|) 覆盖大小(text|0 将大小覆盖为 0,因为 text 是可变大小)或(varchar|-1 使用 change 事件附带的任何大小)。
此示例将所有非自增 point
数据类型映射到 PostgreSQL 中的 text
数据类型。
SELECT synchdb_add_objmap('mysqlconn','datatype','point|false','text|0');
此示例将表 inventory.geom
的列 g
的数据类型映射到 PostgreSQL 中的 geometry
。
SELECT synchdb_add_objmap('mysqlconn','datatype','inventory.geom.g','geometry|0');
配置转换规则¶
源对象
表示要转换的列目标对象
表示在将列数据应用于 PostgreSQL 之前要对其运行的表达式。使用 %d 作为输入列数据的占位符。如果是几何类型,则使用 %w 表示 WKB,%s 表示 SRID。
此示例将在 SynchDB 收到的“inventory.products.name”列的值前添加“>>>>>”并在其后添加“<<<<<”。
SELECT synchdb_add_objmap('mysqlconn','transform','inventory.products.name','''>>>>'' || ''%d'' || ''<<<<<''');
此示例将始终在 SynchDB 收到的“inventory.orders.quantity”列的值后添加 500:
SELECT synchdb_add_objmap('mysqlconn','transform','inventory.orders.quantity','%d + 500');
** 使用规则**¶
如果连接器未运行,规则会在下次启动时通过 synchdb_start_engine_bgw
自动应用。
如果连接器已在运行,规则不会自动应用,我们必须告诉连接器重新加载对象映射规则,并使用实用函数 synchdb_reload_objmap
来应用规则。
SELECT synchdb_reload_objmap('mysqlconn');