【问题标题】:Why is pg_restore segfaulting in Docker?为什么 Docker 中的 pg_restore 段错误?
【发布时间】:2021-01-04 03:49:33
【问题描述】:

我正在 docker 容器内测试我的 postgres 数据库的备份/恢复过程。

我像这样转储我的数据库:

$ docker exec -ti my_postgres_container pg_dump -Fc -U postgres > db.dump

之后,我尝试像这样恢复它:

$ docker cp db.dump my_postgres_container:/db.dump
$ docker exec -ti my_postgres_container pg_restore -U postgres -c -d postgres db.dump

命令返回,没有输出或错误,但没有任何反应。

因此,我尝试像这样手动恢复它:

$ docker cp db.dump my_postgres_container:/db.dump
$ docker exec -ti my_postgres_container bash
root@fdaad610bee3:/# pg_restore -U postgres -c -d postgres db.dump
Segmentation fault (core dumped)

为什么 pg_restore 在尝试读取我的数据库转储时出现段错误?

【问题讨论】:

    标签: postgresql docker backup database-backups


    【解决方案1】:

    分析:

    该问题是由转储数据库时的损坏引起的。 pg_dump 产生二进制输出。此输出首先通过 Docker 容器的 stdout 传递,然后重定向到主机上的文件中。在途中的某个地方,非 ASCII 字节已损坏。

    解决方案:

    pg_dump 写入 Docker 容器内的文件,然后将其复制到主机:

    正确的倾倒程序:

    docker exec -ti my_postgres_container bash -c 'pg_dump -Fc -U postgres > /db.dump'
    docker cp my_postgres_container:/db.dump db.dump
    

    正确的恢复过程:

    docker cp db.dump my_postgres_container:/db.dump
    docker exec -ti my_postgres_container pg_restore -U postgres -c -d postgres db.dump
    

    【讨论】:

      猜你喜欢
      • 2013-05-21
      • 2017-01-09
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      相关资源
      最近更新 更多