Windows 11 端末でコマンドプロンプトを使って psql コマンドだけをサイレントインストールしてみた

Windows 11 端末でコマンドプロンプトを使って psql コマンドだけをサイレントインストールしてみます。
2023.03.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

以前の記事では環境変数の設定に `SET` コマンドを使っていましたが、変更を永続化する `SETX` コマンドに差し替えました。

以前の記事では `--enable-components commandlinetools` の指定だけを紹介していましたが、これだけではすべてのコンポーネントがインストールされてしまうため、`--disable-components` でインストールしないコンポーネントの指定を追記しました。

コーヒーが好きな emi です。

私はクラスメソッドでは少なめの Windows ユーザーです。
以前社内の Slack で「Windows Servser に psql をインストールする際、インストーラーを使わないでインストールする方法はないですか?」という質問を見かけたので、手元の Windows 11 端末でコマンドプロンプトを使って psql コマンドだけをインストールしてみる実験をしてみました。
今回はサイレントインストールを実験します。サイレントインストールとは、セットアップウィザードの画面を表示せずにインストールを行う機能です。

psql コマンドのダウンロードリンクを確認

日本PostgresSQLユーザ会のサイトからダウンロードリンクを確認します。

ダウンロードタブを開きます。

OS から Windows を選択します。

「Download the installer」のリンクをクリックします。

EDB のサイトに移動します。PostgreSQL Version は 2023/3/14 時点で最新の15.2 をインストールしてみます。Windows x86-64 の下部のダウンロードボタンを右クリックし、「リンクのアドレスをコピー」をクリックします。

ダウンロードリンクhttps://sbp.enterprisedb.com/getfile.jsp?fileid=1258323 がコピーできました。このリンクはメモ帳などにメモしておきましょう。

コマンドプロンプトを管理者権限で開く

[スタート] をクリックし検索で「cmd」と入力するとコマンドプロンプトが表示されます。右クリックして「管理者として実行」を選択します。

psql コマンドのみインストールする手順

インストーラーのダウンロード

以下のコマンドでダウンロードします。

bitsadmin /TRANSFER <ジョブ名> /PRIORITY <優先度> <ダウンロードするファイルの URL> <ファイルの保存先>
  • ジョブ名:任意の文字列を指定する。
  • 優先度:高い順に FOREGROUNDHIGHNORMALLOW が設定でき、デフォルトはNORMAL になる
  • ダウンロードするファイルの URLpsql コマンドのダウンロードリンクを確認でコピーしておいた URL を指定する
  • ファイルの保存先:ファイル名まで指定する
    • 今回は C ドライブの下に work フォルダを作成し、postgresql-15.2-1-windows-x64.exe というファイル名で保存することにしたので C:\work\postgresql-15.2-1-windows-x64.exe と指定しました。

★実行コマンド

bitsadmin /TRANSFER dl-psql /PRIORITY NORMAL https://sbp.enterprisedb.com/getfile.jsp?fileid=1258323 C:\work\postgresql-15.2-1-windows-x64.exe

実行すると、以下のようにダウンロードのステータスが表示され、ダウンロードが進行します。最初は 10 days などと表示され「そんなにかかるの!?」と驚きましたが、私は 1~2 分程度でダウンロードが完了しました。

ダウンロードされたか確認します。cd コマンドでダウンロードしたフォルダに移動します。

★実行コマンド

cd C:\work

dirtree /F などのコマンドで、ファイルを表示します。

★実行コマンド

dir /B *.exe

★実行結果

C:\work>dir /B *.exe
postgresql-15.2-1-windows-x64.exe

C:\work>

postgresql-15.2-1-windows-x64.exe が表示されれば、ダウンロードは成功しています。

サイレントインストール

それでは、psql コマンドのみインストールします。

★実行コマンド

