如何将 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
。更多:
我需要向 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
。更多: