3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PostgreSQLメモ(Windows)

Posted at

目次

No 概要
1 環境変数の設定
2 PostgreSQLのサービス状態の確認・停止・起動・再起動
3 バッチでSQLを実行
4 テーブルデータのインポートとエクスポート

※今後追加するかも

環境変数の設定

PostgreSQLの実行環境を環境変数に設定することで任意の場所でPostgreSQLを操作できるようになります。

手動で設定する場合

Windowsロゴキーをクリックして「env」と入力して、「システム環境変数の編集」を選択してください。
image.png
環境変数(N)...」を押下してください。
image.png
編集(I)...」を押下してください。
image.png
新規(N)」を押下し、PostgreSQLの実行環境のパス("任意のインストール先"\PostgreSQL\15\bin)を入力し、「OK」を押下してください。
image.png
OK」を押下してください。
image.png
任意の場所で「コマンドプロンプト」や「PowerShell」を起動し、以下のコマンドを実行してPostgreSQLが使用できるか確認してください。

PostgreSQLのバージョン確認コマンド
psql --version

以下のように表示されれば成功です。

実行結果
C:\>psql --version
psql (PostgreSQL) 15.0

コマンドで指定する場合

キーボードから「Windowsロゴキー + R」を押下し、以下のように「cmd」と入力し、「shift + ctrl + enter」を押下して、コマンドプロンプトを管理者権限で起動してください。
image.png
その後、以下のように入力すれば環境変数を設定できます。

PostgreSQLの実行環境を環境変数に設定するコマンド
setx /m path "%path%;C:\Program Files\PostgreSQL\15\bin"

任意の場所で「コマンドプロンプト」や「PowerShell」を起動し、以下のコマンドを実行してPostgreSQLが使用できるか確認してください。

PostgreSQLのバージョン確認コマンド
psql --version

以下のように表示されれば成功です。

実行結果
C:\>psql --version
psql (PostgreSQL) 15.0

バッチファイルに設定したり、一時的に指定できるようにする場合

バッチファイルで設定したり、環境変数を保存したくない場合は以下のコマンドで一時的に指定できるようになります。

一時的に環境変数を指定するコマンド
set path=%path%;"C:\Program Files\PostgreSQL\15\bin"

PostgreSQLのサービス状態の確認・停止・起動・再起動

PostgreSQLのサービス自体の起動や停止方法のコマンドについて記載します。
管理者権限でのみ実行できますので以下のように管理者権限で起動してください。(環境変数の設定と同じです)
キーボードから「Windowsロゴキー + R」を押下し、以下のように「cmd」と入力し、「shift + ctrl + enter」を押下して、コマンドプロンプトを管理者権限で起動してください。
image.png

PostgreSQLのサービス状態の確認

PostgreSQLのサービス状態の確認コマンド
pg_ctl.exe status -D "C:\Program Files\PostgreSQL\15\data"

以下のように表示されれば成功です。

実行結果
C:\WINDOWS\system32>pg_ctl.exe status -D "C:\Program Files\PostgreSQL\15\data"
pg_ctl: サーバーが動作中です(PID: 6452)
C:/Program Files/PostgreSQL/15/bin/postgres.exe "-D" "C:\Program Files\PostgreSQL\15\data"

PostgreSQLのサービスの停止

サービスの停止は以下のコマンドで行えます。

PostgreSQLのサービスの停止コマンド
pg_ctl.exe stop -D "C:\Program Files\PostgreSQL\15\data"

以下のように表示されれば成功です。

実行結果
C:\WINDOWS\system32>pg_ctl.exe stop -D "C:\Program Files\PostgreSQL\15\data"
サーバー停止処理の完了を待っています....完了
サーバーは停止しました

ちなみにサービス確認のコマンドを実行すると以下のように表示されます。

PostgreSQLのサービス状態の確認コマンド
C:\WINDOWS\system32>pg_ctl.exe status -D "C:\Program Files\PostgreSQL\15\data"
pg_ctl: サーバーが動作していません

