gpt4 book ai didi

postgresql - 在调用它之前如何检查 postgresql 过程是否存在

转载 作者:行者123 更新时间:2023-11-29 14:26:12 25 4
gpt4 key购买 nike

我有一个程序可能不存在于架构中(它会在服务启动时自行安装)

我目前正在另一个过程中调用它

执行 some_schema.some_job(x)

如何在调用之前检查此过程是否存在?

最佳答案

你可以跑

IF NOT EXISTS (SELECT 1
FROM pg_catalog.pg_proc
WHERE proname = 'some_job'
AND pronamespace = 'some_schema'::regnamespace)
THEN
...
END IF;

但这是个坏主意,因为存在竞争条件。如果并发 session 运行相同的代码并在您的检查和函数调用之间创建函数怎么办?

通常情况下,最好这样做:

BEGIN
/* might fail if the function does not exist */
PERFORM some_schema.some_job(x);
EXCEPTION
WHEN undefined_function THEN
BEGIN
CREATE FUNCTION ...
EXCEPTION
WHEN duplicate_function THEN
/* this is ok, concurrent process created it */
NULL;
END;

/* now it cannot fail */
PERFORM some_schema.some_job(x);
END;

关于postgresql - 在调用它之前如何检查 postgresql 过程是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57618918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com