postgresql - 如何使用作为参数传递给 plpgsql 函数的列名执行查询?
问题描述
我在 PostgreSQL 中有一个包含多列的表。我尝试让一个函数返回一个包含一些默认列和一个变量列的表。列名应作为函数参数传递。例子:
SELECT * FROM get_gas('temperature');
这是我现在的代码:
CREATE OR REPLACE FUNCTION get_gas(gas text)
RETURNS TABLE (id INTEGER, node_id INTEGER,
gas_name DOUBLE PRECISION,
measurement_timestamp timestamp without time zone )
AS
$$
BEGIN
SELECT measurements_lora.id, measurements_lora.node_id, gas, measurements_lora.measurement_timestamp
AS measure
FROM public.measurements_lora;
END
$$ LANGUAGE plpgsql;
例如,当将“温度”作为列名 ( gas
) 传递时,我想从函数调用中获取包含这些列的表。
id - node_id - temperature - measurement_timestamp
我将如何实现这一目标?
解决方案
你可以使用EXECUTE
语句。
CREATE OR REPLACE FUNCTION get_gas(gas text) RETURNS TABLE (f1 INTEGER, f2 INTEGER, f3 DOUBLE PRECISION, f4 timestamp without time zone ) AS
$$
DECLARE
sql_to_execute TEXT;
BEGIN
SELECT 'SELECT measurements_lora.id,
measurements_lora.node_id, '
|| gas ||',
measurements_lora.measurement_timestamp AS measure
FROM public.measurements_lora '
INTO sql_to_execute;
RETURN QUERY EXECUTE sql_to_execute;
END
$$ LANGUAGE plpgsql;
sql_to_execute
这将使用您的字段和创建一个变量。QUERY EXECUTE
将执行您的解释查询。
编辑1:查看有关安全问题的另一个答案。
推荐阅读
- javascript - 使用 Nodejs 进行 Html 重定向
- excel-formula - MS excel 2013 相关查询
- linux - 如何注册程序选项以便它们可以使用选项卡自动完成?
- material-ui - 具有不同变体的 Material-UI 排版
- jquery - Shopify cart.item_count 未使用 AJAX onclick 功能更新
- python - 在 Tkinter GUI 中显示 SQLite 特定数据
- javascript - 如何根据特定关键字删除 JSON 对象
- java - SpringBoot 中的补丁
- llvm - 如何制定新的 LLVM 指令?
- flutter - 如何在颤振中修复过多的变量