データを失うことなく PostgreSQL サーバーのバージョンをアップグレードする

Bilal Shahid 2023年6月20日
  1. PostgreSQL サーバーのバージョンアップの重要性
  2. PostgreSQL サーバーのバージョンを更新するためのさまざまなアプローチ
データを失うことなく PostgreSQL サーバーのバージョンをアップグレードする

通常、多くのユーザーは、プロセス中にデータが失われることを恐れて、PostgreSQL サーバーを最新バージョンにアップグレードしません。 PostgreSQL サーバーを新しいバージョンに更新するのは少し難しく、正しい手順に従わないとデータが完全に失われる可能性があります。

したがって、PostgreSQL サーバーを最新バージョンにアップグレードする前に、十分な調査を行うことが不可欠です。 このチュートリアルでは、データを失うことなく PostgreSQL サーバーのバージョンをアップグレードする段階的なプロセスについて説明します。

PostgreSQL サーバーのバージョンアップの重要性

はい! 以下に示す多くの理由により、PostgreSQL サーバーを最新バージョンにアップグレードすることが不可欠です。

  • 古いバージョンは、他のアプリケーションとの互換性が失われる可能性があります。
  • サイバー犯罪者は、古いバージョンのパッチが適用されていない脅威が原因でシステムの脆弱性を発見し、PostgreSQL サーバーを攻撃する可能性があります。
  • 古いバージョンのバグは、新しいバージョンで修正されます。
  • 新しいバージョンでは、タスクを効率的に実行するのに役立つ拡張機能が提供されています。

この記事には、PostgreSQL サーバーをあるバージョンから別のバージョンに正常に更新する方法が含まれています。

この手順は、すべてのオペレーティング システムに適用されます。

PostgreSQL サーバーのバージョンを更新するためのさまざまなアプローチ

データを失うことなく PostgreSQL サーバーをあるバージョンから別のバージョンに更新するには、複数の方法があります。 ここでは、そのうちの 3つを使用して PostgreSQL サーバーをアップグレードする方法を示します。

要件に応じて、次のいずれかのソリューションを選択できます。

解決策 1: 一般的な解決策

どのオペレーティング システムでも機能し、データを操作することなく、PostgreSQL サーバーを選択した任意のバージョンに更新できます。 これは一般的な解決策であるため、正確な BASH コマンドについては言及されていません。

これらのコマンドは、さまざまなオペレーティング システムを検索して、指示に従って実装できます。

  1. 特定のオペレーティング システムの BASH コマンドを使用して、実行中の PostgreSQL サーバーのインスタンスを停止します。
  2. 移行先の PostgreSQL サーバーの新しいバージョンをインストールして起動します。
  3. インストールしたばかりの PostgreSQL サーバーの新しいバージョンに接続できるかどうかを確認します。
  4. 旧バージョンの PostgreSQL サーバーのポート番号 postgresql.conf -> port5432 から 5433 に変更します。
  5. PostgreSQL サーバーの古いバージョンの新しいポート番号 5433 を起動します。
  6. ターミナルを開き、cd コマンドを使用してディレクトリを新しいバージョンの bin フォルダに変更します。
  7. コマンド pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username> をターミナルで実行します。
  8. 古い PostgreSQL サーバーの実行中のインスタンスを停止します。

特定のオペレーティング システム用に設計された BASH コマンドを使用して手順全体を実装すると、PostgreSQL サーバーを古いバージョンから新しいバージョンにアップグレードするのに役立ちます。

注: このソリューションで発生する可能性のある問題は、Postgres 構成ファイルの一部を変更した場合 (たとえば、postgresql.conf または pg_hba.conf)、これらの変更を手動で複製する必要があることです。 新しい PostgreSQL サーバーのインストール。 pg_upgradecluster コマンドは、構成ファイルを新しいクラスターにコピーするのに役立ちます。

解決策 2: Homebrew で使用される仮定を使用する

このソリューションは、Postgres のインストールとアップグレードに Homebrew ソフトウェアが使用されているという前提に焦点を当てています。 以下の手順に従って、PostgreSQL サーバーをあるバージョンから別のバージョンにアップグレードします。

簡単にするために、Postgres v9.6 が Postgres v10.1 に更新されていると仮定します。

  • 現在の PostgreSQL サーバーの実行中のインスタンスを停止します。
    launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
    
  • initdb コマンドを使用して、新しい 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/bin/ \
    -B /usr/local/Cellar/postgresql/10.1/bin/
    
    # The different extensions of the `pg_upgrade` command have the following significance:
    # The `-v` extension enables verbose internal logging.
    # The `-d` extension is used to specify the configuration directory of the old database.
    # The `-D` extension is used to specify the configuration directory of the new database.
    # The `-b` extension specifies the executable directory of the old database.
    # The `-B` extension specifies the executable directory of the new database.
    
  • 次のコマンドを使用して、データを古いデータベースから新しい場所に移動します。
    cd /usr/local/var
    mv postgres postgres9.6
    mv postgres10.1 postgres
    
  • 4つの手順をすべて正常に実行したら、PostgreSQL サーバーを再起動します。 この目的のために、次のコマンドを使用できます。
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
    

    Postgres を再起動したら、/usr/local/var/postgres/server.log で新しいサーバーの詳細を確認します。 新しいサーバーが適切に開始され、正しく実行されていることを確認してください。

  • 次のコマンドを使用して、rails pg gem を再インストールする必要があります。
    gem uninstall pg
    gem install pg
    

2 番目のソリューションの改訂

Homebrew では、古い launchctl load および launchctl unload コマンドではなく、brew services start postgresql および brew services stop postgresql コマンドを使用できるようになりました。

醸造サービスに追加されたコマンドは、参考のために以下に強調表示されています。

brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql

解決策 3: Ubuntu ユーザー向け

このソリューションは、特に Ubuntu ユーザー向けです。 一般的な手順は、この記事で前述したものと同じです。 ただし、このソリューションには、Ubuntu で使用される端末コマンドが含まれています。

手順は次のとおりです。

  • 次のコマンドを使用して、古いバージョンの Postgres を停止します。
    sudo /etc/init.d/postgresql stop
    
  • 新しいファイル /etc/apt/sources.list.d/pgdg.list を作成し、次の行を追加して編集する必要があります。
    deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main
    

    注: Ubuntu 14.04 では、utopic-pgdb コマンドの代わりに trusty-pgdb コマンドを使用できます。

  • 新しく作成されたファイルに行が追加されたら、以下のコマンドを実行します。
    wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add-
    sudo apt-getupdate
    sudo apt-get install postgresql-10.1
    sudo pg_dropcluster --stop 10.1 main
    sudo /etc/init.d/postgresql start
    
  • PostgreSQL サーバーをアップグレードします。
    sudo pg_upgradecluster 9.6 main
    sudo pg_dropcluster 9.6 main
    

    アップグレードされたクラスターは、ポート 5433 で実行されるはずです。 したがって、ポートをチェックして、sudo pg_lsclusters コマンドを使用して PostgreSQL サーバーのアップグレードが成功したことを確認してください。

PostgreSQL サーバーをあるバージョンから別のバージョンにアップグレードするには、正しいプロセスに従うことが不可欠です。 そうしないと、不適切なアップグレード プロセスによってデータが失われる可能性があります。 したがって、注意を払う必要があります。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

関連記事 - PostgreSQL Update