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
相关推荐
@insist1233 小时前
信息系统管理工程师-运维人员管理与核心运维过程(上篇)
数据库·软考·软件水平考试·信息系统管理工程师·软考信管
muddjsv3 小时前
SQLite 零基础 CRUD 实战详解:增删改查标准语法与高危避坑
数据库·sqlite
~光~~5 小时前
【嵌入式linux学习_OV8858 bring up】L2_V4L2与Ov8858
linux·数据库·学习
菜地里的小菜鸟5 小时前
达梦数据库备份与恢复
数据库·达梦·达梦数据库备份与恢复
小蒜学长5 小时前
基于SpringBoot的社区供暖管理系统设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
llwszx6 小时前
Redis ZSet 完全指南:从应用场景到核心原理
数据库·redis·缓存·跳表·哈希表·zset
阳光九叶草LXGZXJ7 小时前
达梦数据库-报错-11-cmd 13 validate error
linux·运维·数据库·sql·学习
PGCCC7 小时前
PostgreSQL 数据库认证体系技术解析:PCA / PCP / PCM 三级能力模型与考纲拆解
数据库·postgresql·pcm
wWYy.7 小时前
Mysql:覆盖索引
android·数据库·mysql