다른 응용 프로그램의 애드온 인 응용 프로그램의 설치 스크립트를 작성 중이므로 다른 응용 프로그램의 테이블이 존재하는지 확인하고 싶습니다. 그렇지 않으면 사용자에게 유용한 오류를주고 싶습니다. 그러나 어떤 스키마가 테이블을 보유하는지 알 수 없습니다.
DO LANGUAGE plpgsql $$
BEGIN
PERFORM 1
FROM
pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE
n.nspname = current_setting('search_path')
AND c.relname = 'foo'
AND c.relkind = 'r'; -- not sure if I actually need this or not...
IF NOT FOUND THEN
RAISE 'This application depends on tables created by another application';
END IF;
END;
$$;
그러나 기본적으로 current_setting('search_path')
포함 "$user",public
된 TEXT를 반환하므로 크게 유용하지 않습니다.
내가 생각할 수있는 유일한 다른 것은 테이블에서 선택하고 예외를 포착하는 것입니다. 그것은 일을 할 것이지만, 그것이 매우 우아하다고 생각하지 않으며 사용 하는 것이 비싸다 는 것을 읽었습니다 (아마도 한 번만 실행하기 때문에이 시나리오에서는 괜찮을까요?).