2017-11-28 13 views
1

나는 urls 열에 고유 제한 조건을 추가해야합니다UNIQUE 제약 조건을 추가하여 함수의 열을 반환하는 방법은 무엇입니까?

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

어떻게 urls 열이 고유하게?

+0

하십시오 ** [편집] ** 당신의 질문 (http://plaintexttools.github.io/plain-text-table 일부 [샘플 데이터] 추가 /) 및 해당 데이터를 기반으로 예상되는 출력. [** 포맷 된 텍스트 **] (http://stackoverflow.com/help/formatting)하시기 바랍니다. [** 스크린 샷 없음 **] (http : //meta.stackoverflow.com/questions/285551/if-may-i-not-upload-images-of-code-on-so-ask-a-question/285557 # 285557). ** [편집] ** 귀하의 질문 - 코멘트 **에 ** 코드 ** 또는 추가 정보를 게시하지 마십시오. –

+0

어떻게 생각하니, 기능이 필요합니까? .. –

+0

새 테이블을 만들고 싶지 않습니다. –

답변

1

나는 독특한 결과

그것은 당신이 그것을 할 수처럼 함수의 반환 형식에 UNIQUE 제약 조건을 추가 할 수 없습니다하지 한 번에 배치 쿼리와 다른 테이블의 결과를 얻을 반환합니다 테이블 정의.

이 같은 고유 URL을 얻을 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(); 

문제를 해결하려면 내가 임시 테이블을 만들 수 있습니까?

입니다. 하지만 ...