【问题标题】:How to add UNIQUE constraint to return column of a function?如何添加唯一约束来返回函数的列?
【发布时间】:2018-05-11 15:56:29
【问题描述】:

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

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

如何使urls 列唯一?

【问题讨论】:

  • Edit您的问题并添加一些sample data 和基于该数据的预期输出。 Formatted textno screen shotsedit 您的问题 - 请不要在 cmets 中提供邮政编码或其他信息。
  • 是什么让你思考,你需要它的功能?..
  • 我不想创建新表。
  • 您不能直接对函数的结果应用任何约束(返回类型的自然约束除外)。确保这些值在函数体内是唯一的。
  • 我想通过批量查询获取其他表的结果,而不是一次返回唯一的结果

标签: postgresql duplicates unique plpgsql


【解决方案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 功能,对于单个 UNION 查询,您不需要 PL/pgSQL。甚至没有一个函数。普通(子)查询或VIEW 是替代方法。

相关:

或者您只需从函数中返回所有内容:

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

并在 调用 中对结果进行重复数据删除,例如:

SELECT DISTINCT url FROM myfunction();

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

可以。但请注意...

【讨论】:

    猜你喜欢
    • 2013-05-11
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多