Jak zaktualizować PostgreSQL z wersji 9.6 do wersji 10.1 bez utraty danych?

207

Korzystam z bazy danych PostgreSQL dla mojej aplikacji Ruby on Rails (w systemie Mac OS X 10.9).

Czy są jakieś szczegółowe instrukcje dotyczące aktualizacji bazy danych PostgreSQL?

Obawiam się, że zniszczę dane w bazie danych lub popsuję je.

użytkownik3675188
źródło
8
W każdym przypadku rób kopie zapasowe.
Patrick Oscity

Odpowiedzi:

401

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. Zainicjuj nową bazę danych 10.1:

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

  3. uruchom 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ć pełne rejestrowanie wewnętrzne

    -d stary katalog konfiguracji klastra bazy danych

    -D nowy katalog konfiguracji klastra bazy 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. Uruchom ponownie Postgres:

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

  6. Sprawdź /usr/local/var/postgres/server.logszczegóły i upewnij się, że nowy serwer uruchomił się poprawnie.

  7. Na koniec zainstaluj ponownie pgklejnot szyn

    gem uninstall pg
    gem install pg

Sugeruję poświęcić trochę czasu na przeczytanie dokumentacji PostgreSQL, aby dokładnie zrozumieć, co robisz w powyższych krokach, aby zminimalizować frustracje.

Donovan
źródło
8
Muszę użyć następującego polecenia do zainicjowania bazy danych:initdb /usr/local/var/postgres9.4 -E utf8 --lc-collate=C --lc-ctype=utf-8 --lc-monetary=C --lc-numeric=C
sunsations
Postępuj zgodnie z instrukcjami krok po kroku. I wszystko działało! Dziękuję bardzo.
Trantor Liu,
3
Uważaj na delete_old_cluster.shpolecenie. Najpierw ręcznie usunąłem katalogi /usr/local/postgres9.3, potem uruchomiłem to polecenie i wygląda na to, że straciłem cały katalog / usr / local / var / postgres (udało mi się go przywrócić z Time Machine)
peter_v
1
Jeśli korzystasz z programu Bundler, powinieneś usunąć klejnot, używając, gem uninstall pgale następnie pozwól programowi bundler ponownie zainstalować poprawną wersję z Gemfile.lock, po prostu uruchamiając bundle.
danielricecodes
1
Drobna aktualizacja: brewteraz ma również opcję użycia brew services stop postgresqli brew services start postgresqlzamiast bezpośredniego wywoływania launchctl unloadi launchctl load.
florish
59

Pomimo wszystkich powyższych odpowiedzi, oto moje 5 centów.

Działa na każdym systemie operacyjnym i od dowolnej wersji postgres.

  • Zatrzymaj dowolną działającą instancję postgres;
  • Zainstaluj nową wersję i uruchom ją; Sprawdź, czy możesz się również połączyć z nową wersją;
  • Zmień starszą wersję postgresql.conf-> portz 5432na 5433;
  • Uruchom starą wersję instancji postgres;
  • Otwórz terminal i przejdź cddo binfolderu nowej wersji ;
  • Biegać pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
  • Zatrzymaj działanie starej instancji Postgres;
chrześcijanin
źródło
4
Dzięki Christian, jest to zdecydowanie świetne i łatwe rozwiązanie, udało mi się przejść z 9,3 do 9,5 w ten sposób
fnicollet
3
Działa pięknie przy aktualizacji z wersji 9.1 do wersji 9.5 na serwerze Windows 2012.
Rolf
4
Problemem tego rozwiązania jest to, że jeśli zmieniłeś niektóre pliki konfiguracyjne Postgres (np. postgresql.confLub pg_hba.conf), będziesz musiał ręcznie replikować te zmiany w nowej instalacji. Zamiast tego, jeśli używasz pg_upgradecluster, pliki konfiguracyjne kopiowane do nowego klastra: manpages.ubuntu.com/manpages/precise/man8/...
Alphaaa
1
Zauważ, że zaraz po uruchomieniu polecenia pojawi się jedno hasło, ale musisz wprowadzić 2 hasła jeden po drugim, potwierdzając każde z nich przez Enter. Albo dostanieszpg_dumpall: could not connect to database "XXX": fe_sendauth: no password supplied
Lu55
2
Technicznie nie będzie to działać w przypadku dowolnej wersji, tylko dla wersji źródłowych w wersji 7.0 lub wyższej, zgodnie z instrukcją:Current releases of the dump programs can read data from any server version back to 7.0.
Mark Tielemans
56

