如何添加UNIQUE约束来返回函数的列?

时间:2017-11-28 08:53:24

标签: postgresql duplicates unique plpgsql

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

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

如何使urls列唯一?

1 个答案:

答案 0 :(得分:1)

  

我希望不会立即获得其他表的结果和批量查询,并返回唯一结果

无法在函数的返回类型中添加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功能,您不需要PL / pgSQL来进行单UNION次查询。甚至也不是一个功能。普通(子)查询或VIEW是替代方案。

相关:

您只需返回函数中的所有内容:

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

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

SELECT DISTINCT url FROM myfunction();
  

要解决此问题,我可以创建临时表吗?

可以。但请注意......