[PostgreSQL] テーブル作成のバッチファイルを作成する

0
6668
views

バッチフォルダの構成

バッチフォルダには、メインバッチの run.bat があり、このバッチが3つのバッチ(ユーザ・データベース作成/テーブル作成/テーブル内容表示)を順次起動し、各バッチは SQLファイルを実行する、というのが処理のおおまかな流れです。

バッチフォルダ
│  run.bat
│
├─bat
│      initdb_foodshop.bat
│      create_table_freshfishes.bat
│      find_freshfishes.bat
│
└─SQL
        initdb_foodshop.sql
        create_table_freshfishes.sql
        find_fresh_fishes.sql

run.bat

run.bat は、以下の3つの部品バッチを call コマンドで順番に呼出し・実行するバッチです。各呼出し後に pause コマンドでユーザがキーを押すまで処理を中断させます。

  • initdb_foodshop.bat(ユーザ・データベース作成)
  • create_table_freshfishes.bat(テーブル作成)
  • find_freshfishes.bat(テーブル内容表示)
@echo off
rem -------------------------------------------
rem initdb_foodshop.bat の呼出し
rem -------------------------------------------
call initdb_foodshop.bat
pause

rem -------------------------------------------
rem create_table_freshfishes.bat の呼出し
rem -------------------------------------------
call create_table_freshfishes.bat
pause

rem -------------------------------------------
rem find_freshfishes.bat の呼出し
rem -------------------------------------------
call find_freshfishes.bat
pause

bat フォルダ

initdb_foodshop.bat

psql で SQLファイルを実行してユーザとデータベースを作成するバッチです。psql に接続するユーザ・データベースは初期値の postgres としています。

@echo off
rem -------------------------------------------
rem DB接続パラメータ
rem -------------------------------------------
set hostName=localhost
set portNum=5432
rem >>>>> ユーザ名 >>>>>
set userName=postgres
rem >>>>> データベース名 >>>>>
set databaseName=postgres

rem -------------------------------------------
rem psql の実行
rem -------------------------------------------
psql -h %hostName% -p %portNum% -d %databaseName% -U %userName% -f sql/initdb_foodshop.sql

create_table_freshfishes.bat

psql で SQLファイルを実行して fresh_fishes テーブルを作成するバッチです。psql に接続するユーザ・データベースは先のバッチで設定した foodshopmaster/foodshop としていることに注意が必要です。

@echo off
rem -------------------------------------------
rem DB接続パラメータ
rem -------------------------------------------
set hostName=localhost
set portNum=5432
rem >>>>> ユーザ名 >>>>>
set userName=foodshopmaster
rem >>>>> データベース名 >>>>>
set databaseName=foodshop

rem -------------------------------------------
rem psql の実行
rem -------------------------------------------
psql -h %hostName% -p %portNum% -d %databaseName% -U %userName% -f create_table_freshfishes.sql

find_freshfishes.bat

psql で SQLファイルを実行して上記で作成した fresh_fishes テーブルの内容を表示させるバッチです。

@echo off
rem -------------------------------------------
rem DB接続パラメータ
rem -------------------------------------------
set hostName=localhost
set portNum=5432
rem >>>>> ユーザ名 >>>>>
set userName=foodshopmaster
rem >>>>> データベース名 >>>>>
set databaseName=foodshop

rem -------------------------------------------
rem psql の実行
rem -------------------------------------------
psql -h %hostName% -p %portNum% -d %databaseName% -U %userName% -f find_fresh_fishes.sql

SQL フォルダ

psql で実行する SQLファイルは保存形式を Shift-JIS にします。

initdb_foodshop.sql

/*
 存在したら DB とユーザを削除
*/
DROP DATABASE IF EXISTS foodshop;
DROP USER IF EXISTS foodshopmaster;

/*
 ユーザ foodshopmaster を作成
*/
CREATE USER foodshopmaster WITH PASSWORD 'foodshopmaster' CREATEDB;

/*
 データベース foodshop を作成
*/
CREATE DATABASE foodshop
  WITH OWNER = foodshopmaster
       ENCODING = 'UTF8';

create_table_freshfishes.sql

CREATE TABLE fresh_fishes
(
  fresh_fish_id INTEGER,
  fish_code INTEGER,
  fish_name VARCHAR(30),
  locality VARCHAR(30),
  unit_price INTEGER,
  quantity INTEGER,
  total_amount INTEGER,
  remarks VARCHAR(30),
  PRIMARY KEY(fresh_fish_id)
);

ALTER TABLE fresh_fishes
  OWNER TO foodshopmaster;

INSERT INTO fresh_fishes
    (fresh_fish_id, fish_code, fish_name, locality, unit_price, quantity, total_amount, remarks)
  VALUES
    (001, 101, 'いわし', '岩手産', 80, 5, 400, '今朝水揚げ'),
    (002, 101, 'いわし', '静岡産', 90, 120, 10800, NULL),
    (003, 302, 'かれい', '銚子産', 240, 5, 1200, NULL),
    (004, 103, 'さば', '志摩産', 150, 10, 1500, NULL),
    (005, 501, 'さけ', '北海道産', 120, 10, 1200, NULL),
    (006, 501, 'さけ', '輸入品(ノルウェー産)', 120, 35, 4200, '急速冷凍・自然解凍済み'),
    (007, 704, 'いいだこ', '日間賀島産', 220, 10, 2200, 'Lサイズのみ'),
    (008, 202, 'ほっけ', '青森産', 360, 5, 1800, NULL);

find_fresh_fishes.sql

SELECT * FROM fresh_fishes;

バッチの実行結果

リモートリポジトリ

バッチを試したい場合は、以下のリモートリポジトリをクローンしてください。