Postgresql 聚合函数作为元组参数postgres

Postgresql 聚合函数作为元组参数postgres,postgresql,aggregate-functions,rx-java2,vert.x,timescaledb,Postgresql,Aggregate Functions,Rx Java2,Vert.x,Timescaledb,我想使用元组传递聚合函数,如min、max等作为查询参数 以下是我的疑问: "select $5(CAST (vol AS FLOAT)) AS agg_v, " + "time_bucket_gapfill" + "(($1::text || ' minutes')::interval, t) AS time_function_minute, " +

我想使用元组传递聚合函数,如min、max等作为查询参数

以下是我的疑问:

"select  $5(CAST (vol AS FLOAT)) AS agg_v, " 
                    + "time_bucket_gapfill" + "(($1::text || ' minutes')::interval, t) AS time_function_minute, " 
                    + "tag_id from rtdata "
                    + "where tag_id = any($2) and t > $3 and t < $4 "
                    + "GROUP BY (tag_id, time_function_minute) ORDER BY time_function_minute"

PostgreSQL只允许将参数用作值,并且在尝试将参数用于函数名、表名等时无法理解,因此无法将聚合名作为参数传递

我建议在应用程序中通过连接包含聚合函数名的字符串值来解决这个问题。我猜可能是这样,但我不确定确切的语法以及您的环境有哪些限制:

"select  "+ my_agg_func_name +"(CAST (vol AS FLOAT)) AS agg_v, " 
                    + "time_bucket_gapfill" + "(($1::text || ' minutes')::interval, t) AS time_function_minute, " 
                    + "tag_id from rtdata "
                    + "where tag_id = any($2) and t > $3 and t < $4 "
                    + "GROUP BY (tag_id, time_function_minute) ORDER BY time_function_minute"
“选择”+my_agg_func_name+(转换(vol AS FLOAT))作为agg_v,”
+“time_bucket_gapfill”+“($1::text | | |'minutes')::interval,t)作为time_function_minute,”
+“来自rtdata的标记\u id”
+“其中tag_id=任意($2)和t>3和t<4”
+分组依据(标记标识、时间、功能、分钟)顺序依据时间、功能、分钟

PostgreSQL只允许将参数用作值,并且在尝试将参数用于函数名、表名等时无法理解。因此,无法将聚合名作为参数传递

我建议在应用程序中通过连接包含聚合函数名的字符串值来解决这个问题。我猜可能是这样,但我不确定确切的语法以及您的环境有哪些限制:

"select  "+ my_agg_func_name +"(CAST (vol AS FLOAT)) AS agg_v, " 
                    + "time_bucket_gapfill" + "(($1::text || ' minutes')::interval, t) AS time_function_minute, " 
                    + "tag_id from rtdata "
                    + "where tag_id = any($2) and t > $3 and t < $4 "
                    + "GROUP BY (tag_id, time_function_minute) ORDER BY time_function_minute"
“选择”+my_agg_func_name+(转换(vol AS FLOAT))作为agg_v,”
+“time_bucket_gapfill”+“($1::text | | |'minutes')::interval,t)作为time_function_minute,”
+“来自rtdata的标记\u id”
+“其中tag_id=任意($2)和t>3和t<4”
+分组依据(标记标识、时间、功能、分钟)顺序依据时间、功能、分钟