Oto rozwiązanie dla użytkowników Ubuntu

Najpierw musimy zatrzymać postgresql

sudo /etc/init.d/postgresql stop

Utwórz nowy plik o nazwie /etc/apt/sources.list.d/pgdg.list i dodaj poniższy 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 zaktualizować, jak poniżej

sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main

Otóż ​​to. Najczęściej aktualizowany klaster będzie działał na porcie o numerze 5433. Sprawdź to za pomocą poniższej komendy

sudo pg_lsclusters
pramod
źródło
2
W przedostatnim zdaniu, w którym powiesz: „Przeważnie zaktualizowany klaster będzie działał na porcie nr 5433”, powinno prawdopodobnie brzmieć „Klaster 9.3 będzie działał na porcie nr 5433, aby w razie potrzeby można było przywrócić”.
Andrew Thaddeus Martin
3
Uwaga: W przypadku Ubuntu 14.04 użyj „trusty-pgdb” zamiast utopic-pgdb
Johnny
3
Pamiętaj, że NIE powoduje to aktualizacji w miejscu. dlatego jest całkowicie bezużyteczny dla mojego 700 GB DB na woluminie 1 TB.
Fałszywe imię
16

Aktualizacja : proces ten jest taki sam w przypadku aktualizacji 9.5 do co najmniej 11.5; wystarczy zmodyfikować poleceń odzwierciedlają wersje 9.6i 10, gdzie 9.6jest stara wersja i 10jest nowa wersja. Pamiętaj również o dostosowaniu odpowiednio „starych” i „nowych” katalogów.


Właśnie zaktualizowałem PostgreSQL 9.5 do 9.6 na Ubuntu i pomyślałem, że podzielę się swoimi odkryciami, ponieważ istnieje kilka niuansów specyficznych dla systemu operacyjnego / pakietu, o których należy pamiętać.

( Nie chciałem ręcznie zrzucać i przywracać danych , więc kilka innych odpowiedzi tutaj nie było wykonalnych).

Krótko mówiąc, proces ten polega na zainstalowaniu nowej wersji PostgreSQL wraz ze starą wersją (np. 9.5 i 9.6), a następnie uruchomieniu pg_upgradepliku binarnego, co wyjaśniono (szczegółowo) na stronie https://www.postgresql.org/ docs / 9.6 / static / pgupgrade.html .

Jedynym „trudnym” aspektem pg_upgradejest to, że nieprzekazanie poprawnej wartości argumentu lub niemożność zalogowania się jako poprawny użytkownik lub cdpoprawna lokalizacja przed wykonaniem polecenia może prowadzić do tajemniczych komunikatów o błędach.

W Ubuntu (i prawdopodobnie Debianie), pod warunkiem, że korzystasz z „oficjalnego” repozytorium, deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg maini pod warunkiem, że nie zmieniłeś domyślnych ścieżek systemu plików ani opcji środowiska wykonawczego, poniższa procedura powinna wykonać to zadanie.

Zainstaluj nową wersję ( 9.6wyraźnie zaznaczamy, że):

sudo apt install postgresql-9.6

Po pomyślnym zakończeniu instalacji obie wersje będą działać równolegle, ale na różnych portach. Dane wyjściowe instalacji wspominają o tym na dole, 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 oba wystąpienia serwera (spowoduje to zatrzymanie obu jednocześnie):

sudo systemctl stop postgresql

Przejdź do dedykowanego użytkownika systemu PostgreSQL:

su postgres

Przenieś do jego katalogu domowego (nieprzestrzeganie tego spowoduje błędy):

cd ~

pg_upgrade wymaga następujących danych wejściowych ( pg_upgrade --helpmówi nam to):

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)

Te dane wejściowe można określić za pomocą „długich nazw”, 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

Musimy również przekazać --new-optionsprzełącznik, ponieważ nieprzestrzeganie tego powoduje:

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ż przy braku tego przełącznika stosowane są domyślne opcje konfiguracji, co powoduje użycie niepoprawnych opcji połączenia, stąd błąd gniazda.

Wykonaj pg_upgradepolecenie 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 z dedykowanego konta użytkownika systemu:

exit

Aktualizacja jest teraz zakończona, ale nowa instancja zostanie powiązana z portem 5433(domyślnie jest to domyślna wersja 5432), więc należy o tym pamiętać, próbując przetestować nową instancję przed „przejściem” na nią.

Uruchom serwer w normalny sposób (ponownie spowoduje to uruchomienie zarówno starej, jak i nowej instancji):

systemctl start postgresql

Jeśli chcesz ustawić nową wersję jako domyślną, musisz edytować efektywny plik konfiguracyjny, np. /etc/postgresql/9.6/main/postgresql.confI upewnić się, że port jest zdefiniowany jako taki:

port = 5432

Jeśli to zrobisz, zmień jednocześnie numer portu starej wersji na 5433(przed uruchomieniem usług) lub po prostu usuń starą wersję ( nie spowoduje to usunięcia zawartości bazy danych; konieczne będzie użycie apt --purge remove postgresql-9.5tego, aby tak się stało ):

apt remove postgresql-9.5

Powyższe polecenie zatrzyma wszystkie instancje, więc musisz rozpocząć nową instancję po raz ostatni:

systemctl start postgresql

Na koniec warto pamiętać o pg_upgradedobrych radach:

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
Ben Johnson
źródło
1
Dla mnie w Mac Yosemite, PostgreSQL 9.2 -> 9.5: sudo su postgreszmień wszystkie metody w pg_hba.conf zarówno instalację do zaufania przed pg_upgrade, bieganie pg_upgrade w / private / tmp nie ~ nie działa tak sudo mkdir /foobarze chmod 777 /foobari pobiegł tam. Nareszcie polecenie 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
Jarno Argillander
1
udało mi się uaktualnić z wersji 9.5 do 11.5 musiałem dodać repozytoria apt postgres do Ubuntu. a następnie wykonaj następujące kroki: tecadmin.net/install-postgresql-server-on-ubuntu
shakee93
14

Jeśli korzystasz z usług homebrew i homebrew, prawdopodobnie możesz po prostu:

brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql

Myślę, że to może nie działać całkowicie, jeśli używasz zaawansowanych funkcji postgres, ale działało to idealnie dla mnie.

jnmandal
źródło
1
Działa idealnie dla macOS Mojave 10.14.2 - Dzięki!
8bithero
13

Podręcznik użytkownika szczegółowo omawia ten temat. Możesz:

  • pg_upgradew miejscu; lub

  • pg_dumpa pg_restore.

W razie wątpliwości zrób to ze zrzutami. Nie usuwaj starego katalogu danych, po prostu 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 można znaleźć w instrukcji obsługi.

Jeśli utkniesz, opublikuj szczegółowe pytanie wyjaśniające, jak utknąłeś, gdzie i co próbowałeś w pierwszej kolejności. Zależy to trochę od tego, jak zainstalowałeś PostgreSQL, ponieważ istnieje kilka różnych „dystrybucji” PostgreSQL dla OS X (niestety). Musisz podać te informacje.

Craig Ringer
źródło
8

Stojąc na ramionach innych biednych stworzeń kroczących przez ten błoto, mogłem wykonać następujące kroki, aby wrócić do gry i uruchomić się po aktualizacji do 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. Zainicjuj nową bazę danych 9.4:

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

  3. Zainstaluj postgres 9.3 (ponieważ nie był już obecny na moim komputerze):

    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. uruchomić 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. Uruchom ponownie Postgres:

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

  8. Sprawdź /usr/local/var/postgres/server.logszczegóły i upewnij się, że nowy serwer uruchomił się poprawnie.

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

    pip install --upgrade psycopg2
    gem uninstall pg
    gem install pg
