Postgres:table 中的函数检查重复项

Postgres: Function check duplicates in table

我 table 有多个副本,我想从这些函数中创建一个函数。你能帮我用这段代码做一个函数吗?谢谢。

SELECT id_member,id_service,amount,date, count(*) as number_of_duplicates
from evidence
GROUP BY id_member,id_service,amount,date
HAVING COUNT(*) > 1;


CREATE OR REPLACE FUNCTION check_for_duplicates()
RETURNS VOID AS
$BODY$
BEGIN
SELECT id_member,id_service,amount,date, count(*) as number_of_duplicates
from evidence
GROUP BY id_member,id_service,amount,date
HAVING COUNT(*) > 1;
END;
$BODY$
LANGUAGE ‘plpgsql‘;

如果一个函数应该 return 一个结果集,它需要被声明为 returns table ()returns setof

您也不需要 PL/pgSQL 函数,一个简单的 SQL 函数就可以,而且效率更高:

CREATE OR REPLACE FUNCTION check_for_duplicates()
RETURNS table (id_member integer, id_service integer, amount numeric, date date, number_of_duplicates bigint) 
$BODY$
  SELECT id_member,id_service,amount,date, count(*) as number_of_duplicates
  from evidence
  GROUP BY id_member,id_service,amount,date
  HAVING COUNT(*) > 1;
$BODY$
LANGUAGE sql;

您没有向我们展示 table evidence 的定义,所以我不得不猜测列的数据类型。您需要调整 returns table (...) 部分中的类型以匹配 table 中的类型。

话虽如此:我会为这样的事情创建一个视图,而不是一个函数。


无关,但是:date 是一个糟糕的列名称。一方面是因为它也是一个关键字,但更重要的是它没有记录该列包含的内容:发布日期?到期日?预产期?