postgresql-15.2-1-windows-x64.exe^
  --mode unattended^
  --unattendedmodeui none^
  --prefix "C:\Program Files\PostgreSQL\15"^
  --enable-components commandlinetools^
  --disable-components server,pgAdmin,stackbuilder

★実行結果

C:\work>postgresql-15.2-1-windows-x64.exe^
More?   --mode unattended^
More?   --unattendedmodeui none^
More?   --prefix "C:\Program Files\PostgreSQL\15"^
More?   --enable-components commandlinetools^
More?   --disable-components server,pgAdmin,stackbuilder

C:\work>

実行後は何も表示されません。裏では psql コマンドのインストールが進んでおり、少し待つとインストールが完了します。

インストールは完了しましたが、まだ PATH を通していませんので、どこでも psql が実行できるわけではありません。
C:\work フォルダで以下のように psql のバージョンを確認するコマンドを実行しても、うまくいきせん。

★実行コマンド

psql --version

★実行結果

C:\work>psql --version
'psql' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

C:\work>

PATH を設定する

「PATH を通す」とは、コマンドラインで実行できるプログラム(コマンド)を指定するための環境変数 PATH に、特定のフォルダのパスを追加することを指します。

たとえば、あるフォルダにインストールされたプログラムをコマンドプロンプトや PowerShell から実行する場合、そのプログラムの実行ファイル(.exe)までのパスを指定する必要があります。これを毎回指定するのは手間がかかるため、そのフォルダのパスを環境変数の PATH に追加することで、コマンドプロンプトや PowerShell からプログラムを実行できるようになります。

今回は、この PATH を通す作業もコマンドで実行していきます。

PATH を確認します。

★実行コマンド

echo %PATH%

★実行結果

C:\work>echo %PATH%
C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\windows\System32\OpenSSH\;C:\Program Files\Cloudflare\Cloudflare WARP\;C:\Users\kitani.emi\AppData\Local\Microsoft\WindowsApps;C:\Users\kitani.emi\AppData\Local\Programs\Microsoft VS Code\bin

C:\work>

PATHを設定します。

★実行コマンド

setx PATH "%PATH%;C:\Program Files\PostgreSQL\15\bin" /M
  • /M オプション:システムの環境変数を設定するために指定する
  • %PATH%;:既存の PATH 値を保持しつつ、新しいパスを追加するために指定する
  • " で囲むのは、パスがスペースを含んでいるため

★実行結果

C:\work>set PATH=%PATH%;C:\Program Files\PostgreSQL\15\bin

C:\work>

コマンドプロンプトを再起動して、システムの環境変数 PATH が更新されていることを確認します。 コマンドプロンプトを閉じて再度開くことで、新しい PATH 値が読み込まれます。

★実行コマンド

echo %PATH%

★実行結果

c:\work>echo %PATH%
C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\windows\System32\OpenSSH\;C:\Program Files\Cloudflare\Cloudflare WARP\;C:\Users\kitani.emi\AppData\Local\Microsoft\WindowsApps;C:\Users\kitani.emi\AppData\Local\Programs\Microsoft VS Code\bin;C:\Program Files\PostgreSQL\15\bin;

c:\work>

再度、psql のバージョンを確認します。

★実行結果

C:\work>psql --version
psql (PostgreSQL) 15.2

C:\work>

psql コマンドで、バージョン確認ができました。

終わりに

Windows 11 端末でコマンドプロンプトを使って psql コマンドだけをインストールしてみました。興味本位の実験でしたが、どなたかのお役に立てば幸いです。

余談

クラスメソッドのエンジニアは基本的に貸与 PC を使うのですが、私の入社時は MacBook Pro と Surface Laptop が選択できました。多くのメンバーが Mac を選択するようですが、私は今までずっと Windows で生きてきましたので、仕事をする際に慣れない OS で手こずるくらいならばと Windows を選びました。Windows 勢のみなさん、仲良くしてください。
ぶっちゃけ Mac は憧れています。