我有一个表VARCHAR
为PRIMARY_KEY
,所以我的ID是随机生成的,看起来像WUoN5VemT
或MQvOQidTi
。我只想写一个函数,它需要一个数组作为输入并返回数组中包含的所有元素。我想下面的半代码将表现出更好的更好的方式:Postgres数组作为函数输入为where子句
CREATE OR REPLACE FUNCTION public."getInfo" (
"myIDs" varchar []
)
RETURNS varchar AS
$body$
BEGIN
SELECT * FROM "myTable" WHERE "id" IN($1) ORDER BY "idDate" DESC;
-- RETURN etc....
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
但问题是该阵列可以包含50个或更多项(100也是可以的),所以我需要尽可能快地做到这一点可能。接下来的问题是,上面的代码不起作用。我经常使用IN
关键字找到多个值的解决方案,但有什么方法可以将数组和条目组合?
有没有机会使用函数来实现这个功能?
谢谢,但通过添加“ODER BY id_date DESC”得到以下错误: 查询失败:错误:列“id_date”必须出现在GROUP BY子句中或用于集合函数LINE 1: (SELECT)unterm($ 1))x(id)USING(id)ORDER BY“id_date”^ QUERY:SELECT(SELECT COUNT(*)FROM“myTable”JOIN使用(id)ORDER BY“myTable”。“id_date”DESC)语境:PL/pgSQL函数“get_info”。 出于测试目的,我将计算SELECT语句的结果。这将在稍后被替换... – Nrgyzer 2012-03-22 17:44:22
@Nrgyzer:你以一种不可能的方式改变了功能(我测试过它的功能)。你不能同时计算(*)和ORDER BY id_date。请更新你的问题与你实际想要达到的目标。 – 2012-03-22 17:52:39
嗯,好的...我刚刚删除了COUNT(*),它的工作原理,很棒......并感谢您的帮助:) – Nrgyzer 2012-03-22 17:55:50