Я використовую базу даних PostgreSQL для програми Ruby on Rails (на Mac OS X 10.9).
Чи є детальні інструкції щодо оновлення бази даних PostgreSQL?
Боюся, що я знищу дані в базі даних або зіпсую їх.
Я використовую базу даних PostgreSQL для програми Ruby on Rails (на Mac OS X 10.9).
Чи є детальні інструкції щодо оновлення бази даних PostgreSQL?
Боюся, що я знищу дані в базі даних або зіпсую їх.
Відповіді:
Припускаючи, що ви використовували домашню заварку для встановлення та оновлення Postgres, ви можете виконати наступні дії.
Зупинення поточного сервера Postgres:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Ініціалізуйте нову базу даних 10.1:
initdb /usr/local/var/postgres10.1 -E utf8
запустити pg_upgrade
(зверніть увагу: змініть версію контейнера, якщо ви оновлюєте щось інше, ніж нижче) :
pg_upgrade -v \
-d /usr/local/var/postgres \
-D /usr/local/var/postgres10.1 \
-b /usr/local/Cellar/postgresql/9.6.5/bin/ \
-B /usr/local/Cellar/postgresql/10.1/bin/
-v
щоб включити багатослівний внутрішній журнал
-d
старий каталог конфігурації кластера баз даних
-D
новий каталог конфігурації кластера баз даних
-b
старий виконуваний каталог PostgreSQL
-B
новий виконуваний каталог PostgreSQL
Переміщення нових даних на місце:
cd /usr/local/var
mv postgres postgres9.6
mv postgres10.1 postgres
Перезавантажте Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Перевірте /usr/local/var/postgres/server.log
деталі та переконайтеся, що новий сервер запустився належним чином.
Нарешті, знову встановіть pg
дорогоцінний камінь
gem uninstall pg
gem install 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 копійок.
Він працює в будь-якій ОС та з будь-якої будь-якої постгресової версії.
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
sudo /etc/init.d/postgresql stop
Створіть новий файл під назвою /etc/apt/sources.list.d/pgdg.list і додайте нижче рядка
deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main
Дотримуйтесь команд нижче
wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.4
sudo pg_dropcluster --stop 9.4 main
sudo /etc/init.d/postgresql start
Зараз у нас є все, просто потрібно оновити його, як показано нижче
sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main
Це воно. Переважно оновлений кластер працюватиме на номері порту 5433. Перевірте його за допомогою команди нижче
sudo pg_lsclusters
Оновлення : цей процес той же самий для оновлення 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 / статичний / pgupgrade.html .
Єдиний «хитрий» аспект - pg_upgrade
це те, що невдача правильного значення аргументу чи невхід у систему як правильний користувач чи cd
правильне місце розташування перед виконанням команди можуть призвести до критичних повідомлень про помилки.
У Ubuntu (і, можливо, Debian), якщо ви використовуєте "офіційне" репо, deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
і за умови, що ви не змінили шляхи файлової системи за замовчуванням або параметри виконання, слід виконати наступну процедуру.
Встановіть нову версію (зауважте, що ми вказуємо 9.6
прямо):
sudo apt install postgresql-9.6
Після того, як установка буде успішною, обидві версії будуть працювати поруч, але в різних портах. Висновок установки згадує про це внизу, але це легко не помітити:
Creating new cluster 9.6/main ...
config /etc/postgresql/9.6/main
data /var/lib/postgresql/9.6/main
locale en_US.UTF-8
socket /var/run/postgresql
port 5433
Зупиніть обидва екземпляри сервера (це зупинить обидва одночасно):
sudo systemctl stop postgresql
Перехід до спеціалізованого користувача PostgreSQL:
su postgres
Перейдіть у його домашній каталог (якщо це не призведе до помилок):
cd ~
pg_upgrade
вимагає таких входів ( pg_upgrade --help
нам це говорить):
When you run pg_upgrade, you must provide the following information:
the data directory for the old cluster (-d DATADIR)
the data directory for the new cluster (-D DATADIR)
the "bin" directory for the old version (-b BINDIR)
the "bin" directory for the new version (-B BINDIR)
Ці входи можуть бути визначені "довгими іменами", щоб полегшити візуалізацію:
-b, --old-bindir=BINDIR old cluster executable directory
-B, --new-bindir=BINDIR new cluster executable directory
-d, --old-datadir=DATADIR old cluster data directory
-D, --new-datadir=DATADIR new cluster data directory
Ми також мусимо перейти --new-options
комутатор, тому що якщо цього не зробити, це призводить до наступного:
connection to database failed: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/lib/postgresql/.s.PGSQL.50432"?
Це відбувається тому, що параметри конфігурації за замовчуванням застосовуються за відсутності цього комутатора, що призводить до використання неправильних параметрів з'єднання, отже, помилка сокета.
Виконайте pg_upgrade
команду з нової версії PostgreSQL:
/usr/lib/postgresql/9.6/bin/pg_upgrade --old-bindir=/usr/lib/postgresql/9.5/bin --new-bindir=/usr/lib/postgresql/9.6/bin --old-datadir=/var/lib/postgresql/9.5/main --new-datadir=/var/lib/postgresql/9.6/main --old-options=-cconfig_file=/etc/postgresql/9.5/main/postgresql.conf --new-options=-cconfig_file=/etc/postgresql/9.6/main/postgresql.conf
Вихід із спеціалізованого облікового запису користувача системи:
exit
Оновлення зараз завершено, але новий екземпляр буде прив'язуватися до порту 5433
(стандартний стандартний стандарт 5432
), тому майте це на увазі, якщо ви намагатиметесь перевірити новий екземпляр, перш ніж "перерізати" його.
Запустіть сервер як звичайно (знову ж, це запустить і старі, і нові екземпляри):
systemctl start postgresql
Якщо ви хочете зробити нову версію за замовчуванням, вам потрібно буде відредагувати ефективний файл конфігурації, наприклад /etc/postgresql/9.6/main/postgresql.conf
, і переконатися, що порт визначений як такий:
port = 5432
Якщо ви це зробите, або змініть номер порту старої версії 5433
на одночасно (перед запуском послуг), або просто видаліть стару версію (це не видалить фактичний вміст бази даних; вам потрібно буде використовувати apt --purge remove postgresql-9.5
, щоб це сталося ):
apt remove postgresql-9.5
Наведена вище команда зупинить усі екземпляри, тому вам потрібно буде запустити новий примірник останній раз із:
systemctl start postgresql
В якості остаточної точки зауваження не забудьте врахувати pg_upgrade
гарну пораду:
Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
./analyze_new_cluster.sh
Running this script will delete the old cluster's data files:
./delete_old_cluster.sh
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
Якщо ви користуєтеся домашньою та домашньою послугою, ви, ймовірно, можете просто зробити:
brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql
Я думаю, це може не спрацювати повністю, якщо ви використовуєте розширені функції постгресу, але для мене це прекрасно працювало.
Посібник користувача глибоко висвітлює цю тему. Ти можеш:
pg_upgrade
на місці; або
pg_dump
і pg_restore
.
Якщо ви сумніваєтеся, робіть це з відвалами. Не видаляйте старий каталог даних, а зберігайте його на випадок, якщо щось піде не так / ви помилитесь; таким чином ви можете просто повернутися до незмінної установки 9.3.
Детальніше див. У посібнику.
Якщо ви застрягли, опублікуйте детальне запитання, де пояснюється, як ви застрягли, де і що ви спробували спочатку. Трохи залежить від того, як ви встановили PostgreSQL, оскільки існує декілька різних "розподілів" PostgreSQL для OS X (на жаль). Тому вам потрібно буде надати цю інформацію.
Стоячи на плечах інших бідних істот, що ковтають через цю гадку, я зміг виконати наступні кроки, щоб повернутися назад і працювати після оновлення до Йосеміті:
Припускаючи, що ви використовували домашню заварку для встановлення та оновлення 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/
Переміщення нових даних на місце:
cd /usr/local/var
mv postgres postgres9.3
mv postgres9.4 postgres
Перезавантажте Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Перевірте /usr/local/var/postgres/server.log
деталі та переконайтеся, що новий сервер запустився належним чином.
Нарешті, перевстановити відповідні бібліотеки?
pip install --upgrade psycopg2
gem uninstall pg
gem install pg
brew cleanup
до переміщення даних, що призвело до видалення postgres9.3. Це допомогло. :)
Виглядає, що рішення було виведено на домашню мову:
$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
....
Це зробило це для мене.
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 у терміналі:
sudo -u postgres psql postgres
Після введення пароля запустіть у терміналі postgres:
SHOW SERVER_VERSION;
Він виведе щось на зразок:
server_version
----------------
9.4.5
Для налаштування та запуску постгресів я використав команду:
> sudo bash # root
> su postgres # postgres
> /etc/init.d/postgresql start
> /etc/init.d/postgresql stop
А потім для відновлення бази даних з файлу:
> psql -f /home/ubuntu_username/Backup_93.sql postgres
Або якщо не виходить, спробуйте з цим:
> pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d name_of_database ~/your_file.dump
А якщо ви використовуєте Rails, зробіть це bundle exec rake db:migrate
після витягування коду :)
Для Mac через домашню мову:
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 11
4) Запустіть оновлення, ввівши наступну команду.
pg_upgrade `
-b “c:\program files\postgresql\11\bin” `
-B “c:\program files\postgresql\12\bin” `
-d “d:\postgresql\11\data” `
-D “d:\postgresql\12\data” --username=postgres
(У powerhell використовуйте backtick (або backquote) `для продовження команди в наступному рядку)
5) і нарешті запустити нову послугу Postgresql 12
pg_ctl start -D “d:\postgresql\12\data”
Я думаю, що це найкраще посилання для вашого рішення, щоб оновити postgres до 9.6
https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/