別のアプリケーションのアドオンであるアプリケーションのセットアップスクリプトを作成しているので、他のアプリケーションのテーブルが存在するかどうかを確認したいと思います。そうでない場合は、ユーザーに有用なエラーを提供します。ただし、テーブルを保持するスキーマがわかりません。
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')
を含むTEXTを返すため、"$user",public
それほど役に立ちません。
他に考えられる唯一のことは、テーブルから選択して例外をキャッチすることです。それはうまくいきますが、それは非常にエレガントだとは思わず、使用するにはコストがかかると読みました(たぶん、このシナリオでは1回しか実行しないので、それで問題ないでしょうか?)。