You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL:如何获取刚创建的函数/存储过程的名称或OID?

在PostgreSQL中获取刚创建的函数/存储过程的OID或名称

方法一:使用CREATE ... RETURNING子句(PostgreSQL 11及以上版本)

PostgreSQL 11开始支持在CREATE FUNCTION和CREATE PROCEDURE语句后添加RETURNING子句,直接返回刚创建对象的OID或名称,这是最简便的方式。

示例:

  • 创建函数并返回OID和名称:
CREATE FUNCTION test_func(a int) RETURNS int AS $$
BEGIN
    RETURN a + 1;
END;
$$ LANGUAGE plpgsql
RETURNING oid, proname;

执行后会直接返回一行结果,包含该函数的OID和名称test_func。

  • 创建存储过程的写法同理:
CREATE PROCEDURE test_proc(a int) AS $$
BEGIN
    RAISE NOTICE 'Input: %', a;
END;
$$ LANGUAGE plpgsql
RETURNING oid, proname;

方法二:查询系统表(适用于所有版本)

如果使用PostgreSQL 10及更早版本,无法用RETURNING子句,可以查询系统表筛选最新创建的对象,注意单用户操作场景下更可靠,并发场景可能存在冲突。

示例:
通过统计信息表的创建时间筛选当前schema下最新的函数/存储过程:

SELECT p.oid, p.proname
FROM pg_proc p
JOIN pg_stat_user_functions s ON p.oid = s.funcid
WHERE p.pronamespace = current_schema()::regnamespace
ORDER BY s.creation_time DESC
LIMIT 1;

也可以直接通过定义文本匹配(需保证文本格式完全一致):

SELECT oid, proname
FROM pg_proc
WHERE prosrc = 'BEGIN
    RETURN a + 1;
END;'
AND pronamespace = current_schema()::regnamespace;

注意事项

  • 优先使用CREATE ... RETURNING子句,避免并发场景下的匹配错误。
  • 查询系统表时,建议加上当前schema(pronamespace)的过滤条件,缩小匹配范围。

内容的提问来源于stack exchange,提问作者seth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:42:16