postgresql - PL/PostgreSQL 如何将变量转换为表名
问题描述
所以我在 PostgreSQL 中有一个函数可以从动态表中动态选择列。我从这篇文章中得到了这个解决方案,它除了一件事之外效果很好。
这是连接到节点服务器的文件内部,因此第二个 SELECT * FROM 中的 $1 和 $2 表示从那里传递的值。现在的问题是我收到了一个我不理解的语法错误(我对 SQL 比较陌生,所以这可能就是原因)。
$2 表示要从中选择的表的名称作为字符串,例如它可以是“目标”。该错误是“'goals'”处或附近的语法错误。我意识到它不能是带单引号的字符串(我相信),所以我想知道如何将该变量转换为表名?在那里使用“目标”以及目标,例如按预期工作,但我不确定如何在函数之外执行此操作。
CREATE OR REPLACE FUNCTION get_data(user_id INT, table_name anyelement)
RETURNS SETOF ANYELEMENT AS $$
BEGIN
RETURN QUERY EXECUTE
format('SELECT * FROM %s WHERE user_id = $1', pg_typeof(table_name)) USING user_id;
END;
$$ LANGUAGE plpgsql;
SELECT * FROM get_data($1, NULL::$2);
例如,$1 是 5,$2 是“目标”
解决方案
经过几个小时的尝试,感谢 Adrian 的评论,我发现 MassiveJS(我如何连接到我的 PostgreSQL 服务器)具有内联函数来执行查询。在我服务器的控制器文件中,我能够创建一个这样的单行函数:
const data = await db[tableName].where("user_id=$1", [userId])
不知道 MassiveJS 中存在内联 SQL,所以很高兴发现!
推荐阅读
- c - 为什么三重嵌套 for 循环在 C 中第二次不起作用?
- wordpress - 为 WordPress MultiSite 网络中的所有子站点创建一致的主页 url
- c++ - 在 C++ 中全局初始化类的正确方法
- java - 我怎样才能带来统一格式的电话。数字
- c++ - 声明用于 qml 和 cpp 文件的全局字符串
- android - 如何访问此 api 在 Kotlin 中包含的每一个天气,我想将这些数据放入 RecyclerView 并显示为列表
- javascript - 如何从 LightningChart JS 隐藏特定的点形状?
- c++ - C++ 模板错误:“模板参数的显式指定参数无效”
- python - tkinter 代码对一些 gif 进行动画处理,但不是全部
- netlogo - BehaviorSpace Netlogo- Measure 使用这些报告器运行