如何解决为什么pg_restore segfaulting在Docker中?
我正在为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出现段错误?
解决方法
分析:
问题是由转储数据库时损坏引起的。 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。