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.
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.
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) :
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 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 baru
Pindahkan data baru ke tempatnya:
cd /usr/local/var
mv postgres postgres9.6
mv postgres10.1 postgresMulai kembali Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Periksa /usr/local/var/postgres/server.logdetailnya dan pastikan server baru dimulai dengan benar.
Akhirnya, instal ulang pgpermata rel
gem uninstall pg
gem install pgSaya sarankan Anda meluangkan waktu untuk membaca dokumentasi PostgreSQL untuk memahami apa yang Anda lakukan pada langkah-langkah di atas untuk meminimalkan frustrasi.
initdb /usr/local/var/postgres9.4 -E utf8 --lc-collate=C --lc-ctype=utf-8 --lc-monetary=C --lc-numeric=C
delete_old_cluster.shperintah. 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 pgtetapi kemudian biarkan bundler menginstal ulang versi yang benar dari Gemfile.lock dengan hanya menjalankan bundle.
brewsekarang juga memiliki opsi untuk digunakan brew services stop postgresqldan brew services start postgresqlalih-alih langsung menelepon launchctl unloaddan launchctl 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-> portdari 5432menjadi 5433;cdke binfolder versi baru ;pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>postgresql.confAtau pg_hba.conf) Anda perlu mereplikasi perubahan tersebut secara manual di instalasi baru. Sebaliknya, jika Anda menggunakan pg_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
sudo /etc/init.d/postgresql stop
Buat file baru bernama /etc/apt/sources.list.d/pgdg.list dan tambahkan baris di bawah ini
deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main
Ikuti perintah di bawah ini
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
Sekarang kami memiliki segalanya, hanya perlu memutakhirkannya seperti di bawah ini
sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main
Itu dia. Cluster yang sebagian besar ditingkatkan akan berjalan pada nomor port 5433. Periksa dengan perintah di bawah ini
sudo pg_lsclusters
Pembaruan : Proses ini sama untuk memutakhirkan 9.5 hingga setidaknya 11.5; hanya memodifikasi perintah untuk mencerminkan versi 9.6dan 10, di mana 9.6adalah tua versi dan 10adalah 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_upgradebiner, yang dijelaskan dalam (beberapa) detail di https://www.postgresql.org/ docs / 9.6 / static / pgupgrade.html .
Satu-satunya aspek "rumit" dari pg_upgradekegagalan untuk melewati nilai yang benar untuk suatu argumen, atau kegagalan untuk login sebagai pengguna yang benar atau cdke 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):
sudo apt install postgresql-9.6
Setelah instalasi berhasil, kedua versi akan berjalan berdampingan, tetapi pada port yang berbeda. Output instalasi menyebutkan ini, di bagian bawah, tetapi mudah untuk diabaikan:
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
Hentikan kedua contoh server (ini akan menghentikan keduanya sekaligus):
sudo systemctl stop postgresql
Beralih ke pengguna sistem PostgreSQL khusus:
su postgres
Pindah ke direktori rumahnya (gagal melakukan ini akan menyebabkan kesalahan):
cd ~
pg_upgrade membutuhkan input berikut (beri pg_upgrade --helptahu kami ini):
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)
Input ini dapat ditentukan dengan "nama panjang", agar lebih mudah divisualisasikan:
-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
Kita juga harus melewati --new-optionssakelar, karena kegagalan untuk melakukannya menghasilkan sebagai berikut:
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"?
Hal ini terjadi karena opsi konfigurasi default diterapkan tanpa adanya sakelar ini, yang mengakibatkan opsi koneksi yang salah digunakan, karenanya kesalahan soket.
Jalankan pg_upgradeperintah dari versi PostgreSQL baru :
/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
Logout dari akun pengguna sistem khusus:
exit
Pembaruan sekarang selesai, tetapi , instance baru akan mengikat ke port 5433(standar standarnya adalah 5432), 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):
systemctl start postgresql
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:
port = 5432
Jika Anda melakukan ini, ubah nomor port versi lama ke 5433pada saat yang sama (sebelum memulai layanan), atau, cukup hapus versi lama (ini tidak akan menghapus konten database Anda yang sebenarnya; Anda harus menggunakannya apt --purge remove postgresql-9.5untuk itu terjadi ):
apt remove postgresql-9.5
Perintah di atas akan menghentikan semua instance, jadi Anda harus memulai instance baru terakhir kali dengan:
systemctl start postgresql
Sebagai catatan terakhir, jangan lupa untuk mempertimbangkan pg_upgradesaran bagus:
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
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 berfungsi sudo mkdir /foobardengan chmod 777 /foobardan 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:
brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql
Saya pikir ini mungkin tidak berfungsi sepenuhnya jika Anda menggunakan fitur postgres canggih, tetapi itu bekerja dengan baik untuk saya.
The manual meliputi topik ini secara mendalam. Kamu bisa:
pg_upgradedi tempat; atau
pg_dumpdan pg_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.
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:
cd /usr/local/var
mv postgres postgres9.3
mv postgres9.4 postgresMulai kembali Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Periksa /usr/local/var/postgres/server.logdetailnya dan pastikan server baru dimulai dengan benar.
Akhirnya, instal ulang pustaka terkait?
pip install --upgrade psycopg2
gem uninstall pg
gem install pgbrew cleanupsebelum memigrasi data dan yang menyebabkan postgres9.3 dihapus. Ini membantu. :)
Sepertinya solusinya telah dimasukkan ke dalam Homebrew sekarang:
$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
....
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.
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 maintetapi 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#Quickstart
Di Windows saya terus menghadapi pesan kesalahan yang berbeda saat mencoba menggunakan pg_upgrade.
Menghemat banyak waktu bagi saya untuk hanya:
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 serverversi postgres yang berjalan di terminal:
sudo -u postgres psql postgres
Setelah memasukkan kata sandi jalankan di terminal postgres:
SHOW SERVER_VERSION;
Ini akan menampilkan sesuatu seperti:
server_version
----------------
9.4.5
Untuk mengatur dan memulai postgres saya telah menggunakan perintah:
> sudo bash # root
> su postgres # postgres
> /etc/init.d/postgresql start
> /etc/init.d/postgresql stop
Dan kemudian untuk mengembalikan database dari file:
> psql -f /home/ubuntu_username/Backup_93.sql postgres
Atau jika tidak berhasil coba yang ini:
> pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d name_of_database ~/your_file.dump
Dan jika Anda menggunakan Rails lakukan bundle exec rake db:migratesetelah menarik kode :)
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
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\libke dalam variabel lingkungan Windows. Catatan versi terinstal saya yang baru adalah 11 jadi mengapa saya menggunakan pg11.
Navigasikan ke C:\PostgreSQL\data\pg11lalu buka postgresql.confedit port = 5433keport = 5432
Itu dia. Buka cmd dan ketikpsql -U postgres
Sekarang Anda dapat mengembalikan semua database yang didukung satu per satu menggunakan perintah pg_restore -U $username --dbname=$databasename $filename
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.conffile d:\postgresql\12\datadan ubah port = 5433keport = 5432
3) Edit jalur lingkungan pengguna windows ( windows startlalu ketikenv ) untuk menunjuk ke Postgresql 12 bukan Postresql 11
4) Jalankan peningkatan dengan memasukkan perintah berikut.
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
(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”
Saya pikir ini adalah tautan terbaik untuk solusi Anda untuk memperbarui postgres ke 9.6
https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/