Josh
źródło
1
pg_upgrade -v -d / usr / local / var / postgres -D /usr/local/var/postgres9.4 -b /usr/local/Cellar/postgresql93/9.3.*/bin/ -B / usr / local / Cellar /postgresql/9.4.*/bin/ # Drobne wersje mogą być inne.
Aaron McMillin,
1
Dzięki za to. Przypadkowo uruchomiłem brew cleanupprzed migracją danych, co spowodowało odinstalowanie postgres9.3. To pomogło. :)
markquezada,
5

Wygląda na to, że rozwiązanie zostało teraz wypalone w Homebrew:

$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
  brew postgresql-upgrade-database
....
Steven Shaw
źródło
1

Zrobiło to dla mnie.

https://gist.github.com/dideler/60c9ce184198666e5ab4

Krótko i na temat. Szczerze mówiąc, nie staram się zrozumieć istoty PostgreSQL, chcę załatwić sprawę.

dimitarvp
źródło
1
Wykorzystuje to narzędzie pg_upgradecluster firmy Ubuntu, które może być znacznie wolniejsze niż narzędzie pg_upgrade PostgreSQL i oczywiście jest dostępne tylko na Ubuntu.
alfonx
@alfonx Nieprawda. Mam to na moim Debianie jessie. Miał ponad 10 baz danych i około ~ 400 MB danych z bazy danych zostało przekonwertowanych w mgnieniu oka. Z drugiej strony używam wirtualnego Debiana na dysku SSD.
dimitarvp
Pozwól, że się poprawię: pg_upgradecluster jest częścią „infrastruktury Debian PostgreSQL”, więc jest dostępny tylko w dystrybucjach opartych na Debianie. O prędkości pg_upgrade oferuje opcję „--link”, która łączy nie kopiowanie danych tam, gdzie to możliwe: postgresql.org/docs/9.4/static/pgupgrade.html
alfonx
1
Być może dążymy do różnych wyników. Po aktualizacji oprogramowania dla całej dystrybucji skończyłem z 2 wersjami PostgreSQL, a dane wykorzystane przez moje projekty utknęły na starszej wersji (9.3). Po prostu wyśledziłem powyższy link (w mojej odpowiedzi) i zaktualizowałem go, pozbyłem się starej „klastra” i starszej wersji PG.
dimitarvp
Próbowałem zaktualizować z wersji 9.4 do 11, pg_upgradecluster 9.4 mainale pojawia się błąd Błąd: specified cluster does not exist... Myślę, że najpierw muszę zainstalować postgresql-9.4 z tym przewodnikiem: wiki.postgresql.org/wiki/Apt#Quickstart
rubo77
1

W systemie Windows próbowałem użyć różnych komunikatów o błędach pg_upgrade.

Zaoszczędziłem dużo czasu, aby po prostu:

  1. Backup DB
  2. Odinstaluj wszystkie kopie PostgreSQL
  3. Zainstaluj 9.5
  4. Przywróć bazę danych
Andrzej
źródło
Zrobiłem to dla 9.5 do 9.6 i działało również doskonale. Dobrze, że można wykonać łatwą dokładną aktualizację zamiast „najnowszej”. Użyłem Big SQL, aby uzyskać odpowiedni instalator ( openscg.com/bigsql/postgresql/installers.jsp ).
The Coder
0

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

Sekund jeden pomógł bardziej wtedy pierwszy. Również, aby nie, nie postępuj zgodnie z instrukcjami, ponieważ niektóre są niepotrzebne. Ponadto, jeśli nie jesteś w stanie wykonać kopii zapasowej danych za pomocą konsoli Postgres, możesz zastosować alternatywne podejście i wykonać kopię zapasową za pomocą pgAdmin 3 lub innego programu, jak w moim przypadku.

Ponadto, link: https://help.ubuntu.com/stable/serverguide/postgresql.html Pomógł ustawić szyfrowane hasło i ustawić md5 do uwierzytelnienia użytkownika postgres.

Po tym wszystkim, aby sprawdzić serverwersję postgres uruchom w terminalu:

sudo -u postgres psql postgres

Po wprowadzeniu hasła uruchom w terminalu postgres:

SHOW SERVER_VERSION;

Wyprowadzi coś takiego:

 server_version 
