postgre backup restore
От: Узумаки Первачев  
Дата: 07.02.24 11:03
Оценка:
нужно перенести базу
использую такие команды для переноса
$ pg_dump -Fc db > db.Fc.dump
$ pg_restore -d db --jobs=8 db.Fc.dump
pg_restore -U admin_medical -h localhost -d admin_medical  -v db.Fc.dump


создаю базу так
postgres=# create database admin_medical;
CREATE DATABASE
postgres=# alter database admin_medical owner to admin_medical;
ALTER DATABASE
postgres=# grant all privileges on database admin_medical to admin_medical;
GRANT


но при восстановлении лезут какие то ошибки типа
pg_restore: [archiver (db)] Error from TOC entry 4376; 0 0 ACL SCHEMA public postgres
pg_restore: [archiver (db)] could not execute query: ERROR:  role "amn_user_ext" does not exist
    Command was: GRANT USAGE ON SCHEMA public TO amn_user_ext;

pg_restore: [archiver (db)] Error from TOC entry 3968; 1259 92976 INDEX pages_heade_created_cadfcf_brin amn_db
pg_restore: [archiver (db)] could not execute query: ERROR:  access method "brin" does not exist

pg_restore: [archiver (db)] could not execute query: ERROR:  relation "public.cart_cartitem" does not exist
    Command was: CREATE INDEX cart_cartitem_content_type_id_b30c9927 ON public.cart_cartitem USING btree (content_type_id);

WARNING: errors ignored on restore: 573


гугление и чатгпт не помогло
как правильно сделать бекап и восстановить без ошибок?
я за справедливость
Re: postgre backup restore
От: Maniacal Россия  
Дата: 07.02.24 12:01
Оценка:
Здравствуйте, Узумаки Первачев, Вы писали:

УП>гугление и чатгпт не помогло

УП>как правильно сделать бекап и восстановить без ошибок?

Методом проб и ошибок удалось пакетные файлы запилить для этого.
У меня пара батников, один бэкапит с одного сервака, в формате директории с именем файла с текущей датой в составе названия. Второй накатывает базу на другой IP из папки с последней датой в названии.
Приведу самую главную часть в упрощённом виде, без использования дат.

Backup:

pg_dump --host=GRAPHICS-FT --username=postgres --role=postgres --dbname=atmosphere --blobs --encoding=UTF8 --format=d --file=backup


Restore:

psql --host=192.168.1.3 --dbname=atmosphere --username=postgres -c "DROP SCHEMA IF EXISTS public CASCADE" 2>nul 1>nul
psql --host=192.168.1.3 --dbname=atmosphere --username=postgres -c "CREATE SCHEMA public" 2>nul 1>nul
pg_restore -c --format=directory --host=192.168.1.3 --username=postgres --dbname=atmosphere --role=postgres --if-exists backup


Можно предварительно задать пароль, чтобы не спрашивало с клавиатуры:

SET PGPASSWORD=<пароль>

Отредактировано 07.02.2024 12:01 Maniacal . Предыдущая версия .
Re[2]: postgre backup restore
От: Узумаки Первачев  
Дата: 07.02.24 13:02
Оценка:
Здравствуйте, Maniacal, Вы писали:

M>Здравствуйте, Узумаки Первачев, Вы писали:


УП>>гугление и чатгпт не помогло

УП>>как правильно сделать бекап и восстановить без ошибок?

M>Методом проб и ошибок удалось пакетные файлы запилить для этого.

M>У меня пара батников, один бэкапит с одного сервака, в формате директории с именем файла с текущей датой в составе названия. Второй накатывает базу на другой IP из папки с последней датой в названии.
M>Приведу самую главную часть в упрощённом виде, без использования дат.

M>Backup:

M>

M>pg_dump --host=GRAPHICS-FT --username=postgres --role=postgres --dbname=atmosphere --blobs --encoding=UTF8 --format=d --file=backup


M>Restore:

M>

