Ruby on Railsアプリケーション(Mac OS X 10.9)にPostgreSQLデータベースを使用しています。
PostgreSQLデータベースをアップグレードする方法の詳細な手順はありますか?
データベース内のデータを破壊したり、壊したりするのではないかと心配です。
Ruby on Railsアプリケーション(Mac OS X 10.9)にPostgreSQLデータベースを使用しています。
PostgreSQLデータベースをアップグレードする方法の詳細な手順はありますか?
データベース内のデータを破壊したり、壊したりするのではないかと心配です。
回答:
Postgresのインストールとアップグレードに自作を使用したと仮定すると、次の手順を実行できます。
現在のPostgresサーバーを停止します。
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
新しい10.1データベースを初期化します。
initdb /usr/local/var/postgres10.1 -E utf8
実行pg_upgrade
(注:以下以外のものからアップグレードする場合は、ビンのバージョンを変更してください):
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
詳細な内部ログを有効にする
-d
古いデータベースクラスタ構成ディレクトリ
-D
新しいデータベースクラスタ構成ディレクトリ
-b
古いPostgreSQL実行可能ディレクトリ
-B
新しいPostgreSQL実行可能ディレクトリ
新しいデータを適切な場所に移動します。
cd /usr/local/var
mv postgres postgres9.6
mv postgres10.1 postgres
Postgresを再起動します。
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
/usr/local/var/postgres/server.log
詳細を確認し、新しいサーバーが正しく起動したことを確認してください。
最後に、rails pg
gemを再インストールします
gem uninstall pg
gem install pg
少し時間をかけてPostgreSQLのドキュメントを読んで、フラストレーションを最小限に抑えるために上記の手順で何をしているのかを正確に理解することをお勧めします。
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
コマンドに注意してください。このコマンドを実行する前に、まず/usr/local/postgres9.3ディレクトリを手動で削除しましたが、/ usr / local / var / postgresディレクトリ全体を失ったようです(Time Machineから復元できました)
gem uninstall pg
実行するだけで、BundlerがGemfile.lockから正しいバージョンを再インストールできますbundle
。
brew
今も使用するためのオプションがあるbrew services stop postgresql
とbrew services start postgresql
代わりに、直接呼び出すのlaunchctl unload
とをlaunchctl load
。
上記のすべての回答にもかかわらず、ここで私の5セントになります。
これは、あらゆるOSで、あらゆるバージョンのPostgresから機能します。
postgresql.conf
-> port
を5432
に変更し5433
ます。cd
、新しいバージョンのbin
フォルダーに移動します。pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
postgresql.conf
またはなどpg_hba.conf
)を変更した場合、それらの変更を新しいインストールで手動で複製する必要があることです。あなたが使用している場合代わりに、pg_upgradecluster
:、設定ファイルを新しいクラスタにコピーされます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.
これはUbuntuユーザー向けのソリューションです
まず、postgresqlを停止する必要があります
sudo /etc/init.d/postgresql stop
/etc/apt/sources.list.d/pgdg.listという新しいファイルを作成し、以下の行を追加します
deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main
以下のコマンドに従ってください
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
これですべてが揃ったので、以下のようにアップグレードするだけです
sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main
それでおしまい。主にアップグレードされたクラスターは、ポート番号5433で実行されます。以下のコマンドで確認してください
sudo pg_lsclusters
更新:このプロセスは、9.5を少なくとも11.5にアップグレードする場合と同じです。単にバージョンを反映するためにコマンドを変更9.6
して10
、9.6
ある古いバージョンはと10
ある新しいバージョンを。また、それに応じて「古い」ディレクトリと「新しい」ディレクトリも調整してください。
UbuntuでPostgreSQL 9.5を9.6にアップグレードしたばかりですが、OS /パッケージ固有のニュアンスがいくつかあるので注意してください。
(私はデータを手動でダンプして復元する必要がなかったので、ここでの他のいくつかの回答は実行できませんでした。)
手短に言えば、プロセスは、古いバージョン(たとえば、9.5と9.6)とともに新しいバージョンのPostgreSQLをインストールし、次にpg_upgrade
バイナリを実行することで構成されます。 docs / 9.6 / static / pgupgrade.html。
の唯一の「トリッキーな」側面はpg_upgrade
、引数の正しい値を渡せなかったりcd
、コマンドを実行する前に正しいユーザーまたは正しい場所にログインできなかったりすると、不可解なエラーメッセージが表示される可能性があることです。
Ubuntu(おそらくDebian)では、「公式」リポジトリを使用しdeb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
ていて、デフォルトのファイルシステムパスまたはランタイムオプションを変更していない場合は、次の手順で十分です。
新しいバージョンをインストールします(9.6
明示的にを指定していることに注意してください):
sudo apt install postgresql-9.6
インストールが成功すると、両方のバージョンが並行して実行されますが、ポートは異なります。インストールの出力では、下部にこれが示されていますが、見落としがちです。
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
両方のサーバーインスタンスを停止します(これにより、両方が同時に停止します)。
sudo systemctl stop postgresql
専用のPostgreSQLシステムユーザーに切り替えます。
su postgres
彼のホームディレクトリに移動します(これを行わないとエラーが発生します):
cd ~
pg_upgrade
次の入力が必要です(pg_upgrade --help
これを教えてください):
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)
これらの入力は、視覚化しやすくするために、「長い名前」で指定できます。
-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
スイッチにパスする必要があります。パスに失敗すると、次の結果が発生するためです。
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"?
これは、このスイッチがない場合にデフォルトの構成オプションが適用され、不正な接続オプションが使用され、ソケットエラーが発生するために発生します。
新しい PostgreSQLバージョンpg_upgrade
からコマンドを実行します。
/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
専用システムユーザーアカウントのログアウト:
exit
これでアップグレードは完了しましたが、新しいインスタンスはポート5433
(標準のデフォルトは5432
)にバインドするため、「カットオーバー」する前に新しいインスタンスをテストする場合は、このことを覚えておいてください。
サーバーを通常どおりに起動します(これも、古いインスタンスと新しいインスタンスの両方を起動します)。
systemctl start postgresql
新しいバージョンをデフォルトにする場合は、有効な構成ファイル(など)を編集し/etc/postgresql/9.6/main/postgresql.conf
て、ポートがそのように定義されていることを確認する必要があります。
port = 5432
あなたがこれを行う場合は、どちらかに古いバージョンのポート番号を変更する5433
これがします(単に古いバージョンを削除し、(サービスを開始する前に)、同時に、またはないあなたの実際のデータベースの内容を削除し、あなたが使用する必要がありますapt --purge remove postgresql-9.5
発生する、そのために):
apt remove postgresql-9.5
上記のコマンドはすべてのインスタンスを停止するため、次のコマンドを使用して最後にもう一度新しいインスタンスを開始する必要があります。
systemctl start postgresql
最後の注意点として、pg_upgrade
の良いアドバイスを考慮することを忘れないでください:
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
、中/プライベート/ tmpのpg_upgradeのが〜とてもうまくいきませんでしたではない実行している、pg_upgradeの前に、信頼に両方のインストールのpg_hba.confの中のすべての方法を変更するsudo mkdir /foobar
とchmod 777 /foobar
、そこにそれを実行しました。最後に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
ユーザーマニュアルは深さでこのトピックをカバーしています。あなたはできる:
pg_upgrade
所定の位置に; または
pg_dump
とpg_restore
。
疑わしい場合は、ダンプを使用してください。古いデータディレクトリを削除しないでください。何か問題が発生した場合や、間違いを犯した場合に備えて、そのまま残してください。そうすれば、変更前の9.3インストールに戻すことができます。
詳しくはマニュアルをご覧ください。
行き詰まっている場合は、行き詰まっている方法、場所、最初に試したことを説明した詳細な質問を投稿してください。OS X用のPostgreSQLにはいくつかの異なる「ディストリビューション」がある(残念ながら)ため、PostgreSQLのインストール方法にも少し依存します。したがって、その情報を提供する必要があります。
ヨセミテにアップグレードした後、私はこの泥を介して歩き回っている他の貧しい生き物の肩の上に立って、次の手順に従って立ち直って実行することができました。
Postgresのインストールとアップグレードに自作を使用したと仮定すると、次の手順を実行できます。
現在のPostgresサーバーを停止します。
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
新しい9.4データベースを初期化します。
initdb /usr/local/var/postgres9.4 -E utf8
postgres 9.3をインストールします(私のマシンには存在しなくなったため):
brew install homebrew/versions/postgresql93
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
実行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/
新しいデータを適切な場所に移動します。
cd /usr/local/var
mv postgres postgres9.3
mv postgres9.4 postgres
Postgresを再起動します。
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
/usr/local/var/postgres/server.log
詳細を確認し、新しいサーバーが正しく起動したことを確認してください。
最後に、関連するライブラリを再インストールしますか?
pip install --upgrade psycopg2
gem uninstall pg
gem install pg
brew cleanup
データを移行する前に誤って実行したため、postgres9.3がアンインストールされました。これは役に立ちました。:)
ソリューションがHomebrewに組み込まれたようです:
$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
....
これでうまくいきました。
https://gist.github.com/dideler/60c9ce184198666e5ab4
短くて要点。私は正直に言って、PostgreSQLの本質を理解することを目指していません。
jessie
。10以上のDBと約400MBのデータベースデータが瞬く間に変換されました。次に、私はSSDで仮想Debianを使用しています。
上のWindows I使用しようとすると別のエラーメッセージに直面して保管pg_upgrade
。
私にとって多くの時間を節約できました:
私の解決策は、次の2つのリソースを組み合わせることです。
https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d
そして
http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4
第二 1は、より多くの助けその後、最初のものを。また、必要ではない手順があるため、そのままにしないでください。また、postgresコンソール経由でデータをバックアップできない場合は、別の方法を使用して、pgAdmin 3または他のプログラムでバックアップすることができます。
また、リンク:https : //help.ubuntu.com/stable/serverguide/postgresql.html暗号化されたパスワードを設定し、postgresユーザーを認証するためにmd5を設定するのに役立ちました。
結局のところ、postgresのserver
バージョンを確認するには、ターミナルで実行します。
sudo -u postgres psql postgres
パスワードを入力した後、postgresターミナルで実行します。
SHOW SERVER_VERSION;
それは次のようなものを出力します:
server_version
----------------
9.4.5
postgresの設定と開始には、次のコマンドを使用しました。
> sudo bash # root
> su postgres # postgres
> /etc/init.d/postgresql start
> /etc/init.d/postgresql stop
そして、ファイルからデータベースを復元する場合:
> psql -f /home/ubuntu_username/Backup_93.sql postgres
または、うまくいかない場合は、これを試してください:
> pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d name_of_database ~/your_file.dump
そして、Railsを使用している場合はbundle exec rake db:migrate
、コードをプルした後にa :)
自作のMacの場合:
brew tap petere/postgresql
、
brew install <formula>
(例:brew install petere/postgresql/postgresql-9.6
)
古いPostgresを削除します。
brew unlink postgresql
brew link -f postgresql-9.6
エラーが発生した場合は、各ステップでbrewの指示を読み、それに従うことを忘れないでください。
詳細はこちらをご覧ください:https : //github.com/petere/homebrew-postgresql
Windows 10ではnpmを使用していたため、rimrafパッケージをインストールしました。 npm install rimraf -g
コマンドを使用してすべてのデータベースを1つずつバックアップします pg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname
次に、最新のPostgreSQLバージョン、つまり11.2をインストールしたため、今回はポート5433を使用するように求められました。
以前のバージョンのPostgreSQL mineのアンインストールは10でした。アンインストーラーはフォルダーを削除しないという警告を表示する場合がありますC:\PostgreSQL\10\data
。これが、rimrafを使用してフォルダーとそのサブフォルダーを完全に削除する次のステップがある理由です。
PostgreSQLのインストールディレクトリに移動し、コマンドを実行しrimraf 10
ます。10はディレクトリ名です。PostgreSQLの古いバージョン、つまり9.5などを使用してください。
次にC:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib
、Windows環境変数に追加します。新しくインストールしたバージョンは11なので、なぜを使用しているのpg11
ですか。
ナビゲートしC:\PostgreSQL\data\pg11
てpostgresql.conf
編集port = 5433
を開くport = 5432
それでおしまい。cmdを開いて入力psql -U postgres
コマンドを使用して、バックアップされたすべてのデータベースを1つずつ復元できるようになりました pg_restore -U $username --dbname=$databasename $filename
Windows 10でPostgresql 11からPostgresql 12にアップグレードするための私の解決策は次のとおりです。
最初の発言として、Postgresqlサービスを停止および開始できる必要があります。これを行うには、Powershellで次のコマンドを実行します。
開始:
pg_ctl start -D “d:\postgresql\11\data”
やめる:
pg_ctl stop -D “d:\postgresql\11\data”
状態:
pg_ctl status -D “d:\postgresql\11\data”
アップグレードを行う前にバックアップを作成することをお勧めします。Postgresql 11インスタンスが実行されている必要があります。次に、グローバルをコピーするには
pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql
そして各データベース
pg_dump -U postgres -Fc <database> > d:\backup\postgresql\11\<database>.fc
または
pg_dump -U postgres -Fc -d <database> -f d:\backup\postgresql\11\<database>.fc
まだ完了していない場合は、Postgresql 12をインストールします(Postgresql 11もインストールされているため、これはポート5433になります)
次に、次のようにアップグレードを実行します。
1)Postgresql 11サービスを停止します(上記を参照)
2)編集postgresql.conf
中のファイルd:\postgresql\12\data
や変更port = 5433
へport = 5432
3)Postresql 11ではなくPostgresql 12を指すようにWindowsユーザー環境パスを編集し(windows start
次にenv
)
4)次のコマンドを入力して、アップグレードを実行します。
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では、次の行でコマンドを続行するには、バックティック(またはバッククォート) `を使用します)
5)そして最後に新しいPostgresql 12サービスを開始します
pg_ctl start -D “d:\postgresql\12\data”
私はこれがpostgresを9.6に更新するためのあなたのソリューションのための最良のリンクだと思います
https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/