----------------
 9.4.5

Do ustawienia i uruchomienia postgres użyłem polecenia:

> sudo bash # root
> su postgres # postgres

> /etc/init.d/postgresql start
> /etc/init.d/postgresql stop

A następnie w celu przywrócenia bazy danych z pliku:

> psql -f /home/ubuntu_username/Backup_93.sql postgres

Lub jeśli nie działa spróbuj tego:

> 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ów, zrób bundle exec rake db:migratepo ściągnięciu kodu :)

Aleks
źródło
0

W przypadku komputerów Mac przez Homebrew:

brew tap petere/postgresql,

brew install <formula>(np . brew install petere/postgresql/postgresql-9.6:)

Usuń stare Postgres:

brew unlink postgresql

brew link -f postgresql-9.6

Jeśli wystąpi jakikolwiek błąd, nie zapomnij przeczytać instrukcji parzenia na każdym etapie i postępować zgodnie z nimi.

Sprawdź to, aby uzyskać więcej: https://github.com/petere/homebrew-postgresql

ThangTD
źródło
0

Na Windows 10, ponieważ miałem npm, zainstalowałem pakiet rimraf. npm install rimraf -g

Wykonaj kopię zapasową 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. 11.2, która zachęciła mnie do korzystania z portu 5433.

Następnie odinstalowano starsze wersje kopalni PostgreSQL 10. Uwaga: dezinstalator może ostrzec, że nie usuwa folderu C:\PostgreSQL\10\data. Właśnie dlatego mamy kolejny krok za pomocą rimraf, aby trwale usunąć folder i jego podfoldery.

przejdź do katalogu instalacyjnego PostgreSQL i uruchom polecenie rimraf 10. 10 to nazwa katalogu. Uwaga: użyj starszej wersji PostgreSQL, tj. 9.5 lub czegoś takiego.

Teraz dodaj C:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\libdo zmiennych środowiskowych Windows. Uwaga: moja nowa zainstalowana wersja to 11, dlatego używam pg11.

Przejdź do, C:\PostgreSQL\data\pg11a następnie otwórz postgresql.confedycję port = 5433doport = 5432

Otóż ​​to. Otwórz cmd i wpiszpsql -U postgres

Teraz możesz przywracać wszystkie kopie zapasowe baz danych jeden po drugim za pomocą polecenia pg_restore -U $username --dbname=$databasename $filename

PIENIĄDZE ULICZNE
źródło
0

Moje rozwiązanie do aktualizacji z Postgresql 11 do Postgresql 12 w systemie Windows 10 jest następujące.

Jako pierwszą uwagę musisz mieć możliwość zatrzymania i uruchomienia usługi Postgresql. Możesz to zrobić, wykonując następujące polecenia w programie Powershell.

Początek: pg_ctl start -D “d:\postgresql\11\data”

Zatrzymać: pg_ctl stop -D “d:\postgresql\11\data”

Status: pg_ctl status -D “d:\postgresql\11\data”

Przed aktualizacją warto wykonać kopię zapasową. Instancja Postgresql 11 musi być uruchomiona. Następnie skopiuj globals

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 zostało to jeszcze zrobione, zainstaluj Postgresql 12 (ponieważ Postgresql 11 jest również zainstalowany, będzie to miało miejsce na porcie 5433)

Następnie wykonaj aktualizację w następujący sposób:

1) Zatrzymaj usługę Postgresql 11 (patrz wyżej)

2) Edytuj postgresql.confplik d:\postgresql\12\datai zmień port = 5433naport = 5432

3) Edytuj ścieżkę środowiska użytkownika systemu Windows ( windows startnastępnie wpiszenv ), aby wskazywała Postgresql 12 zamiast Postresql 11

4) Uruchom aktualizację, 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 znaku wstecz (lub cudzysłowu) `, aby kontynuować polecenie w następnym wierszu)

5) i wreszcie uruchom nową usługę Postgresql 12

pg_ctl start -D “d:\postgresql\12\data”

Bruno Vermeulen
źródło
-1

Myślę, że to najlepszy link do twojego rozwiązania do aktualizacji postgres do 9.6

https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/
zulqarnain nazir
źródło