以下のように「-m」の後にオプションを指定して実行することもできます。
smart」を指定した場合は、「すべてのクライアントが切断するのを待ってからデータベースを停止」します。

smartを指定した場合
pg_ctl.exe stop -m smart -D "C:\Program Files\PostgreSQL\15\data"

fast」を指定した場合は、「実行中のトランザクションをすべてロールバック+クライアント接続を強制的切断し、停止」します。

fastを指定した場合
pg_ctl.exe stop -m fast -D "C:\Program Files\PostgreSQL\15\data"

immediate」を指定した場合は、「サーバプロセスを即座に停止(DB再起動時にリカバリ処理が実行)」します。

immediateを指定した場合
pg_ctl.exe stop -m immediate -D "C:\Program Files\PostgreSQL\15\data"

以下の方法でも停止できます。

netコマンドを使用したPostgreSQLのサービスの停止コマンド
net status postgresql-x64-XX

XXは任意のPostgreSQLのバージョンを指定してください。

PostgreSQLのバージョン15を指定した場合
net stop postgresql-x64-15

以下のように表示されれば成功です。

実行結果
C:\WINDOWS\system32>net stop postgresql-x64-15
postgresql-x64-15 - PostgreSQL Server 15 サービスを停止中です.
postgresql-x64-15 - PostgreSQL Server 15 サービスは正常に停止されました。

PostgreSQLのサービスの起動

サービスの起動は以下のコマンドで行えます。

PostgreSQLのサービスの起動コマンド
pg_ctl.exe start -D "C:\Program Files\PostgreSQL\15\data"

以下のように表示されれば成功です。

実行結果
C:\WINDOWS\system32>pg_ctl.exe start -D "C:\Program Files\PostgreSQL\15\data"
サーバーの起動完了を待っています....2023-02-19 23:33:52.681 JST [10064] LOG:  redirecting log output to logging collector process
2023-02-19 23:33:52.681 JST [10064] HINT:  Future log output will appear in directory "log".
完了
サーバー起動完了

ちなみにサービス確認のコマンドを実行すると以下のように表示されます。

PostgreSQLのサービス状態の確認コマンド
C:\WINDOWS\system32>pg_ctl.exe status -D "C:\Program Files\PostgreSQL\15\data"
pg_ctl: サーバーが動作中です(PID: 10064)
C:/Program Files/PostgreSQL/15/bin/postgres.exe "-D" "C:/Program Files/PostgreSQL/15/data"

以下の方法でも起動できます。

netコマンドを使用したPostgreSQLのサービスの起動コマンド
net start postgresql-x64-XX

XXは任意のPostgreSQLのバージョンを指定してください。

PostgreSQLのバージョン15を指定した場合
net start postgresql-x64-15

以下のように表示されれば成功です。

実行結果
C:\WINDOWS\system32>net start postgresql-x64-15
postgresql-x64-15 - PostgreSQL Server 15 サービスを開始します..
postgresql-x64-15 - PostgreSQL Server 15 サービスは正常に開始されました。

PostgreSQLのサービスの再起動

サービスの起動は以下のコマンドで行えます。

PostgreSQLのサービスの再起動コマンド
pg_ctl.exe reload -D "C:\Program Files\PostgreSQL\15\data"

以下のように表示されれば成功です。

実行結果
C:\WINDOWS\system32>pg_ctl.exe reload -D "C:\Program Files\PostgreSQL\15\data"
サーバーにシグナルを送信しました

ちなみにサービス確認のコマンドを実行すると以下のように表示されます。

PostgreSQLのサービス状態の確認コマンド
C:\WINDOWS\system32>pg_ctl.exe status -D "C:\Program Files\PostgreSQL\15\data"
pg_ctl: サーバーが動作中です(PID: 9840)
C:/Program Files/PostgreSQL/15/bin/postgres.exe "-D" "C:\Program Files\PostgreSQL\15\data"

バッチでSQLを実行

バッチでSQLを実行する方法です。

