我正在为一个应用程序编写安装脚本,该脚本是另一个应用程序的附件,因此我想检查另一个应用程序的表是否存在。如果没有,我想给用户一个有用的错误。但是,我不知道哪种模式将保存表格。
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
,它并不是非常有用。
我唯一想到的另一件事就是尝试从表中进行选择并捕获异常。它将完成这项工作,但是我认为它不是非常优雅,并且我已经读到它使用起来很昂贵(尽管在这种情况下这可能还可以,因为我只运行了一次?)。