我需要为urls
列添加唯一约束:
CREATE OR REPLACE FUNCTION myFunction() RETURNS TABLE(urls TEXT)
LANGUAGE plpgsql
AS $$
DECLARE
--my code
BEGIN
END;
如何使urls
列唯一?
答案 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();
要解决此问题,我可以创建临时表吗?
你可以。但请注意......
UNIQUE
,则会引发异常,并在违反约束时回滚整个事务。以避免引发异常使用INSERT .. ON CONFLICT (url) DO NOTHING
。更多: