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

如何将bash脚本中运行的psql代码转换为标准.sql文件

原Shell脚本作用

这段脚本是调用Postgres官方客户端psql执行SQL语句的封装逻辑,各部分作用拆解:

  • -v ON_ERROR_STOP=1:开启执行报错立即终止的规则,避免出错后后续无效逻辑继续运行
  • --username "$POSTGRES_USER":读取容器内置的管理员用户环境变量登录数据库
  • --dbname "test":指定连接test数据库执行操作
  • <<-EOSQL到末尾的EOSQL是Shell的Here Document语法,中间包裹的是要执行的SQL逻辑:创建/替换public schema下的user_session_register存储函数,函数接受3个参数(必填的用户IDu_id、可选的IP地址ip、可选的访问路径path),返回布尔值;当前简化版逻辑是执行成功返回true,捕获所有异常后返回false,实际生产使用时通常会在BEGIN和EXCEPTION之间补充插入会话记录的核心逻辑。
转换为独立SQL初始化文件的方法

转换逻辑非常简单,只需要提取Here Document标记中间的纯SQL内容,原封不动存为.sql后缀的文件即可,不需要做任何转义修改,示例文件01-init-session-func.sql内容如下:

CREATE or replace FUNCTION public.user_session_register(u_id integer, ip text DEFAULT NULL::text, path text DEFAULT NULL::text)
    RETURNS boolean
    LANGUAGE plpgsql
    AS $$
        BEGIN
            RETURN true;
        EXCEPTION WHEN OTHERS THEN
            RETURN false;
        END
    $$;

如果需要指定在test库执行该SQL,可以在文件第一行添加切换库的命令:

\c test;

将修改后的SQL文件放到Postgres镜像的/docker-entrypoint-initdb.d目录下即可,容器首次初始化时会自动以管理员身份执行该文件,执行报错时默认会终止初始化流程,和原脚本的ON_ERROR_STOP=1效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:54:03