我正在使用 shellscript 活动通过 AWS Datapipeline 连接到 postgressql DB。我必须删除 60 个表的数据并将数据从文件中复制到表中。当复制作业失败时,我想将表回滚到以前的状态,这样表就不会为空。我正在尝试使用以下多个 psql 语句执行此操作,但回滚未按预期工作。当其中一个文件出错且复制语句失败时,表被删除且为空。但是,我想把它回滚到以前的状态。
'psql -h $2 -d $3 -U $4 -p $7 -c "BEGIN;"
psql -h $2 -d $3 -U $4 -p $7 -c "Delete from $var1;"
psql -h $2 -d $3 -U $4 -p $7 -c "\COPY $var1 FROM '$f' csv header;"
VAR3=$?
echo "$VAR3"
if [ $VAR3 -gt 0 ];
then
psql -h $2 -d $3 -U $4 -p $7 -c "ROLLBACK;"
else
psql -h $2 -d $3 -U $4 -p $7 -c "COMMIT;"
fi
psql -h $2 -d $3 -U $4 -p $7 -c "END;"'
这是复制命令返回错误时的标准输出日志。
开始删除 560 1 回滚提交
我从 Begin 开始交易,然后是 Delete 语句并复制。如果复制失败,那么我编写了回滚逻辑,否则提交并结束。这里有什么问题?