返回首页

gbase数据、南大通用产品文档:GBase8adblink 查询的语法约束

更新日期:2024年09月11日

db-link 查询语法约束如下

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
606

db-link 表只能出现在顶层查询,或同源dblink 的子查询中。出现在本地表
的子查询中时,必须放在relation 子查询中。

例如:如下语句会报语法错误,因为db-link 出现在本地表的子查询中时,
必须用relation 子查询包围。
select * from t1 where exists (select 1 from t2@gc_link as t2 where t2.id = t1.id);

该语句可以修改为如下形式,以保证符合语法规则:
select * from t1 where exists (select 1 from (select 1 from t2@gc_link) as t2 where t2.id
= t1.id);

同源的db-link 表可以直接JOIN。
dblink 表禁止与local table,
relation subquery,
非同源dblink 表,产生直接JOIN 关系。

例如:t1@gc_link JOIN t2@gc_link 是允许的;但t1@gc_link JOIN t2 是不
允许的,
因为db-link 表禁止与本地表直接JOIN,
可以改写SQL 语句为如
下形式:
… (select * from t1@gc_link) t, t2 …

db-link 表的子查询中,禁止出现本地表,非同源dblink 表。

例如:select * from t1@gc_link where exists (select 1 from t2);是不允许的,
因为db-link 表t1@gc_link 的子查询中出现了本地表t2。可以改写为如下
形式:
select * from (select * from t1@gc_link) t where exists (select 1 from t2);

group by 或order by 中的相关子查询,禁止出现db-link 表。

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
607
注意

如果仅仅是简单使用,如insert into local_table select * from 同源dblink
表,则可以忽略本节的约束。当查询存在db-link 表与本地表混用(例
如db-link 表JOIN 本地表),或与非同源db-link 表混用时,则需要
遵守如下语法约束,否则查询会报语法错误;

同源db-link 指db-link 的名字相同,名字不同的db-link 称为非同源
db-link。例如t1@gc_link 和t2@gc_link 被认为是同源db-link 的两个
表。t1@gc_link 和x1@gc_link2,被认为是非同源db-link 表,即使
gc_link 和gc_link2 在创建时,using 的是同一个数据源,由于其db-link
名字不同,仍然认为是非同源的。

位置:%GCICLIENTDIR%/etc/gci.conf 或者
%GBASEDBTDIR%/etc/gci.conf
缺省:可不配置。此情况下所有配置项都使用缺省值
参数:log_priority:日志打印的级别,可取的值包括:info、error,默认取值为error
log_file:日志文件的路径及名称,默认取值为:/var/log/gci_test.log
user_db:username:database,用于设置用户名和连接数据库名之间的映射关系,
非必需,也可通过应用程序使用连接字符串设置。
log_onoff:是否开启日志记录,设定“on”为开启,其他为关闭,缺省关闭
dsn_config:链接的数据源名称设定,缺省为”Infdrv1”

gci_factory:标识接口适配类型,当前取值为1/2/3,缺省为1.
Connect_mode:链接模式,取值1/2。缺省位1 表示链接使用数据库名字,2 表示使
用dsn 名字

注:%GCICLIENTDIR%表示GCI 接口库的安装路径

GBA-01LC-0003
错误码
错误标识
错误信息
GBA-01LC-0003

Invalid License
错误出现原因
无效的License
分析与建议
请申请License key