更新时间:2026-07-28 GMT+08:00
分享

常见问题处理

ERROR: syntax error at 'XXXX'.

  • 场景一:关键字使用错误示例。
    gaussdb=# SELECT dsl_add_rule(
    'compute_const',
    'JOIN<> {ARGS: $expr: *}
    =>
    FILTER<> {ARGS: (expr_compute $expr)
    }',
    3,
    true);
    ERROR:  syntax error at 'JOIN'  --
    LINE 3: 'JOIN<> {ARGS: $expr: *}
             ^
    CONTEXT:  referenced column: dsl_add_rule

    根因分析:JOIN关键字使用错误,不能用于模板入口语法关键词,关键字使用请参考语法关键词语法规范。

  • 场景二:函数未使用‘(’‘)’进行分隔错误场景示例。
    gaussdb=# SELECT dsl_add_rule(
    'compute_const',
    'FILTER<> {ARGS: $expr: *}
    =>
    FILTER<> {ARGS: expr_compute $expr
    }',
    3,
    true);
    ERROR:  syntax error at 'expr_compute'
    LINE 5: FILTER<> {ARGS: expr_compute $expr
                            ^
    CONTEXT:  referenced column: dsl_add_rule

    根因分析:函数关键字及其入参变量未使用‘(’‘)’进行分隔,函数使用请参考函数语法规范。

ERROR: Duplicate key value violates unique constraint "gs_dsl_rewriterule_rulename_index".

场景:添加规则rulename重复错误示例。

-- 添加rulename为‘compute_const’的规则
gaussdb=# SELECT dsl_add_rule(
'compute_const',
'FILTER<> {ARGS: $expr: *}
=>
FILTER<> {ARGS: (expr_compute $expr)
}',
3,
true);
 dsl_add_rule  
---------------
 compute_const
(1 row)

-- 再次添加rulename为‘compute_const’的规则报错
gaussdb=# SELECT dsl_add_rule(
gaussdb(# 'compute_const',
gaussdb(# 'FILTER<> {ARGS: $expr : *}
gaussdb'# =>
gaussdb'# FILTER<> {ARGS: (expr_compute $expr)
gaussdb'# }',
gaussdb(# 3,
gaussdb(# true);
ERROR:  Duplicate key value violates unique constraint "gs_dsl_rewriterule_rulename_index".
DETAIL:  Key (rulename)=(compute_const) already exists.
CONTEXT:  referenced column: dsl_add_rule

根因分析:rulename需全局唯一,相关约束请查看以下章节的相关说明:

  • 非透明多写特性:请参见《参考》中“系统表和系统视图 > 系统表 > 基于DSL的规则引擎”章节。

相关文档