Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 从远程客户端通过psql连接使用多sql查询_Postgresql_Unix_Psql_Aws Data Pipeline - Fatal编程技术网

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

Postgresql 从远程客户端通过psql连接使用多sql查询,postgresql,unix,psql,aws-data-pipeline,Postgresql,Unix,Psql,Aws Data Pipeline,我使用shellscript活动通过AWS数据管道连接到postgressql DB。我必须删除60个表的数据,并将数据从文件复制到表中。当复制作业失败时,我希望将表回滚到以前的状态,以便表不会为空。我正尝试使用多个psql语句执行此操作,如下所示,但回滚未按预期工作。当其中一个文件中出现错误且copy语句失败时,该表将被删除且为空。但是,我想把它回滚到以前的状态 'psql -h $2 -d $3 -U $4 -p $7 -c "BEGIN;" psql -h $2 -d

我使用shellscript活动通过AWS数据管道连接到postgressql DB。我必须删除60个表的数据,并将数据从文件复制到表中。当复制作业失败时,我希望将表回滚到以前的状态,以便表不会为空。我正尝试使用多个psql语句执行此操作,如下所示,但回滚未按预期工作。当其中一个文件中出现错误且copy语句失败时,该表将被删除且为空。但是,我想把它回滚到以前的状态

'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;"'
这是copy命令返回错误时的标准输出日志

开始 删除560 1. 回降 承诺


我使用Begin启动事务,然后删除语句并复制。如果复制失败,那么我编写了回滚else commit和end的逻辑。这里出了什么问题?

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

我会使用“此处文档”:


psql非常感谢。这很有效。