Saya menggunakan database PostgreSQL untuk aplikasi Ruby on Rails saya (di Mac OS X 10.9).
Apakah ada petunjuk terperinci tentang cara meningkatkan basis data PostgreSQL?
Saya khawatir saya akan menghancurkan data dalam database atau mengacaukannya.
postgresql
upgrade
pengguna3675188
sumber
sumber
Jawaban:
Dengan asumsi Anda telah menggunakan buatan rumah untuk menginstal dan meningkatkan Postgres, Anda dapat melakukan langkah-langkah berikut.
Hentikan server Postgres saat ini:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Inisialisasi database 10.1 baru:
initdb /usr/local/var/postgres10.1 -E utf8
jalankan
pg_upgrade
(catatan: ganti versi bin jika Anda meningkatkan dari sesuatu selain di bawah) :-v
untuk mengaktifkan logging internal verbose-d
direktori konfigurasi cluster database lama-D
direktori konfigurasi cluster database baru-b
direktori yang dapat dieksekusi PostgreSQL lama-B
direktori yang dapat dieksekusi PostgreSQL baruPindahkan data baru ke tempatnya:
Mulai kembali Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Periksa
/usr/local/var/postgres/server.log
detailnya dan pastikan server baru dimulai dengan benar.Akhirnya, instal ulang
pg
permata relSaya sarankan Anda meluangkan waktu untuk membaca dokumentasi PostgreSQL untuk memahami apa yang Anda lakukan pada langkah-langkah di atas untuk meminimalkan frustrasi.
sumber
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
perintah. Saya pertama kali secara manual menghapus direktori /usr/local/postgres9.3, daripada menjalankan perintah ini dan sepertinya saya kehilangan seluruh direktori / usr / local / var / postgres (saya dapat mengembalikannya dari Time Machine)gem uninstall pg
tetapi kemudian biarkan bundler menginstal ulang versi yang benar dari Gemfile.lock dengan hanya menjalankanbundle
.brew
sekarang juga memiliki opsi untuk digunakanbrew services stop postgresql
danbrew services start postgresql
alih-alih langsung meneleponlaunchctl unload
danlaunchctl load
.Terlepas dari semua jawaban di atas, inilah 5 sen saya.
Ini berfungsi pada OS apa saja dan dari versi postgres apa saja ke yang mana saja.
postgresql.conf
->port
dari5432
menjadi5433
;cd
kebin
folder versi baru ;pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
sumber
postgresql.conf
Ataupg_hba.conf
) Anda perlu mereplikasi perubahan tersebut secara manual di instalasi baru. Sebaliknya, jika Anda menggunakanpg_upgradecluster
, file konfigurasi disalin ke cluster baru: 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.
Inilah solusi untuk pengguna Ubuntu
Pertama kita harus menghentikan postgresql
Buat file baru bernama /etc/apt/sources.list.d/pgdg.list dan tambahkan baris di bawah ini
Ikuti perintah di bawah ini
Sekarang kami memiliki segalanya, hanya perlu memutakhirkannya seperti di bawah ini
Itu dia. Cluster yang sebagian besar ditingkatkan akan berjalan pada nomor port 5433. Periksa dengan perintah di bawah ini
sumber
Pembaruan : Proses ini sama untuk memutakhirkan 9.5 hingga setidaknya 11.5; hanya memodifikasi perintah untuk mencerminkan versi
9.6
dan10
, di mana9.6
adalah tua versi dan10
adalah baru versi. Pastikan untuk menyesuaikan direktori "lama" dan "baru" juga.Saya baru saja memutakhirkan PostgreSQL 9.5 menjadi 9.6 di Ubuntu dan berpikir saya akan membagikan temuan saya, karena ada beberapa nuansa OS / paket khusus yang perlu diperhatikan.
( Saya tidak ingin harus membuang dan mengembalikan data secara manual , sehingga beberapa jawaban lain di sini tidak dapat digunakan.)
Singkatnya, proses terdiri dari menginstal versi baru PostgreSQL bersama versi lama (misalnya, 9.5 dan 9.6), dan kemudian menjalankan
pg_upgrade
biner, yang dijelaskan dalam (beberapa) detail di https://www.postgresql.org/ docs / 9.6 / static / pgupgrade.html .Satu-satunya aspek "rumit" dari
pg_upgrade
kegagalan untuk melewati nilai yang benar untuk suatu argumen, atau kegagalan untuk login sebagai pengguna yang benar ataucd
ke lokasi yang benar sebelum menjalankan perintah, dapat menyebabkan pesan kesalahan samar.Di Ubuntu (dan mungkin Debian), asalkan Anda menggunakan repo "resmi"
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
,, dan asalkan Anda belum mengubah jalur sistem file default atau opsi runtime, prosedur berikut harus melakukan pekerjaan.Instal versi baru (perhatikan bahwa kami menentukan
9.6
, secara eksplisit):Setelah instalasi berhasil, kedua versi akan berjalan berdampingan, tetapi pada port yang berbeda. Output instalasi menyebutkan ini, di bagian bawah, tetapi mudah untuk diabaikan:
Hentikan kedua contoh server (ini akan menghentikan keduanya sekaligus):
Beralih ke pengguna sistem PostgreSQL khusus:
Pindah ke direktori rumahnya (gagal melakukan ini akan menyebabkan kesalahan):
pg_upgrade
membutuhkan input berikut (beripg_upgrade --help
tahu kami ini):Input ini dapat ditentukan dengan "nama panjang", agar lebih mudah divisualisasikan:
Kita juga harus melewati
--new-options
sakelar, karena kegagalan untuk melakukannya menghasilkan sebagai berikut:Hal ini terjadi karena opsi konfigurasi default diterapkan tanpa adanya sakelar ini, yang mengakibatkan opsi koneksi yang salah digunakan, karenanya kesalahan soket.
Jalankan
pg_upgrade
perintah dari versi PostgreSQL baru :Logout dari akun pengguna sistem khusus:
Pembaruan sekarang selesai, tetapi , instance baru akan mengikat ke port
5433
(standar standarnya adalah5432
), jadi ingatlah ini jika mencoba untuk menguji instance baru sebelum "memotong" untuk itu.Mulai server seperti biasa (sekali lagi, ini akan memulai instance lama dan baru):
Jika Anda ingin menjadikan versi baru sebagai default, Anda perlu mengedit file konfigurasi yang efektif, misalnya
/etc/postgresql/9.6/main/postgresql.conf
, dan memastikan bahwa port didefinisikan seperti itu:Jika Anda melakukan ini, ubah nomor port versi lama ke
5433
pada saat yang sama (sebelum memulai layanan), atau, cukup hapus versi lama (ini tidak akan menghapus konten database Anda yang sebenarnya; Anda harus menggunakannyaapt --purge remove postgresql-9.5
untuk itu terjadi ):Perintah di atas akan menghentikan semua instance, jadi Anda harus memulai instance baru terakhir kali dengan:
Sebagai catatan terakhir, jangan lupa untuk mempertimbangkan
pg_upgrade
saran bagus:sumber
sudo su postgres
:, ubah semua METH di pg_hba.conf kedua instalasi untuk percaya sebelum pg_upgrade, menjalankan pg_upgrade di / private / tmp tidak ~ tidak berfungsisudo mkdir /foobar
denganchmod 777 /foobar
dan menjalankannya di sana. Akhirnya perintah 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
Jika Anda menggunakan layanan homebrew dan homebrew, Anda mungkin bisa melakukan:
Saya pikir ini mungkin tidak berfungsi sepenuhnya jika Anda menggunakan fitur postgres canggih, tetapi itu bekerja dengan baik untuk saya.
sumber
The manual meliputi topik ini secara mendalam. Kamu bisa:
pg_upgrade
di tempat; ataupg_dump
danpg_restore
.Jika ragu, lakukan dengan dump. Jangan hapus direktori data lama, cukup simpan kalau-kalau terjadi kesalahan / Anda membuat kesalahan; dengan begitu Anda bisa kembali ke instalan 9.3 yang tidak berubah.
Untuk detailnya, lihat manual.
Jika Anda mandek, poskan pertanyaan terperinci yang menjelaskan bagaimana Anda mandek, di mana, dan apa yang Anda coba dulu. Tergantung sedikit pada bagaimana Anda menginstal PostgreSQL juga, karena ada beberapa "distribusi" berbeda dari PostgreSQL untuk OS X (sayangnya). Jadi, Anda harus memberikan info itu.
sumber
Berdiri di pundak makhluk-makhluk malang lainnya berjalan melalui kotoran ini, saya bisa mengikuti langkah-langkah ini untuk bangkit kembali dan berjalan setelah peningkatan ke Yosemite:
Dengan asumsi Anda telah menggunakan buatan rumah untuk menginstal dan meningkatkan Postgres, Anda dapat melakukan langkah-langkah berikut.
Hentikan server Postgres saat ini:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Inisialisasi database 9,4 baru:
initdb /usr/local/var/postgres9.4 -E utf8
Instal postgres 9.3 (karena tidak ada lagi di mesin saya):
brew install homebrew/versions/postgresql93
Tambahkan direktori yang dihapus selama peningkatan 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
jalankan
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/
Pindahkan data baru ke tempatnya:
Mulai kembali Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Periksa
/usr/local/var/postgres/server.log
detailnya dan pastikan server baru dimulai dengan benar.Akhirnya, instal ulang pustaka terkait?
sumber
brew cleanup
sebelum memigrasi data dan yang menyebabkan postgres9.3 dihapus. Ini membantu. :)Sepertinya solusinya telah dimasukkan ke dalam Homebrew sekarang:
sumber
Ini berhasil untuk saya.
https://gist.github.com/dideler/60c9ce184198666e5ab4
Singkat dan langsung ke inti nya. Jujur saya tidak bertujuan untuk memahami nyali PostgreSQL, saya ingin menyelesaikan pekerjaan.
sumber
jessie
. Memiliki 10+ DB dan jumlah ~ 400MB data basis data dikonversi dalam sekejap mata. Kemudian lagi, saya menggunakan Debian virtual pada SSD.pg_upgradecluster 9.4 main
tetapi saya mendapatkan kesalahan. Kesalahan:specified cluster does not exist
... Saya kira, saya harus menginstal postgresql-9.4 lagi terlebih dahulu dengan panduan ini: wiki.postgresql.org/wiki/Apt#QuickstartDi Windows saya terus menghadapi pesan kesalahan yang berbeda saat mencoba menggunakan
pg_upgrade
.Menghemat banyak waktu bagi saya untuk hanya:
sumber
Solusi saya adalah melakukan kombinasi dari dua sumber ini:
https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d
dan
http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4
The kedua satu membantu lebih maka yang pertama. Juga untuk tidak, jangan ikuti langkah-langkah karena ada beberapa yang tidak perlu. Juga, jika Anda tidak dapat membuat cadangan data melalui konsol postgres, Anda dapat menggunakan pendekatan alternatif, dan mencadangkannya dengan pgAdmin 3 atau program lain, seperti yang saya lakukan dalam kasus saya.
Juga, tautan: https://help.ubuntu.com/stable/serverguide/postgresql.html Membantu mengatur kata sandi terenkripsi dan mengatur md5 untuk mengautentikasi pengguna postgres.
Setelah semua selesai, untuk memeriksa
server
versi postgres yang berjalan di terminal:Setelah memasukkan kata sandi jalankan di terminal postgres:
Ini akan menampilkan sesuatu seperti:
Untuk mengatur dan memulai postgres saya telah menggunakan perintah:
Dan kemudian untuk mengembalikan database dari file:
Atau jika tidak berhasil coba yang ini:
Dan jika Anda menggunakan Rails lakukan
bundle exec rake db:migrate
setelah menarik kode :)sumber
Untuk Mac via homebrew:
brew tap petere/postgresql
,brew install <formula>
(misalnya:brew install petere/postgresql/postgresql-9.6
)Hapus Postgres lama:
brew unlink postgresql
brew link -f postgresql-9.6
Jika ada kesalahan, jangan lupa membaca dan mengikuti instruksi pembuatan bir di setiap langkah.
Lihat ini untuk lebih lanjut: https://github.com/petere/homebrew-postgresql
sumber
Di Windows 10 sejak saya punya npm, saya menginstal paket rimraf.
npm install rimraf -g
Cadangkan semua basis data Anda satu per satu menggunakan perintah
pg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname
Kemudian Menginstal Versi PostgreSQL Terbaru yaitu 11.2 yang mendorong saya untuk menggunakan port 5433 kali ini.
Diikuti oleh Uninstall versi lama dari tambang PostgreSQL adalah 10. Perhatikan uninstaller dapat memberi peringatan tidak menghapus folder
C:\PostgreSQL\10\data
. Itu sebabnya kami memiliki langkah selanjutnya menggunakan rimraf untuk menghapus folder dan sub-folder secara permanen.ubah menjadi direktori instal PostgreSQL dan jalankan perintah
rimraf 10
. 10 adalah nama direktori. Catatan, gunakan PostgreSQL versi lama Anda yaitu 9,5 atau sesuatu.Sekarang tambahkan
C:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib
ke dalam variabel lingkungan Windows. Catatan versi terinstal saya yang baru adalah 11 jadi mengapa saya menggunakanpg11
.Navigasikan ke
C:\PostgreSQL\data\pg11
lalu bukapostgresql.conf
editport = 5433
keport = 5432
Itu dia. Buka cmd dan ketik
psql -U postgres
Sekarang Anda dapat mengembalikan semua database yang didukung satu per satu menggunakan perintah
pg_restore -U $username --dbname=$databasename $filename
sumber
Solusi saya untuk meningkatkan dari Postgresql 11 ke Postgresql 12 pada Windows 10 adalah sebagai berikut.
Sebagai komentar pertama Anda harus dapat menghentikan dan memulai layanan Postgresql. Anda dapat melakukan ini dengan perintah berikut di Powershell.
Mulailah:
pg_ctl start -D “d:\postgresql\11\data”
Berhenti:
pg_ctl stop -D “d:\postgresql\11\data”
Status:
pg_ctl status -D “d:\postgresql\11\data”
Akan lebih bijaksana untuk membuat cadangan sebelum melakukan peningkatan. Instance Postgresql 11 harus dijalankan. Kemudian untuk menyalin global lakukan
pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql
dan kemudian untuk setiap basis data
pg_dump -U postgres -Fc <database> > d:\backup\postgresql\11\<database>.fc
atau
pg_dump -U postgres -Fc -d <database> -f d:\backup\postgresql\11\<database>.fc
Jika belum selesai instal Postgresql 12 (karena Postgresql 11 juga diinstal, ini akan ada di port 5433)
Kemudian untuk melakukan upgrade sebagai berikut:
1) Stop layanan Postgresql 11 (lihat di atas)
2) Edit
postgresql.conf
filed:\postgresql\12\data
dan ubahport = 5433
keport = 5432
3) Edit jalur lingkungan pengguna windows (
windows start
lalu ketikenv
) untuk menunjuk ke Postgresql 12 bukan Postresql 114) Jalankan peningkatan dengan memasukkan perintah berikut.
(Dalam PowerShell, gunakan backtick (atau backquote) `untuk melanjutkan perintah di baris berikutnya)
5) dan akhirnya memulai layanan Postgresql 12 baru
pg_ctl start -D “d:\postgresql\12\data”
sumber
Saya pikir ini adalah tautan terbaik untuk solusi Anda untuk memperbarui postgres ke 9.6
sumber