Я использую базу данных PostgreSQL для своего приложения Ruby on Rails (в Mac OS X 10.9).
Есть ли подробные инструкции по обновлению базы данных PostgreSQL?
Боюсь, я уничтожу данные в базе данных или испорчу их.
postgresql
upgrade
user3675188
источник
источник
Ответы:
Предполагая, что вы использовали home-brew для установки и обновления Postgres, вы можете выполнить следующие шаги.
Остановить текущий сервер Postgres:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Инициализируйте новую базу данных 10.1:
initdb /usr/local/var/postgres10.1 -E utf8
запустите
pg_upgrade
(примечание: измените версию bin, если вы обновляете что-то другое, чем показано ниже) :-v
включить подробное внутреннее ведение журнала-d
старый каталог конфигурации кластера базы данных-D
новый каталог конфигурации кластера базы данных-b
старый исполняемый каталог PostgreSQL-B
новый каталог исполняемых файлов PostgreSQLПереместить новые данные на место:
Перезапустите Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Проверьте
/usr/local/var/postgres/server.log
детали и убедитесь, что новый сервер запущен правильно.Наконец, переустановите рельсы
pg
каменьЯ предлагаю вам потратить некоторое время на чтение документации PostgreSQL, чтобы точно понять, что вы делаете на вышеуказанных этапах, чтобы минимизировать разочарования.
источник
initdb /usr/local/var/postgres9.4 -E utf8 --lc-collate=C --lc-ctype=utf-8 --lc-monetary=C --lc-numeric=C
delete_old_cluster.sh
командой. Сначала я вручную удалил каталоги /usr/local/postgres9.3, затем запустил эту команду и, похоже, потерял весь каталог / usr / local / var / postgres (мне удалось восстановить его из Time Machine)gem uninstall pg
но затем позволить bundler переустановить правильную версию из Gemfile.lock, просто запустивbundle
.brew
теперь также имеет возможность использоватьbrew services stop postgresql
иbrew services start postgresql
вместо прямого вызоваlaunchctl unload
иlaunchctl load
.Несмотря на все ответы выше, здесь идут мои 5 центов.
Он работает на любой ОС и от любой до любой версии Postgres.
postgresql.conf
->port
с5432
на5433
;cd
вbin
папку с новой версией ;pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
источник
postgresql.conf
илиpg_hba.conf
), вам потребуется вручную реплицировать эти изменения в новой установке. Вместо этого, если вы используетеpg_upgradecluster
, файлы конфигурации будут скопированы в новый кластер: manpages.ubuntu.com/manpages/precise/man8/…pg_dumpall: could not connect to database "XXX": fe_sendauth: no password supplied
Current releases of the dump programs can read data from any server version back to 7.0.
Вот решение для пользователей Ubuntu
Сначала мы должны остановить postgresql
Создайте новый файл с именем /etc/apt/sources.list.d/pgdg.list и добавьте строку ниже
Следуйте приведенным ниже командам
Теперь у нас есть все, просто нужно обновить его, как показано ниже
Вот и все. В основном модернизированный кластер будет работать на порту с номером 5433. Проверьте это с помощью следующей команды
источник
Обновление : этот процесс такой же, как для обновления 9,5 до 11,5; просто изменить команды , чтобы отразить версии
9.6
и10
, где9.6
это старая версия , и10
это новая версия. Обязательно измените «старый» и «новый» каталоги соответственно.Я только что обновил PostgreSQL 9.5 до 9.6 в Ubuntu и подумал, что поделюсь своими выводами, так как есть пара специфических для ОС / пакетов нюансов, о которых нужно знать.
( Я не хотел делать дамп и восстанавливать данные вручную , поэтому некоторые другие ответы здесь были нежизнеспособны.)
Вкратце, этот процесс состоит из установки новой версии PostgreSQL вместе со старой версией (например, 9.5 и 9.6), а затем запуска
pg_upgrade
двоичного файла, что подробно объясняется (некоторые) на https://www.postgresql.org/ docs / 9.6 / static / pgupgrade.html .Единственный «хитрый» аспект
pg_upgrade
заключается в том, что неудача при передаче правильного значения для аргумента или невозможность войти в систему как правильный пользователь илиcd
в правильное местоположение перед выполнением команды может привести к загадочным сообщениям об ошибках.В Ubuntu (и, возможно, Debian), при условии, что вы используете «официальный» репозиторий
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
и если вы не изменили пути файловой системы по умолчанию или параметры времени выполнения, следующая процедура должна выполнить эту работу.Установите новую версию (обратите внимание, что мы указываем
9.6
явно):После успешной установки обе версии будут работать параллельно, но на разных портах. В выводе об установке это упоминается внизу, но его легко пропустить:
Остановите оба экземпляра сервера (это остановит оба экземпляра одновременно):
Переключитесь на выделенного пользователя системы PostgreSQL:
Перейдите в его домашнюю директорию (если этого не сделать, возникнут ошибки):
pg_upgrade
требует следующих входных данных (pg_upgrade --help
говорит нам об этом):Эти входные данные могут быть указаны с «длинными именами», чтобы их было проще визуализировать:
Мы также должны пропустить
--new-options
коммутатор, потому что неисполнение этого приводит к следующему:Это происходит потому, что параметры конфигурации по умолчанию применяются при отсутствии этого переключателя, что приводит к неправильным параметрам подключения, что приводит к ошибке сокета.
Выполните
pg_upgrade
команду из новой версии PostgreSQL:Выход из выделенной учетной записи пользователя системы:
Обновление теперь завершено, но новый экземпляр будет привязан к порту
5433
(стандартное значение по умолчанию - это так5432
), поэтому имейте это в виду при попытке протестировать новый экземпляр перед его «включением».Запустите сервер как обычно (опять же, это запустит и старый, и новый экземпляры):
Если вы хотите сделать новую версию версией по умолчанию, вам необходимо отредактировать эффективный файл конфигурации, например
/etc/postgresql/9.6/main/postgresql.conf
, и убедиться, что порт определен следующим образом:Если вы сделаете это, либо измените номер порта старой версии
5433
на одновременно (перед запуском служб), либо просто удалите старую версию (это не приведет к удалению фактического содержимого базы данных; вам придется использовать егоapt --purge remove postgresql-9.5
для этого) ):Приведенная выше команда остановит все экземпляры, поэтому вам нужно запустить новый экземпляр в последний раз с помощью:
В качестве последнего замечания, не забудьте учесть
pg_upgrade
хороший совет:источник
sudo su postgres
измените все METHOD в pg_hba.conf на монтаж на доверии перед тем pg_upgrade, работает pg_upgrade в / частных / TMP не ~ не работает такsudo mkdir /foobar
сchmod 777 /foobar
и побежал туда. Наконец команда pg_upgrade:/Library/PostgreSQL/9.5/bin/pg_upgrade -b /Library/PostgreSQL/9.2/bin -B /Library/PostgreSQL/9.5/bin -d /Library/PostgreSQL/9.2/data -D /Library/PostgreSQL/9.5/data -o -cconfig_file=/Library/PostgreSQL/9.2/data/postgresql.conf -O -cconfig_file=/Library/PostgreSQL/9.5/data/postgresql.conf
Если вы используете услуги homebrew и homebrew, вы, вероятно, можете просто:
Я думаю, что это может не сработать полностью, если вы используете расширенные функции Postgres, но это отлично сработало для меня.
источник
Руководство пользователя охватывает эту тему подробно. Ты можешь:
pg_upgrade
на месте; илиpg_dump
иpg_restore
.Если есть сомнения, делайте это с помощью дампов. Не удаляйте старый каталог данных, просто сохраните его на случай, если что-то пойдет не так / вы ошиблись; Таким образом, вы можете просто вернуться к своей неизменной версии 9.3.
Подробнее см. В руководстве.
Если вы застряли, опубликуйте подробный вопрос, объясняющий, как вы застряли, где и что вы пробовали в первую очередь. Это также немного зависит от того, как вы установили PostgreSQL, поскольку существует несколько различных «дистрибутивов» PostgreSQL для OS X (к сожалению). Так что вам нужно предоставить эту информацию.
источник
Стоя на плечах других бедных существ, пробирающихся сквозь эту гадость, я смог выполнить следующие шаги, чтобы вернуться к работе после перехода на Yosemite:
Предполагая, что вы использовали home-brew для установки и обновления Postgres, вы можете выполнить следующие шаги.
Остановить текущий сервер Postgres:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Инициализируйте новую базу данных 9.4:
initdb /usr/local/var/postgres9.4 -E utf8
Установите postgres 9.3 (так как его больше не было на моей машине):
brew install homebrew/versions/postgresql93
Добавить каталоги, удаленные во время обновления Yosemite:
mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/touch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep
запустить
pg_upgrade
:pg_upgrade -v -d /usr/local/var/postgres -D /usr/local/var/postgres9.4 -b /usr/local/Cellar/postgresql93/9.3.5/bin/ -B /usr/local/Cellar/postgresql/9.4.0/bin/
Переместить новые данные на место:
Перезапустите Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Проверьте
/usr/local/var/postgres/server.log
детали и убедитесь, что новый сервер запущен правильно.Наконец, переустановите связанные библиотеки?
источник
brew cleanup
перед переносом данных, и это привело к удалению postgres9.3. Это помогло. :)Похоже, что решение было добавлено в Homebrew:
источник
Это сделало это для меня.
https://gist.github.com/dideler/60c9ce184198666e5ab4
Коротко и точно. Честно говоря, я не ставлю перед собой цель разобраться в сути PostgreSQL, я хочу, чтобы все было сделано.
источник
jessie
. Имел 10+ БД и объем ~ 400 МБ данных базы данных был преобразован в мгновение ока. Опять же, я использую виртуальный Debian на SSD.pg_upgradecluster 9.4 main
но я получаю сообщение об ошибке Ошибка:specified cluster does not exist
... Наверное, сначала мне нужно снова установить postgresql-9.4 с этим руководством: wiki.postgresql.org/wiki/Apt#QuickstartВ Windows я продолжал сталкиваться с различными сообщениями об ошибках при попытке использования
pg_upgrade
.Я сэкономил много времени, чтобы просто:
источник
Моим решением было сделать комбинацию этих двух ресурсов:
https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d
и
http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4
Второй один помог более , то первым из них. Также, чтобы не делать, не следуйте инструкциям, так как некоторые из них не нужны. Также, если вы не можете сделать резервную копию данных через консоль postgres, вы можете использовать альтернативный подход и сделать резервную копию с помощью pgAdmin 3 или другой программы, как я делал в моем случае.
Также ссылка: https://help.ubuntu.com/stable/serverguide/postgresql.html Помогла установить зашифрованный пароль и установить md5 для аутентификации пользователя postgres.
После того, как все сделано, чтобы проверить
server
версию postgres, запустите в терминале:После ввода пароля запустите в терминале postgres:
Это выведет что-то вроде:
Для настройки и запуска postgres я использовал команду:
А затем для восстановления базы данных из файла:
Или, если не работает, попробуйте с этим:
И если вы используете Rails, сделайте
bundle exec rake db:migrate
после того, как потянете код :)источник
Для Mac с помощью homebrew:
brew tap petere/postgresql
,brew install <formula>
(например:brew install petere/postgresql/postgresql-9.6
)Удалить старый Postgres:
brew unlink postgresql
brew link -f postgresql-9.6
Если произойдет какая-либо ошибка, не забудьте прочитать и следовать инструкциям по приготовлению на каждом этапе.
Проверьте это для получения дополнительной информации: https://github.com/petere/homebrew-postgresql
источник
На Windows 10, так как у меня был npm, я установил пакет rimraf.
npm install rimraf -g
Резервное копирование всех ваших баз данных по одной с помощью команды
pg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname
Затем установил последнюю версию PostgreSQL, т.е. 11.2, которая на этот раз побудила меня использовать порт 5433.
После удаления более старых версий PostgreSQL у меня было 10. Обратите внимание, что программа удаления может выдать предупреждение о том, что папка не удаляется
C:\PostgreSQL\10\data
. Вот почему у нас есть следующий шаг, используя rimraf для окончательного удаления папки и ее подпапок.Перейдите в каталог установки PostgreSQL и выполните команду
rimraf 10
. 10 - это имя каталога. Обратите внимание, используйте вашу старую версию PostgreSQL, т.е. 9.5 или что-то еще.Теперь добавьте
C:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib
в Windows переменные среды. Обратите внимание, что моя новая установленная версия 11, поэтому я используюpg11
.Перейдите, чтобы
C:\PostgreSQL\data\pg11
затем открытьpostgresql.conf
редактированиеport = 5433
вport = 5432
Вот и все. Откройте cmd и введите
psql -U postgres
Теперь вы можете восстановить все ваши резервные базы данных по одной, используя команду
pg_restore -U $username --dbname=$databasename $filename
источник
Мое решение для обновления с Postgresql 11 до Postgresql 12 в Windows 10 заключается в следующем.
В качестве первого замечания вы должны быть в состоянии остановить и запустить службу Postgresql. Вы можете сделать это с помощью следующих команд в Powershell.
Начало:
pg_ctl start -D “d:\postgresql\11\data”
Стоп:
pg_ctl stop -D “d:\postgresql\11\data”
Положение дел:
pg_ctl status -D “d:\postgresql\11\data”
Было бы целесообразно сделать резервную копию перед обновлением. Экземпляр Postgresql 11 должен быть запущен. Затем скопировать глобалы сделать
pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql
а затем для каждой базы данных
pg_dump -U postgres -Fc <database> > d:\backup\postgresql\11\<database>.fc
или
pg_dump -U postgres -Fc -d <database> -f d:\backup\postgresql\11\<database>.fc
Если это еще не сделано, установите Postgresql 12 (поскольку Postgresql 11 также установлен, это будет порт 5433)
Затем выполнить обновление следующим образом:
1) Остановить службу Postgresql 11 (см. Выше)
2) Отредактируйте
postgresql.conf
файлd:\postgresql\12\data
и изменитеport = 5433
наport = 5432
3) Измените путь среды пользователя Windows (
windows start
затем введитеenv
), чтобы он указывал на Postgresql 12 вместо Postresql 114) Запустите обновление, введя следующую команду.
(В powershell используйте backtick (или backquote) `для продолжения команды на следующей строке)
5) и, наконец, запустить новый сервис Postgresql 12
pg_ctl start -D “d:\postgresql\12\data”
источник
Я думаю, что это лучшая ссылка для вашего решения, чтобы обновить Postgres до 9,6
источник