通过从远程客户端连接的 psql 使用多个 sql 查询

Using mulitple sql query through psql connecting from a remote client

我正在使用 shellscript activity 通过 AWS Datapipeline 连接到 postgressql 数据库。我必须删除 60 tables 的数据并将数据从文件复制到 tables。当复制作业失败时,我想将 table 回滚到以前的状态,这样 table 就不会为空。我正在尝试使用多个 psql 语句来执行此操作,如下所示,但回滚无法正常工作,因为 expected.When 其中一个文件出错并且复制语句失败,table 被删除并且它是空的.但是,我想把它回滚到以前的状态。

'psql -h  -d  -U  -p  -c "BEGIN;"
psql -h  -d  -U  -p  -c "Delete  from  $var1;"

psql -h  -d  -U  -p  -c "\COPY $var1 FROM '$f' csv header;"
VAR3=$?
    echo "$VAR3"
if [ $VAR3 -gt 0 ];
then 
psql -h  -d  -U  -p  -c "ROLLBACK;"
else
psql -h  -d  -U  -p  -c "COMMIT;"
fi
psql -h  -d  -U  -p  -c "END;"'

这是复制命令返回错误时的标准输出日志。

开始 删除 560 1个 回滚 提交

我正在使用 Begin 开始事务,然后是 Delete 语句并复制。如果复制失败,那么我编写了回滚逻辑,否则提交并结束。这里有什么问题?

每个 psql 调用都会创建自己的数据库连接。但是数据库事务始终是单个数据库连接的一部分,因此您不能在一个 psql 调用中启动一个事务并在另一个调用中结束它。一.

我会使用“此处文档”:

psql <<EOF
BEGIN;
...
COMMIT;
EOF

对于条件处理,您可以使用最新 psql 版本的 \if 功能。

确保此处文档中没有制表符,它们可能会导致意外行为。