在PostgreSQL中,我想创建一个安全封装机制,如果发生异常则返回空结果。考虑以下内容:
结果翻译为:
In PostgreSQL, I would like to create a safe-wrapping mechanism which returns empty result if an exception occurs. Consider the following:
结果翻译为:
在PostgreSQL中,我想创建一个安全的包装机制,如果发生异常,则返回空结果。考虑以下情况:
SELECT * FROM myschema.mytable;
我可以在客户端应用程序中进行安全包装:
try {
result = execute_query('SELECT value FROM myschema.mytable').fetchall();
}
catch(pg_exception) {
result = []
}
我能否直接在SQL中做这样的事情?我想使以下代码起作用,但似乎应该将其放入DO $$ ... $$
块中,而在这里我迷失了方向。
BEGIN
SELECT * FROM myschema.mytable;
EXCEPTION WHEN others THEN
SELECT unnest(ARRAY[]::TEXT[])
END
DO
不能返回任何内容。您必须使用存储过程(使用语言plpgsql
进行异常处理)。-- 同样,没有返回行 不等于 返回一个带有空数组的单行(即在 js 中,这意味着[] != [{col1:[]}]
)。 - pozsunnest
以产生所需的行为(不知道如何更优雅地实现)。无论如何,每次执行带有异常处理的查询时,我都必须声明过程吗?没有其他选项吗? - Tregoregplpgsql
的异常处理主要用于存储的“逻辑”。但你害怕什么类型的异常?也许有一种替代方案。 - pozs