【问题标题】:Detect error on transaction with psql script on ansible在 ansible 上使用 psql 脚本检测事务错误
【发布时间】:2022-07-06 01:49:57
【问题描述】:

我们有以下脚本(script.sql):

BEGIN;
SET client_min_messages = warning;

\COPY foo_table FROM 'foo.csv' csv header DELIMITER ';';
\COPY bar_table FROM 'bar.csv' csv header DELIMITER ';';

COMMIT;

我们在 ansible playbook 中启动这个脚本

community.postgresql.postgresql_db

- name: 'Restore SQL dump(s) on database(s)'
  become: yes
  become_user: 'postgres'
  postgresql_db:
    name: 'db'
    target: 'script.sql'
    state: 'restore'

我们如何检测事务是否失败并回滚以获取部署错误?

【问题讨论】:

标签: postgresql ansible


【解决方案1】:

常见的方法是在 psql 命令行中使用 -v ON_ERROR_STOP=on,或者在 SQL 脚本中使用 \set ON_ERROR_STOP on

根据documentation

ON_ERROR_STOP

默认情况下,命令处理会在出错后继续。当这 变量设置为打开,处理将立即停止。在 交互模式下,psql会返回命令提示符;否则, psql 将退出,返回错误代码 3 以区分这种情况 致命错误情况,使用错误代码 1 报告。在 无论哪种情况,任何当前正在运行的脚本(顶层脚本,如果 任何,以及它可能调用的任何其他脚本)将是 立即终止。如果顶级命令字符串包含 多个 SQL 命令,处理会以当前命令停止。

【讨论】:

    猜你喜欢
    • 2016-03-29
    • 2016-06-05
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 2011-06-23
    相关资源
    最近更新 更多