ApXNTekToP
@ApXNTekToP
Недопрограммист

Как восстановить БД из резервной копии PostgreSQL в Linux?

Проблема вот в чем, Я создал резервную копию посредством pgAdmin. Пытаюсь восстановить данную БД на VPS сервере.
НО у меня создаются только таблицы, без данных.
Перепробывал варианты: pg_restore -c -i -U postgres -d merch_telegram_bot_db test.backup -W
pg_restore --dbname=merch_telegram_bot_db --section=pre-data --jobs=4 test.backup
pg_restore -h localhost -p 5432 -U postgres -d merch_telegram_bot_db -v "/usr/local/bin/bot/test.backup"
и куча др. вариантов, не понимаю в чем проблема.

Подскажите как это все реализовать, либо как импортировать данные из CSV файлов в таблицы БД, посредством linux.

Ошибки при восстановлении резервной копии.
В данном варианте я использовал команду:
pg_restore -h localhost -p 5432 -U postgres -d merch_telegram_bot_db -v "/usr/local/bin/bot/test.backup"


pg_restore: from TOC entry 3036; 0 108349 TABLE DATA category postgres
pg_restore: error: COPY failed for table "category": ERROR: character with byte sequence 0xd0 0x91 in encoding "UTF8" has no equivalent in encoding "LATIN1"
CONTEXT: COPY category, line 1

pg_restore: error: COPY failed for table "product": ERROR: character with byte sequence 0xd0 0x9c in encoding "UTF8" has no equivalent in encoding "LATIN1"
CONTEXT: COPY product, line 1

pg_restore: error: could not execute query: ERROR: insert or update on table "product_photo" violates foreign key constraint "product_photo_product_id_fkey"
DETAIL: Key (product_id)=(1) is not present in table "product".
Command was: ALTER TABLE ONLY public.product_photo
ADD CONSTRAINT product_photo_product_id_fkey FOREIGN KEY (product_id) REFERENCES public.product(product_id);
  • Вопрос задан
  • 2035 просмотров
Решения вопроса 1
ApXNTekToP
@ApXNTekToP Автор вопроса
Недопрограммист
В моем слуаче, помог ответ на вопрос на stackoverflow: https://stackoverflow.com/questions/13115692/encod...


I am answering this because nothing from StackOverFlow worked for me.

I combined two solutions from other sites that did the job (this answer works for Ubuntu server 12.04 and PGSQL 9.1):

Create a file:
nano /etc/profile.d/lang.sh

Add the following
export LANGUAGE="en_US.UTF-8"
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
Save it
Restart shell or run all export commands manually in current shell instance
Reconfigure so the encoding can be UTF8 ([got it from here][1])
sudo su postgres

psql

update pg_database set datistemplate=false where datname='template1';
drop database Template1;
create database template1 with owner=postgres encoding='UTF-8'

lc_collate='en_US.utf8' lc_ctype='en_US.utf8' template template0;

update pg_database set datistemplate=true where datname='template1';
Use template1 for db creation.
I hope this helps ;)


Потом по совету galaxy я сделал вот так,


DROP DATABASE merch_telegram_bot_db;
CREATE DATABASE merch_telegram_bot_db ENCODING 'UTF8';


Дальше я использовал свою команду:

pg_restore -h localhost -p 5432 -U postgres -d merch_telegram_bot_db -v "/usr/local/bin/bot/test.backup"


Спасибо всем за помощь!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Не делайте ничего сложнее селектов через верморду, а лучше выкиньте её вообще.

pg_dump -U postgres -Fc merch_telegram_bot_db > test.backup
createdb -U postgres -E UNICODE merch_telegram_bot_db
pg_restore -U postgres -j 2 -d merch_telegram_bot_db test.backup
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы