Size: a a a

ERP USERSIDE - Общение

2019 November 30

G

Goletsa in ERP USERSIDE - Общение
Денис Бондарь
потому что ты же тоже мог где-то допустить ошибку и даже не заметить. это ведь нормально. бывает же
Я со скрипта все делаю, содержимое я показал
источник

ДБ

Денис Бондарь in ERP USERSIDE - Общение
Кстати, еще очень частая ошибка. Я не знаю как с ней быть. МОжет быть кто подскажет.
Ситуация такая.
1. Админ делает дамп базы
2. Потом, наверное, настраивает новый сервер или обновляет postgresql на новую мажорную версию (например, с 10 на 11) ну или делает какие-то еще действия, которые приводят к тому, что расширение postgis либо отсутствует вообще либо не подходит по версии
3. Потом разворачивает дамп базы.
4. Запускает инсталлятор в режиме восстановления repair и видит, что у него отсутствует postgis
5. Устанавливает и активирует postgis
6. Запускает инсталлятор снова - теперь расширение найдено и все работает нормально
7. Но в юзерсайд не работают некоторые функции, связанные с postgis

Что фактически произошло:

Так как на момент развёртывания бекапа (п3) в системе отсутствовало расширение postgis, то таблицы, содержащие поля геометрических типов, не были созданы (тип не существует) - об этом, конечно же, выводится ошибка в консоль при восстановлении.
Но админ игнорирует ошибку, может быть считает, что и так проканает?
В итоге в развернутой из дампа базе нет не только нужных таблиц, а и связанных с ними индексов, внешних ключей и т.д. В общем база данных не валидна.
И хорошо, если это было замечено сразу, а не через меясц :)
Вот как быть в данной ситуации?
источник

ДБ

Денис Бондарь in ERP USERSIDE - Общение
Goletsa
Я со скрипта все делаю, содержимое я показал
сделай руками
источник

G

Goletsa in ERP USERSIDE - Общение
Денис Бондарь
сделай руками
Там скрипт это 1 команда)
источник

G

Goletsa in ERP USERSIDE - Общение
Чтобы все параметры каждый раз не вводить
источник

G

Goletsa in ERP USERSIDE - Общение
Goletsa
$ cat restore_beta.sh
pg_restore --clean --if-exists --create --dbname=userbeta
.
источник

ДБ

Денис Бондарь in ERP USERSIDE - Общение
погоди!
источник

ДБ

Денис Бондарь in ERP USERSIDE - Общение
а что там делает --create
источник

ДБ

Денис Бондарь in ERP USERSIDE - Общение
вот и ошибка
источник

ДБ

Денис Бондарь in ERP USERSIDE - Общение
убери --create
источник

ДБ

Денис Бондарь in ERP USERSIDE - Общение
вася )))
источник

G

Goletsa in ERP USERSIDE - Общение
Денис Бондарь
а что там делает --create
Взято из доки
источник

ДБ

Денис Бондарь in ERP USERSIDE - Общение
фиг там!
источник

ДБ

Денис Бондарь in ERP USERSIDE - Общение
нет там такого и не было никогда
источник

ДБ

Денис Бондарь in ERP USERSIDE - Общение
нука покажи
источник

ДБ

Денис Бондарь in ERP USERSIDE - Общение
я тебе могу историю правок показать, чтбоы доказать что не было в доке такой команды никогда
источник

ДБ

Денис Бондарь in ERP USERSIDE - Общение
Денис Бондарь
с рестором там есть важный нюанс и в нашей документации он опсиан, но кто ее читает да?
там при восстановлении базы данных с пересозданием базы данных, нужно указывать имя системной базы данных - postgres.
90% админов почему-то считают, что это опечатка, и пишут туда свое имя базы данных ))))
вот и ты попался на это
источник

ДБ

Денис Бондарь in ERP USERSIDE - Общение
когда ты указываешь --create, то создается база данных из дампа
в этом случае ключ --dbname обязательный, так как нужно же утилите куда-то подключиться, чтобы работать с СУБД. Вот и выбирается для этого системная база postgres, но восстановление будет происходить в ту базу, которая в дампе - об этом говорит ключ --create
источник

G

Goletsa in ERP USERSIDE - Общение
Денис Бондарь
когда ты указываешь --create, то создается база данных из дампа
в этом случае ключ --dbname обязательный, так как нужно же утилите куда-то подключиться, чтобы работать с СУБД. Вот и выбирается для этого системная база postgres, но восстановление будет происходить в ту базу, которая в дампе - об этом говорит ключ --create
В общем нелогично и понятно
источник

ДБ

Денис Бондарь in ERP USERSIDE - Общение
В твоем случае надо не использовать --create, так как ты собираешься не создавать базу из дампа, а развернуть в существующую другую базу - ее имя и указывается в --dbname
источник