首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql:从转储sql文件错误恢复数据库

Postgresql:从转储sql文件错误恢复数据库
EN

Database Administration用户
提问于 2021-09-03 09:13:44
回答 1查看 674关注 0票数 -1

有一个在码头容器中运行的数据库。我需要在本地复制这个数据库。要做到这一点,我使用以下命令

代码语言:javascript
复制
docker exec -t 5a5c84157ffe pg_dumpall -c -U postgres | gzip > /home/jekson/dump_$(date +"%Y-%m-%d_%H_%M_%S").sql`

因此,我得到了dump_2021-09-03_11_44_36.sql文件。接下来,在本地为它创建一个空数据库和一个用户。并尝试恢复数据。

代码语言:javascript
复制
psql -h localhost -d marketing -U marketing -f dump_2021-09-03_11_44_36.sql

但是有个错误

代码语言:javascript
复制
psql:dump_2021-09-03_11_44_36.sql:2: ERROR:  invalid byte sequence for encoding "UTF8": 0x8b
psql:dump_2021-09-03_11_44_36.sql:12: error: invalid command \T�F5��
                                                                    �a��M
psql:dump_2021-09-03_11_44_36.sql:14: error: invalid command \��p���ϦM)=�K�"�y�tÂ�"9���Ӕ�����1%�2j��F~��]0w��2C�ɦ
psql:dump_2021-09-03_11_44_36.sql:16: error: invalid command \�!O�C�ө�l?�m��G'�����qf#"z[�`�}-�ʷ��?S��u>�F1-w[�
psql:dump_2021-09-03_11_44_36.sql:17: error: invalid command \ݫ|�����e��)y��^t��-�<��'����a3��'�Ns�
psql:dump_2021-09-03_11_44_36.sql:18: error: invalid command \�5��B���r�
psql:dump_2021-09-03_11_44_36.sql:145: error: invalid command \l�?�_�po�����A����/c(h�������@��P���߈w�o^�����w��&|�:�ߟ9J���gx�3�������#���'�i���B>�I�b���/5e�'�O�
psql:dump_2021-09-03_11_44_36.sql:152: error: invalid command \[�gI?��6���W�$
psql:dump_2021-09-03_11_44_36.sql:155: error: invalid command \&Tʅ�sZ�7abw�w̘)KoRǥD���eAs�L,E�d�a�VD��h�E���u���b�v��_��֗Z�:��C-
psql:dump_2021-09-03_11_44_36.sql:160: error: invalid command \��a����
                                                                      +�]�Ґ�R���Ȋ���e��W
psql:dump_2021-09-03_11_44_36.sql:970815: ERROR:  invalid byte sequence for encoding "UTF8": 0xc0 0xa9

校验编码

代码语言:javascript
复制
postgres=# SHOW SERVER_ENCODING;
 server_encoding 
-----------------
 UTF8
(1 row)

psql (PostgreSQL) 13.4 (Ubuntu 13.4-0ubuntu0.21.04.1)
EN

回答 1

Database Administration用户

回答已采纳

发布于 2021-09-03 09:28:30

因此,我得到了dump_2021-09-03_11_44_36.

是的,但是文件里有什么?我们把你的命令拆开:

代码语言:javascript
复制
docker exec -t 5a5c84157ffe pg_dumpall -c -U postgres 

使用docker作为用户postgres运行pg_dumpall并创建一个基于字符的转储文件。到目前一切尚好。

代码语言:javascript
复制
| gzip 

阿。您正在获取该纯文本SQL文件并将其通过gzip实用程序,该实用程序输出一个压缩的ZIP文件.

代码语言:javascript
复制
> /home/jekson/dump_$(date +"%Y-%m-%d_%H_%M_%S").sql 

..。并将其写入sql文件。

当您尝试恢复它时,您将ZIP文件输入到psql中,而不是它所期望的纯文本SQL --因此产生了所有的抱怨。

在将文件输入mysql之前,要么需要解压缩.

代码语言:javascript
复制
gunzip /home/jekson/dump_2021-09-03_11_44_36.sql \
   | psql -h localhost -d marketing -U marketing  

..。或者,也许更简单一点,根本不用使用gzip。YMMV,取决于转储文件的大小。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/298997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档