以下のようなユーザとDBとテーブルを作成する「init.sql」を「init_db.bat」で実行することを想定します。
どちらのファイルも同じ階層にある想定します。
image.png

init.sql
-- DB作成
create database test;

-- 接続先dbをtestに変更
\c test

-- エンコード変更
set client_encoding to 'utf8';
-- エンコードを確認
select current_setting('client_encoding');

-- ユーザ作成
create user testuser login password 'testuser' createdb;

begin;
create schema if not exists test_schema; 
create table if not exists test_schema.user_infomation( 
    id varchar (5) not null
    , name varchar (10) not null
    , gender numeric (1) not null
    , hometown varchar (50)
    , primary key (id)
); 
comment on table test_schema.user_infomation is 'ユーザー情報テーブル'; 
comment on column test_schema.user_infomation.id is 'id'; 
comment on column test_schema.user_infomation.name is '名前'; 
comment on column test_schema.user_infomation.gender is '性別'; 
comment on column test_schema.user_infomation.hometown is '出身地';
commit;

-- スキーマ所持者変更
alter schema test_schema owner to testuser;

-- 権限付与
grant postgres to testuser;

・DBへの接続方法は「psql -h "任意のホスト名" -p "任意のポート番号" -U "任意のユーザ名"」です。
・「-f "任意のファイル名"」でファイルに記載したSQLを実行できます。
set PGPASSWORD="任意のパスワード"」でパスワードを指定できます。

init_db.bat
@echo off
rem 環境変数の設定
set path=%path%;C:\Program Files\PostgreSQL\15\bin

rem ホスト名
set HOST=localhost

rem ポート番号
set PORT=5432

rem ユーザ名
set USER=postgres

rem パスワード
set PGPASSWORD=password

psql -h %HOST% -p %PORT% -U %USER% -f ./init.sql

pause

以下のように表示されれば実行は成功です。
image.png

以下のようなバッチを作成して、上記の結果確認します。
-d "任意のデータベース"」は接続先のデータベースを指定できます。
-c "実行したいコマンド」は接続先のデータベースを指定できます。

check_db.bat
@echo off
rem 環境変数の設定
set path=%path%;C:\Program Files\PostgreSQL\15\bin

rem ホスト名
set HOST=localhost

rem ポート番号
set PORT=5432

rem ユーザ名
set USER=postgres

rem ユーザ名
set DB=test

rem パスワード名
set PGPASSWORD=password

psql -h %HOST% -p %PORT% -U %USER% -d %DB% -c "\dt test_schema.*"

pause

以下のように表示されれば先ほど実行したバッチ(init_db.bat)の実行は成功です。
image.png

テーブルデータのインポートとエクスポート

CSV形式のデータをテーブルにインポート(テーブルにデータを投入)したり、テーブルのデータcsv形式で出力する方法についてです。

インポート

user_infomation」テーブルに下記のようなCSVのデータを投入することを想定します。

user_infomation.csv
id,name,gender,hometown
1,太郎,1,東京
2,花子,2,大阪

インポートのコマンドは次のように実行します。
copy "任意のテーブル名" from '出力先CSVファイル名絶対パス' delimiter ',' csv header;

インポートのコマンド
copy user_infomation from 'c:/db/import/csv/user_infomation.csv' delimiter ',' csv header;

以下のようにデータが投入されていたら成功です。(※A5SQLで確認しています)
image.png

エクスポート

user_infomation」テーブルのデータをCSVに出力することを想定します。
エクスポートのコマンドは次のように実行します。
copy "任意のテーブル名" to '読込先CSVファイル名絶対パス' delimiter ',' csv header;

エクスポートのコマンド
copy test_schema.user_infomation to 'c:/db/export/csv/user_infomation.csv' delimiter ',' csv header;

以下のようなCSVが出力されたら成功です。

user_infomation.csv
id,name,gender,hometown
1,太郎,1,東京
2,花子,2,大阪

※今後追加するかも

参考

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?