M>psql --host=192.168.1.3 --dbname=atmosphere --username=postgres -c "DROP SCHEMA IF EXISTS public CASCADE" 2>nul 1>nul
M>psql --host=192.168.1.3 --dbname=atmosphere --username=postgres -c "CREATE SCHEMA public" 2>nul 1>nul
M>pg_restore -c --format=directory --host=192.168.1.3 --username=postgres --dbname=atmosphere --role=postgres --if-exists backup


M>Можно предварительно задать пароль, чтобы не спрашивало с клавиатуры:

M>

M>SET PGPASSWORD=<пароль>


все равно лезут ошибки
я за справедливость
Re: postgre backup restore
От: m2user  
Дата: 07.02.24 13:13
Оценка: +1
УП>pg_restore: [archiver (db)] could not execute query: ERROR: role "amn_user_ext" does not exist

Я конечно не спец по postgresql , но database роли там общие на все БД (как server roles у MS SQL server)
https://www.postgresql.org/docs/8.1/user-manag.html#DATABASE-ROLES

Database roles are global across a database cluster installation (and not per individual database).


Пишут, что дампить их нужно так:
pg_dumpall --globals-only > globals.dump

https://superuser.com/a/1464986

Возможно другие ошибки имеют аналогичную природу.
Отредактировано 07.02.2024 13:35 m2user . Предыдущая версия .
Re: postgre backup restore
От: vsb Казахстан  
Дата: 07.02.24 13:27
Оценка:
Лично я бэкаплю с --no-owner и --no-privileges в обычный sql-скрипт и восстанавливаю с помощью psql. Но я не пользуюсь никаким функционалом, связанным с юзерами, ролями, доступами, у меня всегда один юзер, владеющий всей базой данных.
Re[2]: postgre backup restore
От: Узумаки Первачев  
Дата: 07.02.24 16:01
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Лично я бэкаплю с --no-owner и --no-privileges в обычный sql-скрипт и восстанавливаю с помощью psql. Но я не пользуюсь никаким функционалом, связанным с юзерами, ролями, доступами, у меня всегда один юзер, владеющий всей базой данных.


у меня много разных юзеров как в субд откуда беру базу так и в субд куда добавляю базу
я всегда пользовался mysql и там нету всех этих ньюансов с юзерами
я за справедливость
Re: postgre backup restore
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.02.24 21:40
Оценка:
Здравствуйте, Узумаки Первачев, Вы писали:

УП>как правильно сделать бекап и восстановить без ошибок?


Удивишься: выключить сервер где лежала база, скопировать каталог базы данных на новый сервер, запустить новый сервер.

Дефолтный дамп сохраняет по сути набор SQL команд для воспроизведения базы (а в некоторых режимах реально выдает огромный sql скрипт)
По умолчанию включаются команды назначения прав для юзеров и ролей, но сами юзеры и роли не хранятся в БД.
Кроме того у вас могут отличаться натсройки сервера и поведение команд будет слегка различное. В итоге pg_dump+pg_restore не создает точную копию базы, как бекап-рестор в sql server. Надежный способ сделать полную копию — см выше.
Re[3]: postgre backup restore
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.02.24 21:41
Оценка:
Здравствуйте, Узумаки Первачев, Вы писали:

УП>я всегда пользовался mysql и там нету всех этих ньюансов с юзерами

Есть, там просто ошибки не сыпятся.
Re[2]: postgre backup restore
От: · Великобритания  
Дата: 08.02.24 09:43
Оценка:
Здравствуйте, gandjustas, Вы писали:

g> Удивишься: выключить сервер где лежала база, скопировать каталог базы данных на новый сервер, запустить новый сервер.

По-моему, это не подходит конкретно для backup/restore, т.к. требует точной бинарной совместимости и идентичности конфигов субд на серверах. Такое скорее для однократной миграции, чем для бекапов. А то внезапно выяснится, что "бэкап" взятый пару месяцев назад в некоторых местах не работает и хз почему.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: postgre backup restore
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.02.24 10:58
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, gandjustas, Вы писали:


