Postgresql
Postgresql:從轉儲 sql 文件錯誤中恢復數據庫
有一個在 docker 容器中執行的數據庫。我需要製作這個數據庫的本地副本。為此,我使用命令
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 文件。接下來在本地創建一個空數據庫和一個使用者。並嘗試恢復數據
psql -h localhost -d marketing -U marketing -f dump_2021-09-03_11_44_36.sql
但是遇到了錯誤
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 \<R4�.^�@���9� psql:dump_2021-09-03_11_44_36.sql:19: error: invalid command \�V8ro_� psql:dump_2021-09-03_11_44_36.sql:30: error: invalid command \�Ԁ�<o��$��G&C psql:dump_2021-09-03_11_44_36.sql:32: error: invalid command \0�&��� psql:dump_2021-09-03_11_44_36.sql:34: error: invalid command \��w���%���4:"��v�sj�����)Ѽ4je��xl�;������$��j�����j۞J����!�QT�0�/�%�6�O��j��ȫb�GP��S psql:dump_2021-09-03_11_44_36.sql:35: error: invalid command \~S��H��1�������d$�{�ujx�B]�1�GC��B�ᕜ�NjgwA���j10�I�)����?Ѭ]���]P�&��� psql:dump_2021-09-03_11_44_36.sql:39: error: invalid command \"��X�=��?ʹ=���g psql:dump_2021-09-03_11_44_36.sql:42: error: invalid command \�����ߵ��,� � ;����Ӷw psql:dump_2021-09-03_11_44_36.sql:48: error: invalid command \zz:<o�Z��I(F��*����am�y�`��(�2Ŕd�7�u�3���p����.��k�M��M6 psql:dump_2021-09-03_11_44_36.sql:53: error: invalid command \l�����sP���}<�J�<?���v����?�l$MT2C)�<�� psql:dump_2021-09-03_11_44_36.sql:55: ERROR: invalid byte sequence for encoding "UTF8": 0x8f psql:dump_2021-09-03_11_44_36.sql:55: ERROR: invalid byte sequence for encoding "UTF8": 0x97 psql:dump_2021-09-03_11_44_36.sql:55: ERROR: invalid byte sequence for encoding "UTF8": 0xf6 0x43 0xed 0x93 psql:dump_2021-09-03_11_44_36.sql:56: ERROR: invalid byte sequence for encoding "UTF8": 0xf9 psql:dump_2021-09-03_11_44_36.sql:56: error: invalid command \oU���G�Moc� psql:dump_2021-09-03_11_44_36.sql:58: ERROR: invalid byte sequence for encoding "UTF8": 0xd2 0xef psql:dump_2021-09-03_11_44_36.sql:59: ERROR: invalid byte sequence for encoding "UTF8": 0xac psql:dump_2021-09-03_11_44_36.sql:66: ERROR: invalid byte sequence for encoding "UTF8": 0xa9 psql:dump_2021-09-03_11_44_36.sql:87: error: invalid command \<$� psql:dump_2021-09-03_11_44_36.sql:89: error: invalid command \�q���P�aya��<2 (��]�ޅ��͏���v���L#��2��O5��2B�S psql:dump_2021-09-03_11_44_36.sql:95: error: invalid command \A psql:dump_2021-09-03_11_44_36.sql:96: error: invalid command \&AT�x��p��Vp+���L��Ǩ8�(��UǝhU+�9�E�}�g����ɟ" psql:dump_2021-09-03_11_44_36.sql:99: error: invalid command \��)���K|J8���ک" psql:dump_2021-09-03_11_44_36.sql:108: error: invalid command \!���L#��K�pWJ�(0�� psql:dump_2021-09-03_11_44_36.sql:111: error: invalid command \���p_ psql:dump_2021-09-03_11_44_36.sql:132: error: invalid command \�yq�j�(����EQ&/Cny0���Nz��EFY���x�����2AE��7$��z�v/�t��P�����3ya#$yоԎ�b��?C���H��8C_�BŁH! psql:dump_2021-09-03_11_44_36.sql:137: error: invalid command \�9s�X!�zM߶3=7Q�*T�Bo psql:dump_2021-09-03_11_44_36.sql:141: error: invalid command \�L{�PA��m�NZnt)�y�_�� ٬���'�����˯^hvUi������>�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
檢查編碼
postgres=# SHOW SERVER_ENCODING; server_encoding ----------------- UTF8 (1 row) psql (PostgreSQL) 13.4 (Ubuntu 13.4-0ubuntu0.21.04.1)
結果我得到了 dump_2021-09-03_11_44_36.sql 文件…
是的,但是那個文件裡有什麼?
讓我們把你的命令分開:
docker exec -t 5a5c84157ffe pg_dumpall -c -U postgres
使用 docker 以使用者 postgres 執行pg_dumpall並創建基於字元的轉儲文件。
到現在為止還挺好。
| gzip
啊。
您正在獲取純文字 SQL 文件並通過gzip實用程序對其進行管道傳輸,該實用程序會輸出一個壓縮的 ZIP 文件……
> /home/jekson/dump_$(date +"%Y-%m-%d_%H_%M_%S").sql
…並將其寫入您的 [supposedly, but not ] sql 文件。
當您嘗試恢復它時,您將 ZIP 文件輸入到psql中,而不是它期望的純文字 SQL - 因此所有的抱怨。
您要麼需要先解壓縮文件,然後再將其輸入 mysql …
gunzip /home/jekson/dump_2021-09-03_11_44_36.sql \ | psql -h localhost -d marketing -U marketing
…或者,可能更簡單,根本不用gzip 。
YMMV,取決於轉儲文件的大小*。*