如何将 UNIQUE 约束添加到函数的 return 列?

How to add UNIQUE constraint to return column of a function?

我需要向 urls 列添加唯一约束:

CREATE OR REPLACE FUNCTION myFunction()  RETURNS TABLE(urls  TEXT)
LANGUAGE plpgsql
AS $$
DECLARE
--my code
BEGIN
END;

如何使 urls 列唯一?

I want get results of other table with batch queries not at once and return unique results

无法像在 table 定义中那样向函数的 return 类型添加 UNIQUE 约束。

您可以使用 UNION(而不是 UNION ALL)来获取这样的唯一网址:

CREATE OR REPLACE FUNCTION myfunction()
  RETURNS TABLE(url TEXT) AS  -- singular term "url" makes more sense
$func$
BEGIN

RETURN QUERY
SELECT url FROM ...
UNION
SELECT url FROM ...
-- more?
;

END
$func$  LANGUAGE plpgsql;

这是一项 SQL 功能,对于单个 UNION 查询,您不需要 PL/pgSQL。甚至没有功能。普通(子)查询或 VIEW 是备选方案。

相关:

  • PostgreSQL combine multiple select statements
  • Combine two SELECT queries in PostgreSQL
  • Function to loop through and select data from multiple tables

你只需return函数中的所有内容:

...
RETURN QUERY SELECT url FROM ...;
RETURN QUERY SELECT url FROM ...;
-- more ?
...

并在 调用 中删除重复结果,如:

SELECT DISTINCT url FROM myfunction();

To resolve the issue can I create temporary table?

可以。但要注意...

  • 那个更贵。
  • 如果定义列 UNIQUE,如果违反约束,则会引发异常并回滚整个事务。
  • 为避免引发异常,请使用 INSERT .. ON CONFLICT (url) DO NOTHING。更多: