私はRuby on Railsアプリケーション用にPostgreSQLデータベースを使っています(Mac OS X 10.9上)。
PostgreSQLデータベースをアップグレードする方法に関する詳細な指示はありますか?
データベース内のデータを破壊するか、それをめちゃくちゃにすることを恐れています。
Postgresのインストールとアップグレードに自作を使用したと仮定すると、以下のステップを実行できます。
現在のPostgresサーバーを停止します。
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
新しい10.1データベースを初期化します。
initdb /usr/local/var/postgres10.1 -E utf8
pg_upgrade
を実行してください(注:下記以外からアップグレードする場合はbinのバージョンを変更してください):
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/
新しいデータを正しい場所に移動します。
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のドキュメント を読むことに時間をかけることをお勧めします。
これは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
上記のすべての答えにもかかわらず、ここに私の5セント行きます。
それはどんなOSでもそしてany-to-any postgresバージョンからでも動作します。
postgresql.conf
- > port
を5432
から5433
に変更してください。bin
フォルダを開きます。pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
を実行ユーザーマニュアル はこのトピックを深くカバーしています。あなたはできる:
pg_upgrade
インプレース。または
pg_dump
とpg_restore
。
疑問がある場合は、ダンプしてください。古いデータディレクトリを削除しないでください。何か問題が発生した場合や失敗した場合に備えてください。そうすれば、そのままの9.3インストールに戻ることができます。
詳細はマニュアルを参照してください。
行き詰まっている場合は、行き詰まった場所、場所、最初に試したことを説明する詳細な質問を投稿してください。 OS X用のPostgreSQLにはいくつかの異なる「ディストリビューション」があるため(残念ながら)、PostgreSQLのインストール方法にも少し依存します。だからあなたはその情報を提供する必要があるでしょう。
更新:このプロセスは9.6から10へのアップグレードと同じです。単にバージョン9.6
と10
を反映するようにコマンドを修正してください。ここで9.6
はoldversionで、10
はnewversionです。それに応じて、必ず "old"ディレクトリと "new"ディレクトリも調整してください。
私はUbuntuでPostgreSQL 9.5を9.6にアップグレードし、OS /パッケージ固有の微妙なニュアンスがいくつかあるので知っていると思います。
(データを手動でダンプしたり復元したりする必要はありませんでした。そのため、他の回答のいくつかは実行不可能でした。)
手短に言えば、このプロセスは古いバージョン(例えば9.5と9.6)と一緒に新しいバージョンのPostgreSQLをインストールし、それからpg_upgrade
バイナリを実行することから成ります。これについては https:/に詳しく説明されています。 /www.postgresql.org/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"?
これは、このスイッチがない場合にデフォルトの設定オプションが適用され、誤った接続オプションが使用されるためにソケットエラーが発生するために発生します。
newPostgreSQLバージョンから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
アップグレードは完了しました。but、新しいインスタンスはポート5433
にバインドされます(標準のデフォルトは5432
です)。そのため、新しいインスタンスをテストする前にこのことを念頭に置いてください。 「それに。
サーバーを通常どおりに起動します(これでも、古いインスタンスと新しいインスタンスの両方が起動されます)。
systemctl start postgresql
新しいバージョンをデフォルトにしたい場合は、有効な設定ファイル(/etc/postgresql/9.6/main/postgresql.conf
など)を編集し、ポートが以下のように定義されていることを確認する必要があります。
port = 5432
これを行う場合は、(サービスを開始する前に)同時に古いバージョンのポート番号を5433
に変更するか、単に古いバージョンを削除します(これによりnot実際のデータベースコンテンツは削除されます)。 ;そのためには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
自作サービスと自作サービスを使用している場合は、おそらく次のようにします。
brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql
高度なpostgres機能を使用している場合、これは完全には機能しないかもしれませんが、私にとっては完全に機能しました。
この悪口を踏みにじる他の貧しい生き物の肩の上に立って、私はYosemiteへのアップグレードの後に立ち上がって走るためにこれらのステップに従うことができました:
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
解決策が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の本質を理解することを目的としていません。
OnWindowspg_upgrade
を使おうとすると、さまざまなエラーメッセージが表示されます。
私のために多くの時間を節約しました。
私はこれがpostgresを9.6にアップデートするためのあなたの解決策のための最良のリンクであると思います
https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/
自作による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
何らかのエラーが発生した場合は、各手順の説明を読んで従うことを忘れないでください。
詳細はこちらをご覧ください。 https://github.com/petere/homebrew-postgresql
Windows 10では、npm以降、rimrafパッケージをインストールしました。 npm install rimraf -g
コマンドpg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname
を使用して、すべてのデータベースを1つずつバックアップします。
その後、最新のPostgreSQLバージョン11.2をインストールしました。これにより、今回はポート5433を使用するよう求められました。
PostgreSQL mineの古いバージョンのアンインストールは10でした。アンインストーラはフォルダC:\PostgreSQL\10\data
を削除しないという警告を出すかもしれません。そのため、rimrafを使用してフォルダとそのサブフォルダを完全に削除します。
postgreSQLインストールディレクトリに移動し、コマンドrimraf 10
を実行しました。 10はディレクトリ名です。古いバージョンのPostgreSQL、つまり9.5などを使用してください。
それでは、Windowsの環境変数にC:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib
を追加します。私が新しくインストールしたバージョンは11なので、なぜ私はpg11
を使っているのでしょう。
C:\PostgreSQL\data\pg11
に移動してpostgresql.conf
を開き、port = 5433
をport = 5432
に編集します。
それでおしまい。 cmdを開いてpsql -U postgres
と入力
pg_restore -U $username --dbname=$databasename $filename
コマンドを使用して、バックアップしたすべてのデータベースを1つずつ復元できます。
私の解決策はこれら二つのリソースの組み合わせをすることでした:
https://Gist.github.com/tamoyal/2ea1fcdf99c819b4e07d
そして
http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4
2番目の1は最初の1つよりも多くのを助けました。そうでないためにも、いくつかは必要ではないのでそのままステップに従わないでください。また、あなたがpostgresコンソールでデータをバックアップすることができないならば、あなたは別のアプローチを使い、私の場合のようにpgAdmin 3か他のプログラムでそれをバックアップすることができます。
また、リンク: https://help.ubuntu.com/stable/serverguide/postgresql.html 暗号化パスワードの設定とmd5の設定に役立ちましたpostgresユーザーを認証します。
結局のところ、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
をしてください:)