目次
No | 概要 |
---|---|
1 | 環境変数の設定 |
2 | PostgreSQLのサービス状態の確認・停止・起動・再起動 |
3 | バッチでSQLを実行 |
4 | テーブルデータのインポートとエクスポート |
※今後追加するかも
環境変数の設定
PostgreSQLの実行環境を環境変数に設定することで任意の場所でPostgreSQLを操作できるようになります。
手動で設定する場合
Windowsロゴキーをクリックして「env」と入力して、「システム環境変数の編集」を選択してください。
「環境変数(N)...」を押下してください。
「編集(I)...」を押下してください。
「新規(N)」を押下し、PostgreSQLの実行環境のパス("任意のインストール先"\PostgreSQL\15\bin)を入力し、「OK」を押下してください。
「OK」を押下してください。
任意の場所で「コマンドプロンプト」や「PowerShell」を起動し、以下のコマンドを実行してPostgreSQLが使用できるか確認してください。
psql --version
以下のように表示されれば成功です。
C:\>psql --version
psql (PostgreSQL) 15.0
コマンドで指定する場合
キーボードから「Windowsロゴキー + R」を押下し、以下のように「cmd」と入力し、「shift + ctrl + enter」を押下して、コマンドプロンプトを管理者権限で起動してください。
その後、以下のように入力すれば環境変数を設定できます。
setx /m path "%path%;C:\Program Files\PostgreSQL\15\bin"
任意の場所で「コマンドプロンプト」や「PowerShell」を起動し、以下のコマンドを実行して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」を押下して、コマンドプロンプトを管理者権限で起動してください。
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のサービスの停止
サービスの停止は以下のコマンドで行えます。
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"
サーバー停止処理の完了を待っています....完了
サーバーは停止しました
ちなみにサービス確認のコマンドを実行すると以下のように表示されます。
C:\WINDOWS\system32>pg_ctl.exe status -D "C:\Program Files\PostgreSQL\15\data"
pg_ctl: サーバーが動作していません
以下のように「-m」の後にオプションを指定して実行することもできます。
「smart」を指定した場合は、「すべてのクライアントが切断するのを待ってからデータベースを停止」します。
pg_ctl.exe stop -m smart -D "C:\Program Files\PostgreSQL\15\data"
「fast」を指定した場合は、「実行中のトランザクションをすべてロールバック+クライアント接続を強制的切断し、停止」します。
pg_ctl.exe stop -m fast -D "C:\Program Files\PostgreSQL\15\data"
「immediate」を指定した場合は、「サーバプロセスを即座に停止(DB再起動時にリカバリ処理が実行)」します。
pg_ctl.exe stop -m immediate -D "C:\Program Files\PostgreSQL\15\data"
以下の方法でも停止できます。
net status postgresql-x64-XX
XXは任意のPostgreSQLのバージョンを指定してください。
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のサービスの起動
サービスの起動は以下のコマンドで行えます。
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".
完了
サーバー起動完了
ちなみにサービス確認のコマンドを実行すると以下のように表示されます。
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 start postgresql-x64-XX
XXは任意のPostgreSQLのバージョンを指定してください。
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のサービスの再起動
サービスの起動は以下のコマンドで行えます。
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"
サーバーにシグナルを送信しました
ちなみにサービス確認のコマンドを実行すると以下のように表示されます。
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」で実行することを想定します。
どちらのファイルも同じ階層にある想定します。
-- 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="任意のパスワード"」でパスワードを指定できます。
@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
以下のようなバッチを作成して、上記の結果確認します。
「-d "任意のデータベース"」は接続先のデータベースを指定できます。
「-c "実行したいコマンド」は接続先のデータベースを指定できます。
@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)の実行は成功です。
テーブルデータのインポートとエクスポート
CSV形式のデータをテーブルにインポート(テーブルにデータを投入)したり、テーブルのデータ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で確認しています)
エクスポート
「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が出力されたら成功です。
id,name,gender,hometown
1,太郎,1,東京
2,花子,2,大阪
※今後追加するかも
参考