通过从远程客户端连接的 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
功能。
确保此处文档中没有制表符,它们可能会导致意外行为。
我正在使用 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
功能。
确保此处文档中没有制表符,它们可能会导致意外行为。