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.
postgresql
upgrade
użytkownik3675188
źródło
źródło
Odpowiedzi:
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
Zainicjuj nową bazę danych 10.1:
initdb /usr/local/var/postgres10.1 -E utf8
uruchom
pg_upgrade
(uwaga: zmień wersję bin, jeśli aktualizujesz z czegoś innego niż poniżej) :-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 PostgreSQLPrzenieś nowe dane na miejsce:
Uruchom ponownie Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Sprawdź
/usr/local/var/postgres/server.log
szczegóły i upewnij się, że nowy serwer uruchomił się poprawnie.Na koniec zainstaluj ponownie
pg
klejnot szynSugeruję poświęcić trochę czasu na przeczytanie dokumentacji PostgreSQL, aby dokładnie zrozumieć, co robisz w powyższych krokach, aby zminimalizować frustracje.
źródło
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
polecenie. 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)gem uninstall pg
ale następnie pozwól programowi bundler ponownie zainstalować poprawną wersję z Gemfile.lock, po prostu uruchamiającbundle
.brew
teraz ma również opcję użyciabrew services stop postgresql
ibrew services start postgresql
zamiast bezpośredniego wywoływanialaunchctl unload
ilaunchctl load
.Pomimo wszystkich powyższych odpowiedzi, oto moje 5 centów.
Działa na każdym systemie operacyjnym i od dowolnej wersji postgres.
postgresql.conf
->port
z5432
na5433
;cd
dobin
folderu nowej wersji ;pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
źródło
postgresql.conf
Lubpg_hba.conf
), będziesz musiał ręcznie replikować te zmiany w nowej instalacji. Zamiast tego, jeśli używaszpg_upgradecluster
, pliki konfiguracyjne kopiowane do nowego klastra: 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.
Oto rozwiązanie dla użytkowników Ubuntu
Najpierw musimy zatrzymać postgresql
Utwórz nowy plik o nazwie /etc/apt/sources.list.d/pgdg.list i dodaj poniższy wiersz
Wykonaj poniższe polecenia
Teraz mamy wszystko, wystarczy go zaktualizować, jak poniżej
Otóż to. Najczęściej aktualizowany klaster będzie działał na porcie o numerze 5433. Sprawdź to za pomocą poniższej komendy
źródło
Aktualizacja : proces ten jest taki sam w przypadku aktualizacji 9.5 do co najmniej 11.5; wystarczy zmodyfikować poleceń odzwierciedlają wersje
9.6
i10
, gdzie9.6
jest stara wersja i10
jest 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_upgrade
pliku binarnego, co wyjaśniono (szczegółowo) na stronie https://www.postgresql.org/ docs / 9.6 / static / pgupgrade.html .Jedynym „trudnym” aspektem
pg_upgrade
jest to, że nieprzekazanie poprawnej wartości argumentu lub niemożność zalogowania się jako poprawny użytkownik lubcd
poprawna 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 main
i 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.6
wyraźnie zaznaczamy, że):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ć:
Zatrzymaj oba wystąpienia serwera (spowoduje to zatrzymanie obu jednocześnie):
Przejdź do dedykowanego użytkownika systemu PostgreSQL:
Przenieś do jego katalogu domowego (nieprzestrzeganie tego spowoduje błędy):
pg_upgrade
wymaga następujących danych wejściowych (pg_upgrade --help
mówi nam to):Te dane wejściowe można określić za pomocą „długich nazw”, aby ułatwić ich wizualizację:
Musimy również przekazać
--new-options
przełącznik, ponieważ nieprzestrzeganie tego powoduje: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_upgrade
polecenie z nowej wersji PostgreSQL:Wylogowanie z dedykowanego konta użytkownika systemu:
Aktualizacja jest teraz zakończona, ale nowa instancja zostanie powiązana z portem
5433
(domyślnie jest to domyślna wersja5432
), 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):
Jeśli chcesz ustawić nową wersję jako domyślną, musisz edytować efektywny plik konfiguracyjny, np.
/etc/postgresql/9.6/main/postgresql.conf
I upewnić się, że port jest zdefiniowany jako taki: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życieapt --purge remove postgresql-9.5
tego, aby tak się stało ):Powyższe polecenie zatrzyma wszystkie instancje, więc musisz rozpocząć nową instancję po raz ostatni:
Na koniec warto pamiętać o
pg_upgrade
dobrych radach:źródło
sudo su postgres
zmień wszystkie metody w pg_hba.conf zarówno instalację do zaufania przed pg_upgrade, bieganie pg_upgrade w / private / tmp nie ~ nie działa taksudo mkdir /foobar
zechmod 777 /foobar
i 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
Jeśli korzystasz z usług homebrew i homebrew, prawdopodobnie możesz po prostu:
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.
źródło
Podręcznik użytkownika szczegółowo omawia ten temat. Możesz:
pg_upgrade
w miejscu; lubpg_dump
apg_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.
źródło
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.
Zatrzymaj bieżący serwer Postgres:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Zainicjuj nową bazę danych 9.4:
initdb /usr/local/var/postgres9.4 -E utf8
Zainstaluj postgres 9.3 (ponieważ nie był już obecny na moim komputerze):
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
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/
Przenieś nowe dane na miejsce:
Uruchom ponownie Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Sprawdź
/usr/local/var/postgres/server.log
szczegóły i upewnij się, że nowy serwer uruchomił się poprawnie.Wreszcie, ponownie zainstalować powiązane biblioteki?
źródło
brew cleanup
przed migracją danych, co spowodowało odinstalowanie postgres9.3. To pomogło. :)Wygląda na to, że rozwiązanie zostało teraz wypalone w Homebrew:
źródło
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ę.
źródło
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.pg_upgradecluster 9.4 main
ale 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#QuickstartW 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:
źródło
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ć
server
wersję postgres uruchom w terminalu:Po wprowadzeniu hasła uruchom w terminalu postgres:
Wyprowadzi coś takiego:
Do ustawienia i uruchomienia postgres użyłem polecenia:
A następnie w celu przywrócenia bazy danych z pliku:
Lub jeśli nie działa spróbuj tego:
A jeśli używasz Railsów, zrób
bundle exec rake db:migrate
po ściągnięciu kodu :)źródło
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
źródło
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\lib
do zmiennych środowiskowych Windows. Uwaga: moja nowa zainstalowana wersja to 11, dlatego używampg11
.Przejdź do,
C:\PostgreSQL\data\pg11
a następnie otwórzpostgresql.conf
edycjęport = 5433
doport = 5432
Otóż to. Otwórz cmd i wpisz
psql -U postgres
Teraz możesz przywracać wszystkie kopie zapasowe baz danych jeden po drugim za pomocą polecenia
pg_restore -U $username --dbname=$databasename $filename
źródło
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.conf
plikd:\postgresql\12\data
i zmieńport = 5433
naport = 5432
3) Edytuj ścieżkę środowiska użytkownika systemu Windows (
windows start
następnie wpiszenv
), aby wskazywała Postgresql 12 zamiast Postresql 114) Uruchom aktualizację, wprowadzając następujące polecenie.
(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”
źródło
Myślę, że to najlepszy link do twojego rozwiązania do aktualizacji postgres do 9.6
źródło