pg_restore в док-контейнере postgres

Я пытаюсь восстановить базу данных в док-контейнере PostgreSQL, используя pg_restore из шеллскрипта, который будет вызываться из файла докера. Я получаю следующую ошибку: "ОШИБКА: отмена задачи автоочистки КОНТЕКСТ: автоматический анализ таблицы 'tablename'".

Файл Docker:

    FROM postgres:9.3
    ENV POSTGRES_USER postgres
    ENV POSTGRES_PASSWORD Abcd1234
    ENV POSTGRES_DB Clarion1
    COPY DB.backup /var/lib/postgresql/backup/DB.backup
    COPY initialize.sh /docker-entrypoint-initdb.d/initialize.sh

инициализировать.sh

    #!/bin/bash
    set -e
    set -x

    echo "******PostgreSQL initialisation******"
    pg_restore -C -d DB /var/lib/postgresql/backup/DB.backup

Журнал:

    server started
    CREATE DATABASE
    /docker-entrypoint.sh: running /docker-entrypoint-initdb.d/initialize.sh
    ++ echo '******PostgreSQL initialisation******'
    ++ pg_restore -C -d Clarion1 /var/lib/postgresql/backup/Clarion53.backup
    ******PostgreSQL initialisation******
    ERROR:  canceling autovacuum task

Но если я попытаюсь восстановить БД из командной строки на хост-компьютере из того же файла резервной копии, все будет работать нормально.


person Vaibhav Kumar    schedule 01.09.2016    source источник
comment
Я думаю, вам, вероятно, нужно дождаться полной инициализации базы данных, прежде чем запускать восстановление.   -  person dnephin    schedule 01.09.2016


Ответы (2)


Вот способ восстановления из файла, расположенного на хост-компьютере:

docker exec -i container_name pg_restore -U postgres_user -v -d database_name < /dir_backup_outside_container/file_name.tar
person Zeus-Adenilton    schedule 17.09.2019

Я не думаю, что восстановление резервной копии может быть выполнено на этапе инициализации. Запустите свой контейнер, а затем загрузите файл db.

docker run -d --name mydb mypgimage
docker exec mydb sh -c "pg_restore -C -d DB /var/lib/postgresql/backup/DB.backup"
person Bernard    schedule 01.09.2016