for %i in (*.sql) do psql -U 数据库用户名 -d 数据库名 -f "%i"
-
psql支持-f参数指定单个文件,但不支持-f *.sql这种通配符写法 -
必须用 shell 循环,比如:
|------------------------------------------------------------------------------------|
|forf in ./migrations/*.sql; ``dopsql -U postgres -d mydb -f ``"$f"``; done| -
加
-v ON_ERROR_STOP=1让任意一条 SQL 报错就中断,避免后续文件继续执行 -
如果文件里含
\c otherdb或CREATE 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