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ę.

Author: Donovan, 2014-06-24

15 answers

Zakładając, że użyłeś home-brew do instalacji i aktualizacji Postgres, możesz wykonać następujące kroki.

  1. Zatrzymaj bieżący serwer Postgres:

    launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  2. Zainicjalizuj nową bazę danych 10.1:

    initdb /usr/local/var/postgres10.1 -E utf8

  3. 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

  4. Przenieś nowe dane na miejsce:

    cd /usr/local/var
    mv postgres postgres9.6
    mv postgres10.1 postgres
    
  5. Restart Postgres:

    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  6. Sprawdź /usr/local/var/postgres/server.log, aby dowiedzieć się więcej i upewnić się, że nowy serwer działa poprawnie.

  7. Na koniec ponownie zainstaluj szyny pg gem

    gem 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.

 405
Author: Donovan,
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 od 5432 do 5433;
  • Uruchom instancję Postgres w starej wersji;
  • Otwórz terminal i cd do nowej wersji bin folderu;
  • Run pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
  • Zatrzymaj starą instancję postgres;
 61
Author: Christian,
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
 57
Author: pramod,
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.

 17
Author: jnmandal,
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
 16
Author: Ben Johnson,
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 i pg_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.

 13
Author: Craig Ringer,
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.

  1. Zatrzymaj bieżący serwer Postgres:

    launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  2. Zainicjalizuj nową bazę danych 9.4:

    initdb /usr/local/var/postgres9.4 -E utf8

  3. Install postgres 9.3 (as nie było go już na mojej maszynie):

    brew install homebrew/versions/postgresql93

  4. 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

  5. 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/

  6. Przenieś nowe dane na miejsce:

    cd /usr/local/var
    mv postgres postgres9.3
    mv postgres9.4 postgres
    
  7. Restart Postgres:

    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  8. Sprawdź /usr/local/var/postgres/server.log, aby dowiedzieć się więcej i upewnić się, że nowy serwer działa poprawnie.

  9. Wreszcie, ponownie zainstalować powiązane biblioteki?

    pip install --upgrade psycopg2
    gem uninstall pg
    gem install pg
    
 8
Author: Josh,
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
....
 5
Author: Steven Shaw,
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ć.

 1
Author: dimitarvp,
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:

  1. Backup DB
  2. Odinstaluj wszystkie kopie PostgreSQL
  3. Install 9.5
  4. Restore DB
 1
Author: Andrew,
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:)

 0
Author: Aleks,
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

 0
Author: ThangTD,
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

 0
Author: STREET MONEY,
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”

 0
Author: Bruno Vermeulen,
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/
 -1
Author: zulqarnain nazir,
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