问答 查看内容
返回列表

表格填报权限自由模式配置 CURRENT_USER 后,查看数据报 PostgreSQL 语法错误

17 1
发表于 昨天 15:50 | 查看全部 阅读模式
在表单数据权限中使用自由模式配置权限公式后,查看数据时报错:
获取数据失败: org.postgresql.util.PSQLException:ERROR: syntax error at or near "CURRENT_USER_MOCK_FM_ID"Position: 936当前配置类似:
[所属单位] in [CURRENT_USER.财务统计单位]补充说明:这里的 PostgreSQL 不是 BI 直连 PostgreSQL 数据集,而是抽取数据集/表单链路中后台执行时报出的错误。

评论1

观小年楼主Lv.1 发表于 昨天 15:51 | 查看全部
这个报错不是抽取数据集本身的问题,也不是 BI 直连 PostgreSQL 行权限语法问题。日志显示实际报错发生在 SurveyEngine 的表单数据接口:

POST /api/form/{fmId}/data
com.guandata.survey.server.service.DataService.getData

也就是说,查看表单数据时,SurveyEngine 会根据表单数据权限拼接 SQL,并落到 SurveyEngine 自己的数据存储库执行。当前环境该存储库使用 PostgreSQL,因此错误信息中会出现 PostgreSQL 的 PSQLException。

根因是自由模式中的 in 写法不合法:

[所属单位] in [CURRENT_USER.财务统计单位]

SurveyEngine 自由模式会把 [CURRENT_USER.财务统计单位] 解析为一个模拟的当前用户属性临时表字段,内部别名类似:

"CURRENT_USER_MOCK_FM_ID"."财务统计单位字段"

但 PostgreSQL 的 IN 右侧必须是列表或子查询,例如 IN (...),不能直接接一个字段引用,所以最终 SQL 会语法错误。

如果 财务统计单位 是单值,建议改为:

[所属单位] = [CURRENT_USER.财务统计单位]

如果 财务统计单位 是逗号分隔的多值,例如 A,B,C,建议改为 PostgreSQL 可执行的包含判断:

POSITION(',' || [所属单位] || ',' IN ',' || [CURRENT_USER.财务统计单位] || ',') > 0

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2026 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去回复 去发帖 返回顶部
快速回复 返回顶部 返回列表