小编cim*_*non的帖子

如何使用 PLPGSQL 确定当前 search_path 中是否存在表?

我正在为一个应用程序编写一个安装脚本,该脚本是另一个应用程序的插件,所以我想检查另一个应用程序的表是否存在。如果没有,我想给用户一个有用的错误。但是,我不知道什么模式将保存这些表。

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;
$$;
Run Code Online (Sandbox Code Playgroud)

但是,current_setting('search_path')返回"$user",public默认包含的 TEXT ,这不是很有用。

我唯一能想到的另一件事是尝试从表中选择并捕获异常。它可以完成这项工作,但我认为它不是很优雅,而且我读到它使用起来很昂贵(尽管在这种情况下可能没问题,因为我只运行一次?)。

postgresql plpgsql catalogs

12
推荐指数
1
解决办法
3万
查看次数

标签 统计

catalogs ×1

plpgsql ×1

postgresql ×1