Ubuntu 下使用 pgAdmin 管理 PostgreSQL 存储过程
一 环境准备与连接
- 安装组件:在 Ubuntu 上安装 PostgreSQL 与 pgAdmin4(桌面或 Web 模式均可)。完成后启动数据库服务,并在 pgAdmin 中新建服务器连接(主机 localhost、端口 5432、用户名 postgres 等)。如需远程管理,可在 PostgreSQL 的配置文件 postgresql.conf 中设置 listen_addresses = ‘*’,在 pg_hba.conf 添加如 host all all 0.0.0.0/0 md5 的认证规则,然后重启数据库服务。以上步骤完成后即可在 pgAdmin 左侧树中浏览数据库对象并执行 SQL。
二 创建与执行存储过程
- 方式一 使用 CREATE PROCEDURE(推荐,PostgreSQL 11+)
- 在 pgAdmin 打开目标数据库的 Query Tool。
- 执行创建语句(示例含 IN/OUT 参数与事务控制):
CREATE OR REPLACE PROCEDURE sp_upsert_user(
p_id INTEGER,
p_name TEXT,
p_out OUT INTEGER
)
LANGUAGE plpgsql
AS $$
BEGIN
INSERT INTO users(id, name)
VALUES (p_id, p_name)
ON CONFLICT (id) DO UPDATE
SET name = EXCLUDED.name;
GET DIAGNOSTICS p_out = ROW_COUNT; -- 返回受影响行数
END;
$$;
- 调用方式(在 Query Tool 中执行):
CALL sp_upsert_user(1, 'Alice', NULL);
- 方式二 使用 CREATE FUNCTION 模拟“存储过程”
- 无返回值:RETURN void;有返回值:RETURN 具体类型或 SETOF 记录。调用可用 SELECT func(…)。示例:
CREATE OR REPLACE FUNCTION fn_hello(p_name TEXT)
RETURNS TEXT
LANGUAGE plpgsql
AS $$
BEGIN
RETURN 'Hello, ' || p_name;
END;
$$;
SELECT fn_hello('Bob');
- 小结对比
- PROCEDURE:使用 CALL 执行,适合事务性批处理;可定义 IN/OUT/INOUT 参数。
- FUNCTION:使用 SELECT 执行,适合有返回值的逻辑;也可用 RETURN void 仅做过程化处理。
三 在 pgAdmin 中查看与维护
- 浏览与编辑:在左侧对象树展开 Schemas → public → Procedures(或 Functions),右键对象可执行 Properties(查看定义)、Edit(在线修改并保存)、Drop(删除)。
- 执行与传参:对 PROCEDURE 右键选择 Execute/Debug 可弹出参数对话框;对 FUNCTION 可直接在 Query Tool 中以 SELECT 方式传参与查看结果。
- 权限与依赖:在对象属性中管理 Owner/ACL;注意修改签名(参数或返回类型)通常需要 DROP + CREATE,并评估对视图、触发器等的依赖影响。
四 调试与定时执行
- 断点调试(pgAdmin 4 调试器)
- 前提:在 postgresql.conf 的 shared_preload_libraries 中加载调试插件(如 plugin_debugger),重启数据库;在目标库执行调试扩展脚本(如 pldbgapi.sql),并确保用于调试的账号具备足够权限。
- 操作:在目标存储过程上右键 Debugging → Debug(直接调试,可设输入参数与断点)或 Set breakpoint(上下文调试,等待应用触发);调试界面支持 Step into/over/continue、变量与调用栈监控。
- 定时执行(pgAgent)
- 在 pgAdmin 中启用 pgAgent 插件,创建 Job → Step → Schedule:Step 中写入 CALL sp_name(…) 或相应 FUNCTION 调用;Schedule 配置周期与起止时间;执行后可在 pgAgent 相关表(如 pga_joblog、pga_jobsteplog)查看运行日志与异常信息。