g>> Удивишься: выключить сервер где лежала база, скопировать каталог базы данных на новый сервер, запустить новый сервер.

·>По-моему, это не подходит конкретно для backup/restore, т.к. требует точной бинарной совместимости и идентичности конфигов субд на серверах.
Такое скорее для однократной миграции, чем для бекапов. А то внезапно выяснится, что "бэкап" взятый пару месяцев назад в некоторых местах не работает и хз почему.

Увы postgres весь такой. Я почти год пытался найти нормальный способ бекапа-рестора, как в mssql, но увы.
Re[4]: postgre backup restore
От: · Великобритания  
Дата: 08.02.24 11:21
Оценка:
Здравствуйте, gandjustas, Вы писали:

g> Увы postgres весь такой. Я почти год пытался найти нормальный способ бекапа-рестора, как в mssql, но увы.

А какие проблемы возникли с pgdump? Он вроде бы и запилен на то, чтобы генерить совместимый скрипт.
Ну с правами проблема как в этом топике в каком-то смысле ожидаема... а ещё что?

Кстати, там же вроде WAL есть, можно инкрементально бэкапить или просто реплицировать.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: postgre backup restore
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.02.24 11:26
Оценка: 83 (2)
Здравствуйте, ·, Вы писали:

·>Здравствуйте, gandjustas, Вы писали:


g>> Увы postgres весь такой. Я почти год пытался найти нормальный способ бекапа-рестора, как в mssql, но увы.

·>А какие проблемы возникли с pgdump? Он вроде бы и запилен на то, чтобы генерить совместимый скрипт.
Дефолт вариант всегда ругается ошибками при переносе между средами. Он по умолчанию настроен на то, чтобы генерировать скрипт, который можно ресторнуть на том же сервере. надо прописывать много настроек дампа, чтобы получать переносимый дамп

·>Ну с правами проблема как в этом топике в каком-то смысле ожидаема... а ещё что?

Он же пипец медленный. 200гб база ресторится часами, тогда как SQL Server на том же объеме тех же данных делает бека-рестор 15 мин.
и самое главное ошибка может быть где-то в конце.

·>Кстати, там же вроде WAL есть, можно инкрементально бэкапить или просто реплицировать.

Это надо сначала настроить базу, а потом репликацию. А чтобы настроить надо бекап перенсти, а как раз с этим проблемы, которые написал выше.
Re[2]: postgre backup restore
От: Узумаки Первачев  
Дата: 10.02.24 07:18
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, Узумаки Первачев, Вы писали:


УП>>как правильно сделать бекап и восстановить без ошибок?


G>Удивишься: выключить сервер где лежала база, скопировать каталог базы данных на новый сервер, запустить новый сервер.


G>Дефолтный дамп сохраняет по сути набор SQL команд для воспроизведения базы (а в некоторых режимах реально выдает огромный sql скрипт)

G>По умолчанию включаются команды назначения прав для юзеров и ролей, но сами юзеры и роли не хранятся в БД.
G>Кроме того у вас могут отличаться натсройки сервера и поведение команд будет слегка различное. В итоге pg_dump+pg_restore не создает точную копию базы, как бекап-рестор в sql server. Надежный способ сделать полную копию — см выше.

а как перенести файлы только одной базы? там хранятся только каталоги с именем в виде ид
я так понимаю что нужно все равно создавать такого же юзера как на исходной базе,ну и для верности базу с тем же именем?
я за справедливость
Re[3]: postgre backup restore
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.02.24 08:28
Оценка:
Здравствуйте, Узумаки Первачев, Вы писали:

УП>а как перенести файлы только одной базы? там хранятся только каталоги с именем в виде ид

Ну вот каталог и перенеси

УП>я так понимаю что нужно все равно создавать такого же юзера как на исходной базе,ну и для верности базу с тем же именем?

Чтобы иметь доступ под тем же юзером, конечно надо создать тех же юзеров в тех же ролях
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.