【发布时间】:2019-06-30 03:27:22
【问题描述】:
假设我有文件:
file1.sql
file2.sql
file3.sql
我需要在一个事务中执行所有三个文件。我正在寻找一个 bash 脚本,例如:
psql -h hostname -U username dbname -c "
begin;
\i file1.sql
\i file2.sql
\i file3.sql
commit;"
这会失败并出现错误:Syntax error at or near "\"。
我也试过先连接数据库,然后执行失败,像这样:
psql dbname
begin;
\i file1.sql
\i file2.sql
\i file3.sql
commit;
这也失败了,因为“开始”命令仅在连接终止时执行。
是否可以使用 PostgreSQL 和 bash 在单个事务中执行多个 .sql 文件?
编辑:
每个文件的大致结构都差不多:
SET CLIENT_ENCODING TO 'WIN1251';
\i file4.sql
\i file5.sql
<etc>
RESET CLIENT_ENCODING;
【问题讨论】:
-
你可以构建一个文件来执行 cat 文件连同 printf begin+end around
-
@amdixon 是的,我可以,但每个文件还包含 \i 命令。所以结果是一样的。
-
您是否控制(/正在生成)这些文件?
-
@amdixon 文件是自动生成的,我不管。
-
子shell:
(echo "BEGIN;"; cat file1.sql; cat file2.sql; ... echo "COMMIT;") | psql ...或使用here-document。
标签: bash postgresql transactions