psql 执行多个 sql 文件

for %i in (*.sql) do psql -U 数据库用户名 -d 数据库名 -f "%i"

  • psql 支持 -f 参数指定单个文件,但不支持 -f *.sql 这种通配符写法

  • 必须用 shell 循环,比如:

    |------------------------------------------------------------------------------------|
    | for f in ./migrations/*.sql; ``do psql -U postgres -d mydb -f ``"$f"``; done |

  • -v ON_ERROR_STOP=1 让任意一条 SQL 报错就中断,避免后续文件继续执行

  • 如果文件里含 \c otherdbCREATE DATABASE,得拆成不同 psql 调用------因为 psql 不会在同一个会话里跨库执行

使用find生成主加载脚本.

让我们继续创造这个结构。

复制代码
01/
├── 01_schema.psql
├── 02_types.psql
└── 10_tables
    ├── 01_foo.psql
    └── 02_bar.psql

下面是我们用来创建它的命令。

复制代码
mkdir 01
touch 01/01_schema.sql
touch 01/02_types.sql
mkdir 01/10_tables
touch 01/10_tables/01_foo.sql
touch 01/10_tables/02_bar.sql

现在您可以使用find生成一个加载脚本

复制代码
find ./01/ -type f -printf '\\i %p\n' | sort | tee master.psql
\i ./01/01_schema.sql
\i ./01/02_types.sql
\i ./01/10_tables/01_foo.sql
\i ./01/10_tables/02_bar.sql

现在只运行master.psql

复制代码
psql -d database -f master.psql
相关推荐
智购科技智能售货柜2 小时前
2026自动售货机整机可靠性测试:从高低温交变到EMC电磁兼容的认证工程实践~YH
运维·服务器·数据库·人工智能·物联网
ltl2 小时前
RocksDB 架构演进:相对 LevelDB 的 diff 地图
数据库
ltl2 小时前
存储读取性能优化:索引、Bloom Filter 与读放大
数据库
xier_ran6 小时前
【infra之路】GPU 存储层次总结:L1 / L2 / HBM
java·网络·数据库
山甫aa7 小时前
Javaweb---MyBatis增删改查
java·数据库·后端·mybatis·springboot
其实防守也摸鱼8 小时前
接口审计:从原理到实践的万字深度指南
数据库·安全·自动化·github·copilot
@insist1238 小时前
系统集成项目管理工程师-信息和文档管理
网络·数据库·软考·系统集成项目管理工程师·软考中项·软件水平考试
残 风9 小时前
PostgreSQL 存储机制详解
数据库·postgresql·开源·数据库开发
JacksonMx10 小时前
Java CompletableFuture 异步编程实战:从入门到架构师避坑指南
linux·数据库·python