云数据库 GAUSSDB-DATABASE LINK:注意事项

时间:2024-11-02 18:50:38

注意事项

  • DATABASE LINK特性只在A兼容版本下可以使用。
  • DATABASE LINK连接的远端数据库仅支持503.1及之后版本。
  • 用户需要保证本地和远端数据库的兼容性参数DBCOMPATIBILITY和GUC参数behavior_compat_options、a_format_dev_version、a_format_version取值一致。
  • DATABASE LINK连接开启session时会设置如下GUC参数。
    set search_path=pg_catalog, '$user', 'public';
    set datestyle=ISO;
    set intervalstyle=postgres;
    set extra_float_digits=3; 

    其他参数为远端设置的参数,远端参数与本地参数不同时,可能会出现数据显示格式不一致等情况,使用时应尽量保证远端与本地参数相同。

  • 使用前置准备:使用gs_guc在pg_hba.conf文件中添加白名单允许客户端连接。
    示例:gs_guc reload -I all -N all -Z datanode -h "host all all 192.168.11.11/32 sha256"

    详细配置参数信息参考gs_guc客户端认证策略设置。

  • 创建DATABASE LINK权限需要使用GRANT语法赋予,新建用户默认无权限,系统管理员拥有权限。详见GRANT相关说明。
  • 使用DATABASE LINK对远端表操作时,会在本地创建与远端对应的Schema,若本地不存在该表的元数据信息,会将元数据信息写入本地系统表中,此时会使用7级锁保证写入的一致性,持续到事务结束放锁,删除DATABASE LINK时会将相应的元数据信息删除。
  • 使用DATABASE LINK时在本地创建的表仅用于存储远端表的元数据信息,无法通过\d或pg_get_tabledef函数查询到表结构。
  • 如果业务中有长事务首次使用dblink操作远端对象,会持续持锁直到事务结束,其他首次使用dblink的事务会被阻塞。可通过一条快速执行的语句先对要使用的远端对象做查询操作使其元数据落盘来规避这种情况,如 "select * from t1@dblink where 1=2;"。另外,远端表结构发生变化时本地要更新存储的元数据信息,也会有类似情况。
  • 如果本地与远端字符集不同,可能会出现无法转换的报错,报错信息为远端返回报错。当本地数据库字符编码为gb18030_2022时,发送到远端会被转换为gb18030。因此,若本地数据库的字符集为GB18030_2022时,远程数据库字符集只能是GB18030或GB18030_2022。
  • 在本地创建与远端对应的SCHEMA时会使用“USERNAME(私有DATABASE LINK才有)#远端SCHEMA@DBLINK名”做为SCHEMA名,名称长度上限为63。

    当赋予用户创建DATABASE LINK权限时,相当于许可用户使用服务端DATABASE的IP对远端进行访问。若不希望有此效果,应不要使用GRANT对用户赋权。

support.huaweicloud.com/centralized-devg-v3-gaussdb/gaussdb-12-0668.html