LINUX.ORG.RU

Восстановление БД PostgreSQL

 


0

1

Почему не срабатывает код:


echo -n "Restore database? (Y/n) "

read answer
case "$answer" in
    Y) gunzip < $DUMPGZ | psql -U $USERNAME -p $PORT -d $DBNAME
        if [[ $? -ne 0 ]]
        then
            echo $?
#pg_restore -h localhost -p 5433 -U dbadmin -w -Fc -d  bis_kamin55_psql_testrecovery /Backup/bis_kamin55_psql/bis_kamin55_psql_daily_6_08.dump.gz
        fi
        ;;
    *) exit 0
        ;;
esac

Я так понимаю $? содержит код ошибки последнего оператора или 0. Но судя по всему в условие программа не входит, хотя возвращает:

gzip: stdin: not in gzip format

В общем решил проблему так:

root@PostgreSQL:/home/maintainer# cat /root/restore.sh
#!/bin/bash

PORT=5432
USERNAME='admindb'
SERVERNAME='localhost'

if [[ $1 != '' ]]
then
    DBNAME=$1
else
    echo "Point dbname as first parametr"
    exit
fi

if [[ $2 != '' ]]
then
    DUMPGZ=$2
else
    echo "Point dump.gz file as second parametr"
    exit
fi

echo $DBNAME

if psql -U $USERNAME -h $SERVERNAME -p $PORT -lqt | cut -d \| -f 1 | grep -qw $DBNAME
then
    echo "Database with this name exists on this cluster"
    exit
else
    echo -n "Create database? (Y/n) "

    read answer
    case "$answer" in
        Y) psql -U $USERNAME -h $SERVERNAME -p $PORT -c 'create database '$DBNAME -d postgres
            ;;
        *) exit 0
            ;;
    esac
fi


echo -n "Restore database? (Y/n) "

read answer
case "$answer" in
    Y)
        if file $DUMPGZ | grep -qw "PostgreSQL custom database dump"
        #/Backup/bis_kamin55_psql/bis_kamin55_psql_daily_6_08.dump.gz: PostgreSQL custom database dump - v1.12-0
        then
            pg_restore -h $SERVERNAME -U $USERNAME -p $PORT -d $DBNAME -w -Fc $DUMPGZ
        else
            gunzip < $DUMPGZ | psql -h $SERVERNAME -U $USERNAME -p $PORT -d $DBNAME
        fi
        ;;
    *) exit 0
        ;;
esac

Shulman ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.