Ruby on Rails uygulamam için (Mac OS X 10.9'da) PostgreSQL veritabanını kullanıyorum.
PostgreSQL veritabanının nasıl yükseltileceğine dair ayrıntılı talimatlar var mı?
Korkarım veritabanındaki verileri yok edeceğim ya da bozacağım.
Ruby on Rails uygulamam için (Mac OS X 10.9'da) PostgreSQL veritabanını kullanıyorum.
PostgreSQL veritabanının nasıl yükseltileceğine dair ayrıntılı talimatlar var mı?
Korkarım veritabanındaki verileri yok edeceğim ya da bozacağım.
Yanıtlar:
Postgres'i kurmak ve yükseltmek için ev yapımı demleme kullandığınızı varsayarsak, aşağıdaki adımları gerçekleştirebilirsiniz.
Geçerli Postgres sunucusunu durdur:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Yeni bir 10.1 veritabanı başlatın:
initdb /usr/local/var/postgres10.1 -E utf8
çalıştırın pg_upgrade
(not: Değişiklik bin sürümünü eğer aşağıda değil de bir başka konum yükseltme) :
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
ayrıntılı dahili günlük kaydını etkinleştirmek için
-d
eski veritabanı kümesi yapılandırma dizini
-D
yeni veritabanı kümesi yapılandırma dizini
-b
eski PostgreSQL yürütülebilir dizini
-B
yeni PostgreSQL yürütülebilir dizini
Yeni verileri yerine taşıyın:
cd /usr/local/var
mv postgres postgres9.6
mv postgres10.1 postgres
Postgres'i yeniden başlat:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
/usr/local/var/postgres/server.log
Ayrıntıları kontrol edin ve yeni sunucunun doğru şekilde başlatıldığından emin olun.
Son olarak, ray pg
gemini yeniden kurun
gem uninstall pg
gem install pg
Hayal kırıklıklarını en aza indirmek için yukarıdaki adımlarda tam olarak ne yaptığınızı anlamak için PostgreSQL belgelerini okumak için biraz zaman ayırmanızı öneririm .
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
Komuta dikkat edin . İlk önce /usr/local/postgres9.3 dizinlerini el ile sildim, daha sonra bu komutu çalıştırdım ve tüm / usr / local / var / postgres dizinini kaybettim (zaman makinesinden geri yükleyebildim)
gem uninstall pg
, gem'i kullanarak kaldırmalısınız, ancak paketleyicinin doğru sürümü Gemfile.lock'tan yeniden çalıştırarak yeniden çalıştırmasına izin vermelisiniz bundle
.
brew
şimdi de kullanma seçeneği vardır brew services stop postgresql
ve brew services start postgresql
bunun yerine doğrudan çağıran launchctl unload
ve launchctl load
.
Yukarıdaki tüm cevaplara rağmen, 5 sentim burada.
Herhangi bir işletim sisteminde ve herhangi bir postgres sürümünde çalışır.
postgresql.conf
> - port
dan 5432
için5433
;cd
yeni sürüme geçinbin
klasörüne;pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
postgresql.conf
ya pg_hba.conf
) el ile yeni kurulumda bu değişiklikleri çoğaltmak gerekir. Eğer kullanırsanız Bunun yerine, pg_upgradecluster
, yapılandırma dosyaları yeni kümeye kopyalanan: 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.
İşte Ubuntu kullanıcıları için çözüm
Önce postgresql'i durdurmak zorundayız
sudo /etc/init.d/postgresql stop
/Etc/apt/sources.list.d/pgdg.list adlı yeni bir dosya oluşturun ve aşağıdaki satırı ekleyin
deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main
Aşağıdaki komutları izleyin
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
Şimdi her şeyimiz var, sadece aşağıdaki gibi yükseltmeniz gerekiyor
sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main
Bu kadar. Çoğunlukla yükseltilen küme 5433 numaralı bağlantı noktasında çalışır. Aşağıdaki komutla denetleyin
sudo pg_lsclusters
Güncelleme : Bu işlem 9.5'ten en az 11.5'e yükseltmek için aynıdır; basitçe versiyonlarını yansıtacak şekilde komutları değiştirmek 9.6
ve 10
nerede 9.6
olduğunu eski sürümü ve 10
bir yeni versiyonu. "Eski" ve "yeni" dizinleri de buna göre ayarladığınızdan emin olun.
PostgreSQL 9.5'i Ubuntu'da 9.6'ya yükselttim ve bulgularımı paylaşacağımı düşündüm, çünkü farkında olması gereken OS / pakete özgü birkaç nüans var.
( Verileri manuel olarak döküp geri yüklemek istemedim , bu yüzden buradaki diğer cevapların bazıları geçerli değildi.)
Kısacası, işlem PostgreSQL'in yeni sürümünü eski sürümle birlikte (ör. 9.5 ve 9.6) kurmak ve sonra https://www.postgresql.org/ adresindepg_upgrade
(bazı) ayrıntılı olarak açıklanan ikili dosyayı çalıştırmaktan ibarettir. docs / 9.6 / static / pgupgrade.html .
Tek "zor" yönü, pg_upgrade
bir bağımsız değişken için doğru değeri iletememenin veya cd
bir komut çalıştırılmadan önce doğru kullanıcı olarak veya doğru konuma giriş yapılmamasının şifreli hata mesajlarına yol açabilmesidir.
Ubuntu'da (ve muhtemelen Debian'da) "resmi" repo kullanıyor olmanız koşuluyla, deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
ve varsayılan dosya sistemi yollarını veya çalışma zamanı seçeneklerini değiştirmemeniz koşuluyla, aşağıdaki prosedürün işi yapması gerekir.
Yeni sürümü yükleyin ( 9.6
açıkça belirttiğimizi unutmayın ):
sudo apt install postgresql-9.6
Yükleme başarılı olduğunda, her iki sürüm de yan yana, ancak farklı bağlantı noktalarında çalışır. Kurulum çıktısı altta bundan bahsediyor, ancak gözden kaçırmak kolaydır:
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
Her iki sunucu örneğini de durdur (bu her ikisini de aynı anda durduracaktır):
sudo systemctl stop postgresql
Özel PostgreSQL sistemi kullanıcısına geçiş yapın:
su postgres
Ana dizinine gidin (bunu yapmamak hatalara neden olur):
cd ~
pg_upgrade
aşağıdaki girişleri gerektirir (bunu pg_upgrade --help
söyler):
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)
Görselleştirmeyi kolaylaştırmak için bu girdiler "uzun adlar" ile belirtilebilir:
-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
--new-options
Anahtarı da geçmeliyiz , çünkü bunun yapılmaması aşağıdakilere neden olur:
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"?
Bunun nedeni, varsayılan bağlantı seçeneklerinin yanlış anahtar seçeneklerinin kullanılmasına neden olan bu anahtarın yokluğunda uygulanması ve dolayısıyla yuva hatasının oluşmasıdır.
Yeni PostgreSQL sürümünden pg_upgrade
komutu yürütün :
/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
Özel sistem kullanıcı hesabının oturumunu kapatma:
exit
Yükseltme şimdi tamamlandı, ancak yeni örnek bağlantı noktasına bağlanacak 5433
(standart varsayılan 5432
), bu nedenle yeni örneği "kesme" işleminden önce test etmeye çalışırsanız bunu aklınızda bulundurun.
Sunucuyu normal olarak başlatın (yine, hem eski hem de yeni örnekleri başlatacaktır):
systemctl start postgresql
Yeni sürümü varsayılan yapmak istiyorsanız, etkili yapılandırma dosyasını düzenlemeniz gerekir, örn., /etc/postgresql/9.6/main/postgresql.conf
Bağlantı noktasının şu şekilde tanımlandığından emin olun:
port = 5432
Bunu yaparsanız, ya yaşlı uyarlamanın port numarasını değiştirmek 5433
bu olacaktır (sadece eski sürümü kaldırın (hizmetler başlamadan önce) aynı anda veya değil gerçek veritabanı içeriği kaldırmak; Kullanmak gerekir apt --purge remove postgresql-9.5
bunun olmasını ):
apt remove postgresql-9.5
Yukarıdaki komut tüm örnekleri durduracağından, yeni örneği son bir kez şu şekilde başlatmanız gerekir:
systemctl start postgresql
Son bir nokta olarak, pg_upgrade
iyi tavsiyeleri dikkate almayı unutmayın :
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
değil ~ o kadar işe yaramadı içinde özel / / tmp pg_upgrade çalışan, pg_upgrade önce güvene hem tesisin pg_hba.conf tüm YÖNTEMİ değiştirmek sudo mkdir /foobar
ile chmod 777 /foobar
ve orada koştu. Sonunda pg_upgrade komutu:/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
Homebrew ve homebrew servislerini kullanıyorsanız, muhtemelen şunları yapabilirsiniz:
brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql
Bence gelişmiş postgres özelliklerini kullanıyorsanız bu tamamen işe yaramayabilir, ama benim için mükemmel çalıştı.
Kullanım kılavuzu derinlemesine bu konuyu kapsar. Yapabilirsin:
pg_upgrade
Yerinde; veya
pg_dump
ve pg_restore
.
Şüpheniz varsa, çöplüklerle yapın. Eski veri dizinini silmeyin, bir şeyler ters gittiğinde saklayın / bir hata yapın; bu şekilde, değişmeyen 9.3 kurulumunuza geri dönebilirsiniz.
Ayrıntılar için kılavuza bakınız.
Sıkıştıysanız, nasıl sıkıştığınızı, nerede ve ilk önce ne denediğinizi açıklayan ayrıntılı bir soru gönderin. OS X için PostgreSQL'in birkaç farklı "dağıtımı" olduğundan (ne yazık ki) PostgreSQL'i nasıl kurduğunuza bağlı olarak biraz. Yani bu bilgiyi sağlamanız gerekir.
Bu muck ile dolaşan diğer fakir yaratıkların omuzlarında dururken, Yosemite'ye yükseltme yaptıktan sonra geri dönmek ve koşmak için şu adımları takip edebildim:
Postgres'i kurmak ve yükseltmek için ev yapımı demleme kullandığınızı varsayarsak, aşağıdaki adımları gerçekleştirebilirsiniz.
Geçerli Postgres sunucusunu durdur:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Yeni bir 9.4 veritabanı başlatın:
initdb /usr/local/var/postgres9.4 -E utf8
Postgres 9.3'ü yükleyin (makinemde artık mevcut olmadığından):
brew install homebrew/versions/postgresql93
Yosemite yükseltmesi sırasında kaldırılan dizinleri ekleyin:
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
çalıştırmak 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/
Yeni verileri yerine taşıyın:
cd /usr/local/var
mv postgres postgres9.3
mv postgres9.4 postgres
Postgres'i yeniden başlat:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
/usr/local/var/postgres/server.log
Ayrıntıları kontrol edin ve yeni sunucunun doğru şekilde başlatıldığından emin olun.
Son olarak, ilgili kütüphaneler yeniden kurulsun mu?
pip install --upgrade psycopg2
gem uninstall pg
gem install pg
brew cleanup
Verileri taşımadan önce yanlışlıkla koştum ve bu postgres9.3'ün kaldırılmasına neden oldu. Bu yardımcı oldu. :)
Çözüm şimdi Homebrew'a pişirilmiş gibi görünüyor:
$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
....
Bu benim için yaptı.
https://gist.github.com/dideler/60c9ce184198666e5ab4
Kısa ve öz. Dürüst olmak gerekirse PostgreSQL'in cesaretlerini anlamayı hedeflemiyorum, işlerin yapılmasını istiyorum.
jessie
. 10+ DB vardı ve ~ 400MB bir miktar veritabanı verileri göz açıp kapayana kadar dönüştürüldü. Sonra tekrar, bir SSD üzerinde sanal bir Debian kullanıyorum.
pg_upgradecluster 9.4 main
ama hatayı alıyorum Hata: specified cluster does not exist
... Sanırım, bu kılavuzla önce postgresql-9.4'ü tekrar yüklemeliyim: wiki.postgresql.org/wiki/Apt#Quickstart
On Windows'un ben kullanıma çalışırken farklı hatalar mesajlar bakan tuttupg_upgrade
.
Benim için çok zaman kazandım:
Benim çözümüm şu iki kaynağın bir kombinasyonunu yapmaktı:
https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d
ve
http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4
İkinci bir daha yardım etti sonra birincisini. Ayrıca, bazılarının gerekli olmadığı gibi adımları takip etmeyin. Ayrıca, verileri postgres konsolu aracılığıyla yedekleyemiyorsanız, alternatif yaklaşımı kullanabilir ve pgAdmin 3 veya benim durumumda yaptığım gibi başka bir programla yedekleyebilirsiniz.
Ayrıca, bağlantı: https://help.ubuntu.com/stable/serverguide/postgresql.html Şifrelenmiş parolanın ayarlanmasına ve postgres kullanıcısının kimliğini doğrulamak için md5'in ayarlanmasına yardımcı oldu.
Her şey tamamlandıktan sonra server
, terminalde çalıştırılan postgres sürümünü kontrol etmek için :
sudo -u postgres psql postgres
Postgres terminalinde şifre çalıştırdıktan sonra:
SHOW SERVER_VERSION;
Bunun gibi bir çıktı verecektir:
server_version
----------------
9.4.5
Postgres ayarlamak ve başlatmak için komut kullandım:
> sudo bash # root
> su postgres # postgres
> /etc/init.d/postgresql start
> /etc/init.d/postgresql stop
Ve sonra bir dosyadan veritabanını geri yüklemek için:
> psql -f /home/ubuntu_username/Backup_93.sql postgres
Veya işe yaramazsa bunu deneyin:
> pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d name_of_database ~/your_file.dump
Ve Rails kullanıyorsanız bundle exec rake db:migrate
kodu çektikten sonra yapın :)
Homebrew üzerinden Mac için:
brew tap petere/postgresql
,
brew install <formula>
(örneğin brew install petere/postgresql/postgresql-9.6
)
Eski Postgres'leri kaldır:
brew unlink postgresql
brew link -f postgresql-9.6
Herhangi bir hata oluşursa, her adımda demleme talimatını okumayı ve takip etmeyi unutmayın.
Daha fazla bilgi için buna göz atın: https://github.com/petere/homebrew-postgresql
Windows 10'da npm aldığımdan beri rimraf paketini kurdum. npm install rimraf -g
Komut kullanarak tüm veritabanlarınızı tek tek yedekleyin pg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname
Daha sonra, bu sefer 5433 numaralı bağlantı noktasını kullanmamı isteyen Son PostgreSQL Sürümü yani 11.2'yi yükledi.
Ardından PostgreSQL mayının eski sürümlerinin kaldırılması 10'du. Kaldırıcı, klasörü silmeme uyarısı verebilir C:\PostgreSQL\10\data
. Bu yüzden klasörü ve alt klasörlerini kalıcı olarak silmek için rimraf kullanarak bir sonraki adıma sahibiz.
PostgreSQL kurulum dizinine geçin ve komutu çalıştırın rimraf 10
. 10 bir dizin adıdır. Not PostgreSQL'in eski versiyonunuzu yani 9.5 veya daha fazlasını kullanın.
Şimdi ekle C:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib
Windows çevresel değişkenlerine . Yeni yüklü sürümümün 11 olduğunu ve bu yüzden neden kullandığımı unutmayın pg11
.
Git ve C:\PostgreSQL\data\pg11
ardından açpostgresql.conf
düzenlemek port = 5433
içinport = 5432
Bu kadar. Açık cmd ve tippsql -U postgres
Artık komutu kullanarak tüm yedeklenen veritabanlarınızı tek tek geri yükleyebilirsiniz pg_restore -U $username --dbname=$databasename $filename
Windows 10'da Postgresql 11'den Postgresql 12'ye yükseltme çözümüm aşağıdadır.
İlk bir açıklama olarak, Postgresql hizmetini durdurabilmeniz ve başlatabilmeniz gerekir. Bunu Powershell'de aşağıdaki komutlarla yapabilirsiniz.
Başlat:
pg_ctl start -D “d:\postgresql\11\data”
Dur:
pg_ctl stop -D “d:\postgresql\11\data”
Durum:
pg_ctl status -D “d:\postgresql\11\data”
Yükseltmeyi yapmadan önce bir yedekleme yapmak akıllıca olacaktır. Postgresql 11 örneği çalışıyor olmalıdır. Sonra küreselleri kopyalamak için
pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql
ve sonra her veritabanı için
pg_dump -U postgres -Fc <database> > d:\backup\postgresql\11\<database>.fc
veya
pg_dump -U postgres -Fc -d <database> -f d:\backup\postgresql\11\<database>.fc
Henüz yapılmadıysa Postgresql 12'yi kurun (Postgresql 11 de kurulduğundan bu 5433 numaralı bağlantı noktasında olacaktır)
Ardından yükseltme işlemini aşağıdaki gibi yapın:
1) Postgresql 11 hizmetini durdurun (yukarıya bakın)
2) Düzenleme postgresql.conf
dosya d:\postgresql\12\data
ve değişim port = 5433
içinport = 5432
3) Windows kullanıcı ortamı yolunu düzenleyin ( windows start
ardından yazınenv
Postresql 11 yerine Postgresql 12'yi işaret edecek ) düzenleyin
4) Aşağıdaki komutu girerek yükseltmeyi çalıştırın.
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
(Powershell'de, sonraki satırdaki komutu sürdürmek için backtick (veya backquote) `kullanın.)
5) ve son olarak yeni Postgresql 12 hizmetini başlatın
pg_ctl start -D “d:\postgresql\12\data”
Bence bu postgres'i 9.6'ya güncelleme çözümünüz için en iyi bağlantı
https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/