Jak uaktualnić PostgreSQL z wersji 9.6 do wersji 10.1 bez utraty danych?
Używam bazy PostgreSQL dla mojej aplikacji Ruby on Rails (na Mac OS X 10.9).
Czy są jakieś szczegółowe instrukcje jak uaktualnić bazę danych PostgreSQL?
Obawiam się, że zniszczę dane w bazie danych lub je zepsuję.
15 answers
Zakładając, że użyłeś home-brew do instalacji i aktualizacji Postgres, możesz wykonać następujące kroki.
-
Zatrzymaj bieżący serwer Postgres:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
-
Zainicjalizuj nową bazę danych 10.1:
initdb /usr/local/var/postgres10.1 -E utf8
-
Run
pg_upgrade
(Uwaga: Zmień wersję bin, Jeśli aktualizujesz z czegoś innego niż poniżej):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
aby włączyć verbose wewnętrzne logowanie-d
Stary klaster baz danych katalog konfiguracji-D
nowy katalog konfiguracji klastra baz danych-b
Stary katalog wykonywalny PostgreSQL-B
nowy katalog wykonywalny PostgreSQL -
Przenieś nowe dane na miejsce:
cd /usr/local/var mv postgres postgres9.6 mv postgres10.1 postgres
-
Restart Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Sprawdź
/usr/local/var/postgres/server.log
, aby dowiedzieć się więcej i upewnić się, że nowy serwer działa poprawnie.-
Na koniec ponownie zainstaluj szyny
pg
gemgem uninstall pg gem install pg
Proponuję poświęcić trochę czasu na przeczytanie dokumentacji PostgreSQL , aby dokładnie zrozumieć, co robisz w powyższych krokach, aby zminimalizować frustracje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-19 14:35:40
Pomimo wszystkich powyższych odpowiedzi, oto moje 5 centów.
Działa na każdym systemie operacyjnym i z dowolnej wersji postgres.
- Zatrzymaj każdą uruchomioną instancję postgres;
- zainstaluj nową wersję i uruchom ją; sprawdź, czy możesz również połączyć się z nową wersją;
- Zmień starą wersję
postgresql.conf
->port
od5432
do5433
; - Uruchom instancję Postgres w starej wersji;
- Otwórz terminal i
cd
do nowej wersjibin
folderu; - Run
pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
- Zatrzymaj starą instancję postgres;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-06 18:11:10
Oto rozwiązanie dla Ubuntu użytkowników
Najpierw musimy zatrzymać postgresql
sudo /etc/init.d/postgresql stop
Utwórz nowy plik o nazwie / etc / apt / sources.lista.d / pgdg.lista i dodaj poniżej wiersz
deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main
Wykonaj poniższe polecenia
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
Teraz mamy wszystko, wystarczy go uaktualnić jak poniżej
sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main
To wszystko. Większość ulepszonych klastrów będzie działać na porcie numer 5433. Sprawdź to za pomocą poniższego polecenia
sudo pg_lsclusters
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-25 08:47:48
Jeśli korzystasz z usług homebrew i homebrew, prawdopodobnie możesz po prostu zrobić:
brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql
Myślę, że może to nie działać całkowicie, jeśli używasz zaawansowanych funkcji postgres, ale działało idealnie dla mnie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-30 01:18:15
Aktualizacja : proces ten jest taki sam dla aktualizacji 9.5 do co najmniej 11.5; po prostu zmodyfikuj polecenia tak, aby odzwierciedlały wersje 9.6
i 10
, gdzie 9.6
jest starą wersją , a 10
jest nową wersją . Pamiętaj, aby odpowiednio dostosować "stare" i "nowe" katalogi.
Właśnie zaktualizowałem PostgreSQL 9.5 do 9.6 na Ubuntu i pomyślałem, że podzielę się swoimi spostrzeżeniami, ponieważ istnieje kilka specyficznych dla systemu operacyjnego/pakietu niuansów świadomy.
(nie chciałem ręcznie wyrzucać i przywracać danych, więc kilka innych odpowiedzi tutaj nie było realnych.)
W skrócie, proces polega na zainstalowaniu nowej wersji PostgreSQL wraz ze starą wersją (np. 9.5 i 9.6), a następnie uruchomieniu pg_upgrade
pliku binarnego, co jest wyjaśnione w (niektórych) szczegółach w https://www.postgresql.org/docs/9.6/static/pgupgrade.html .
Jedynym "trudnym" aspektem pg_upgrade
jest to, że niepowodzenie poprawna wartość argumentu lub nie zalogowanie się jako poprawny użytkownik lub cd
do poprawnej lokalizacji przed wykonaniem polecenia może prowadzić do tajemniczych komunikatów o błędach.
Na Ubuntu (i prawdopodobnie Debianie), pod warunkiem, że używasz "oficjalnego" repo, deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
i pod warunkiem, że nie zmieniłeś domyślnych ścieżek systemu plików lub opcji runtime, poniższa procedura powinna wykonać to zadanie.
Zainstaluj nową wersję (zauważ, że podajemy 9.6
, "wprost"): {]}
sudo apt install postgresql-9.6
Gdy instalacja się powiedzie, obie wersje będą działać obok siebie, ale na różnych portach. Na dole jest napisane o tym wyjście instalacyjne, ale łatwo to przeoczyć: {]}
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
Zatrzymaj obie instancje serwera (spowoduje to zatrzymanie obu w tym samym czasie):
sudo systemctl stop postgresql
Przejście do dedykowanego użytkownika systemu PostgreSQL:
su postgres
Przenieś się do jego katalogu domowego (niezastosowanie się do tego spowoduje błędy):
cd ~
pg_upgrade
wymaga następujących danych wejściowych (pg_upgrade --help
mówi nam o tym):
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)
Dane wejściowe mogą być określone "długimi nazwami", aby ułatwić ich wizualizację.]}
-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
Jeśli nie uda nam się tego zrobić, będziemy musieli przejść przez przełącznik --new-options
, ponieważ niewykonanie tego powoduje, że:
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"?
Dzieje się tak, ponieważ domyślne opcje konfiguracyjne są stosowane w przypadku braku tego przełącznika, co powoduje użycie nieprawidłowych opcji połączenia, stąd błąd gniazda.
Wykonaj polecenie pg_upgrade
z nowej wersji 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
Wylogowanie dedykowanego konta użytkownika systemu:
exit
Uaktualnienie zostało zakończone, ale , nowa instancja będzie powiązana z portem 5433
(standardowo domyślną wartością jest 5432
), więc pamiętaj o tym, gdy próbujesz przetestować nową instancję przed jej "przecięciem".
Uruchom serwer normalnie (ponownie, spowoduje to uruchomienie zarówno starych, jak i nowych instancji):
systemctl start postgresql
Jeśli chcesz nowa wersja domyślna, musisz edytować efektywny plik konfiguracyjny, np. /etc/postgresql/9.6/main/postgresql.conf
, i upewnić się, że port jest zdefiniowany jako taki:
port = 5432
Jeśli to zrobisz, Zmień numer portu starej wersji na 5433
w tym samym czasie (przed uruchomieniem usług) lub po prostu usuń starą wersję (spowoduje to , a nie usunięcie rzeczywistej zawartości bazy danych; musisz użyć apt --purge remove postgresql-9.5
, aby tak się stało):
apt remove postgresql-9.5
Powyższe polecenie zatrzyma wszystkie instancje, więc musisz uruchomić nową instancję po raz ostatni za pomocą:
systemctl start postgresql
Na koniec, nie zapomnij wziąć pod uwagę dobrej rady 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-17 19:36:25
Instrukcja obsługi szczegółowo omawia ten temat. Można:
-
pg_upgrade
in-place; or pg_dump
ipg_restore
.
W razie wątpliwości, zrób to z wysypiskami. Nie usuwaj starego katalogu danych, tylko zachowaj go na wypadek, gdyby coś poszło nie tak / popełnisz błąd; w ten sposób możesz po prostu wrócić do niezmienionej instalacji 9.3.
Szczegółowe informacje znajdują się w instrukcji obsługi.
Jeśli utknąłeś, Wyślij szczegółowe pytanie wyjaśniające, jak utknąłeś, gdzie i to, czego próbowałeś pierwszy. To zależy trochę od tego, jak zainstalowałeś PostgreSQL, ponieważ istnieje kilka różnych "dystrybucji" PostgreSQL dla OS X (niestety). Więc musisz podać te informacje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-24 06:51:38
W 1999 roku, po raz pierwszy w historii Yosemite, pojawiła się nowa wersja Yosemite, w której pojawiła się nowa wersja Yosemite: Yosemite, Yosemite, Yosemite, Yosemite, Yosemite, Yosemite, Yosemite, Yosemite, Yosemite, Yosemite, Yosemite, Yosemite.]}
Zakładając, że użyłeś home-brew do instalacji i aktualizacji Postgres, możesz wykonać następujące kroki.
-
Zatrzymaj bieżący serwer Postgres:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
-
Zainicjalizuj nową bazę danych 9.4:
initdb /usr/local/var/postgres9.4 -E utf8
-
Install postgres 9.3 (as nie było go już na mojej maszynie):
brew install homebrew/versions/postgresql93
-
Dodaj katalogi usunięte podczas aktualizacji 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
-
Run
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/
-
Przenieś nowe dane na miejsce:
cd /usr/local/var mv postgres postgres9.3 mv postgres9.4 postgres
-
Restart Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Sprawdź
/usr/local/var/postgres/server.log
, aby dowiedzieć się więcej i upewnić się, że nowy serwer działa poprawnie.-
Wreszcie, ponownie zainstalować powiązane biblioteki?
pip install --upgrade psycopg2 gem uninstall pg gem install pg
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-17 17:34:11
Wygląda na to, że rozwiązanie zostało teraz upieczone w Homebrew:
$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
....
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-24 06:07:34
To mi pomogło.
Https://gist.github.com/dideler/60c9ce184198666e5ab4
Krótko i na temat. Szczerze mówiąc, nie mam zamiaru rozumieć wnętrzności Postgresqla, chcę coś zrobić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-31 11:43:49
Na Windows ciągle napotykałem różne komunikaty o błędach podczas próby użycia pg_upgrade
.
Zaoszczędziłem dużo czasu dla mnie, aby po prostu:
- Backup DB
- Odinstaluj wszystkie kopie PostgreSQL
- Install 9.5
- Restore DB
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-25 15:19:23
Moim rozwiązaniem było połączenie tych dwóch zasobów:
Https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d
I
Http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4
Drugi jeden pomógł więcej niż pierwszy. Również Nie, Nie postępuj zgodnie z instrukcjami, ponieważ niektóre nie są konieczne. Ponadto, jeśli nie możesz wykonać kopii zapasowej danych za pośrednictwem konsoli postgres, możesz użyć alternatywnego podejścia, i wykonaj kopię zapasową za pomocą pgAdmin 3 lub innego programu, tak jak w moim przypadku.
Również link: https://help.ubuntu.com/stable/serverguide/postgresql.html Pomógł ustawić zaszyfrowane hasło i ustawić md5 do uwierzytelniania użytkownika postgres.
Po tym wszystkim, aby sprawdzić wersję postgres server
Uruchom w terminalu:
sudo -u postgres psql postgres
Po wpisaniu hasła uruchom w terminalu postgres:
SHOW SERVER_VERSION;
Wyświetli coś w stylu:
server_version
----------------
9.4.5
Do ustawiania i uruchamiając postgres użyłem komendy:
> sudo bash # root
> su postgres # postgres
> /etc/init.d/postgresql start
> /etc/init.d/postgresql stop
A następnie do przywrócenia bazy danych z pliku:
> psql -f /home/ubuntu_username/Backup_93.sql postgres
Lub jeśli nie działa spróbuj z tym:
> pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d name_of_database ~/your_file.dump
A jeśli używasz Rails zrób bundle exec rake db:migrate
po ściągnięciu kodu:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-24 12:39:50
Dla Mac przez homebrew:
brew tap petere/postgresql
,
brew install <formula>
(eg: brew install petere/postgresql/postgresql-9.6
)
Usuń stary Postgres:
brew unlink postgresql
brew link -f postgresql-9.6
Jeśli wystąpi jakikolwiek błąd, nie zapomnij przeczytać i postępować zgodnie z instrukcją brew w każdym kroku.
Zobacz więcej: https://github.com/petere/homebrew-postgresql
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-25 22:49:00
W Windows 10 ponieważ miałem npm, zainstalowałem pakiet rimraf. npm install rimraf -g
Tworzenie kopii zapasowych wszystkich baz danych jeden po drugim za pomocą polecenia pg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname
Następnie zainstalowałem najnowszą wersję PostgreSQL tj.
Po odinstalowaniu starszych wersji PostgreSQL moja była 10. Uwaga deinstalator może dać ostrzeżenie o nie usuwaniu folderu C:\PostgreSQL\10\data
. Dlatego mamy kolejny krok za pomocą rimraf, aby trwale usunąć folder i to podfoldery.
Zmień katalog instalacyjny PostgreSQL i uruchom komendę rimraf 10
. 10 to nazwa katalogu. Uwaga używaj starszej wersji PostgreSQL tj. 9.5 lub coś w tym stylu.
Teraz dodaj C:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib
do zmiennych środowiskowych Systemu Windows. Uwaga moja nowa zainstalowana wersja to 11, dlatego używam pg11
.
Przejdź do C:\PostgreSQL\data\pg11
Następnie otwórz postgresql.conf
edytuj port = 5433
do port = 5432
To jest to. Otwórz cmd i wpisz psql -U postgres
Możesz teraz przywrócić wszystkie wspierane bazy danych jeden przez jeden za pomocą polecenia pg_restore -U $username --dbname=$databasename $filename
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-23 08:05:40
Moje rozwiązanie do aktualizacji z Postgresql 11 do Postgresql 12 W Windows 10 jest następujące.
Jako pierwsza uwaga musisz być w stanie zatrzymać i uruchomić usługę Postgresql. Możesz to zrobić za pomocą następujących poleceń w Powershell.
Start:
pg_ctl start -D “d:\postgresql\11\data”
Stop:
pg_ctl stop -D “d:\postgresql\11\data”
Status:
pg_ctl status -D “d:\postgresql\11\data”
Mądrze byłoby zrobić kopię zapasową przed wykonaniem aktualizacji. Instancja Postgresql 11 musi być uruchomiona. Następnie skopiować globale do
pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql
A następnie dla każdej bazy danych
pg_dump -U postgres -Fc <database> > d:\backup\postgresql\11\<database>.fc
Lub
pg_dump -U postgres -Fc -d <database> -f d:\backup\postgresql\11\<database>.fc
Jeśli nie jest to jeszcze zrobione, zainstaluj Postgresql 12 (ponieważ Postgresql 11 jest również zainstalowany, będzie to na porcie 5433)
Następnie należy wykonać upgrade w następujący sposób:
1) Zatrzymaj usługę Postgresql 11 (patrz wyżej)
2) Edytuj plik postgresql.conf
w d:\postgresql\12\data
i zmień port = 5433
na port = 5432
3) edytuj ścieżkę środowiska użytkownika windows (windows start
następnie wpisz env
), aby wskaż PostgreSQL 12 zamiast Postresql 11
4) Uruchom upgrade, wprowadzając następujące polecenie.
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
(w powershell użyj backtick (lub backquote)`, aby kontynuować polecenie w następnej linii)
5) i wreszcie uruchomić nową usługę Postgresql 12
pg_ctl start -D “d:\postgresql\12\data”
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-26 12:38:30
Myślę, że jest to najlepszy link do Twojego rozwiązania, aby zaktualizować postgres do 9.6
https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-11 08:55:19