代码之家  ›  专栏  ›  技术社区  ›  billhubb84

带有PostgreSQL的Zabbix分区清理脚本在检查是否处于恢复状态后返回空行

  •  0
  • billhubb84  · 技术社区  · 7 年前

    好的,首先我必须指出,我在这里使用社区工作,所以请原谅任何误解。这就是说,我们有一个带有PostgreSQL 9.6的数据库服务器和一个运行3.2的Zabbix服务器,可以写入该数据库。我们根据以下文档设置了分区: https://www.zabbix.org/wiki/Higher_performant_partitioning_in_PostgreSQL

    #!/bin/bash
    # . ~/lib/pgIsInRecovery.func
    pgIsInRecovery () {
    local IN_RECOVERY=$(/usr/edb/as9.6/bin/psql -d zabbix -U zabuser -c 'SELECT pg_is_in_recovery()')
    #local IN_RECOVERY=$(psql -t -c zabbix -U zabuser 'SELECT pg_is_in_recovery()')
      case ${IN_RECOVERY// /} in
      ( t ) return 0 ;;
      ( f ) return 1 ;;
      esac
    }
    # . ~/lib/printUsage.func
    printUsage () {
      cat <<- EOT
            Usage: ${0} runme
    EOT
    }
    
    printSql () {
      cat <<- SQL
            \set VERBOSITY 'terse'
    
            SELECT zabbix_partition_maintenance('1 week', 4, 52, 1);
    
            \quit
    SQL
    }
    
    main () {
      case $1 in
      ( runme )
        if ! pgIsInRecovery
        then
          printSql | /usr/bin/psql -U zabuser zabbix
        else
          echo $pgIsInRecovery
          echo "PostgreSQL cluster is in recovery. Exiting."
        fi
        ;;
      ( * )
        printUsage
        return 1
        ;;
      esac
    }
    
    main "$@"
    exit $?
    

    如果我手动执行以下操作,我会在:/usr/edb/as9.6/bin/psql-d zabbix-U zabuser-c“SELECT pg\U is\U in\U recovery()”后面加一行得到结果

    -bash-4.2$ psql -t -U zabuser -d zabbix -c 'SELECT pg_is_in_recovery()'
     f
    
    -bash-4.2$
    

    提前感谢您的帮助。

    1 回复  |  直到 7 年前
        1
  •  0
  •   billhubb84    7 年前

    需要将-t标志添加到psql命令以仅返回元组。