【SQL実践|実務向け】Windows環境のDBA必見!PostgreSQLサービスをコマンドラインから安全に操作する方法

1. 導入

Windows環境でPostgreSQLを運用する際、GUIの「サービス」画面から手動で停止・開始を行っていませんか?本番環境やテスト環境で、DBの再起動やメンテナンスを行う際、GUI操作は誤操作のリスクがあり、また自動化にも向きません。今回は、Windowsサービスとして登録されたPostgreSQLを、コマンドライン(PowerShell)から安全かつ確実に制御する方法を解説します。

2. 基礎知識

Windowsにおいて、PostgreSQLは「Windowsサービス」というバックグラウンドプログラムとして管理されています。このサービスは、`pg_ctl.exe`というPostgreSQLの制御用プログラムを介して起動されています。サービス名(例:`postgresql-x64-15`)を指定することで、OSレベルでプロセスの開始・停止を指示できます。これらをコマンドで操作することで、バッチファイルによる定時メンテナンスや、デプロイ後の自動再起動が可能になります。

3. 実装/解決策

Windowsのサービスを操作するには、管理者権限を持つPowerShellを使用します。`Start-Service`および`Stop-Service`コマンドレットを使用するのが最も標準的です。

手順は以下の通りです。
1. 管理者としてPowerShellを起動します。
2. `Get-Service`コマンドで正しいサービス名を確認します。
3. `Stop-Service`または`Start-Service`で状態を制御します。

4. サンプルプログラム

以下のスクリプトは、サービス名を確認し、安全に停止・開始を行うためのものです。環境に合わせてサービス名を書き換えて使用してください。

サービス名の指定(環境によって末尾の数値が異なります)
$ServiceName = “postgresql-x64-15”

サービスの存在確認
if (Get-Service -Name $ServiceName -ErrorAction SilentlyContinue) {
Write-Host “サービス $ServiceName を停止します…” -ForegroundColor Yellow
Stop-Service -Name $ServiceName -Force

# 停止確認
Start-Sleep -Seconds 3

Write-Host “サービス $ServiceName を開始します…” -ForegroundColor Green
Start-Service -Name $ServiceName

Write-Host “処理が完了しました。” -ForegroundColor Cyan
} else {
Write-Error “サービス名 $ServiceName が見つかりませんでした。”
}

5. 応用・注意点

注意点1:実行権限
サービス制御には管理者権限が必須です。PowerShellを必ず「管理者として実行」してください。

注意点2:依存関係の考慮
PostgreSQLを停止すると、接続中の全クライアントとのコネクションが強制切断されます。アプリ側で再接続ロジックが実装されているか確認してください。また、`Stop-Service`を実行する際は、`-Force`オプションを付けることで、依存するサービスがある場合でも強制的に停止させることが可能です。

注意点3:自動起動設定
サーバー再起動時にDBが自動で立ち上がらないようにしたい場合は、PowerShellから以下のコマンドを実行して設定を変更できます。
Set-Service -Name “postgresql-x64-15” -StartupType Manual
これで、必要な時だけ起動する運用が可能になります。

コメント

タイトルとURLをコピーしました