【PostgresSQL】WindowsPCのSQLサーバーの立て方


## インストール

### 1. PostgresSQLのインストール
以下のサイトからPostgresSQLのインストーラーをダウンロードして、実行する。

https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

PostgresSQLコマンドを使用するため、”システム環境変数の設定”から変更して、下記のフォルダへパスを通す。

```
C:\Program Files\PostgreSQL\15\bin
```

### 2. Openjdkのダウンロード
以下のサイトから、任意のOpenJDKをダウンロードする。(例 JDK 19 etc)

https://jdk.java.net/

任意のフォルダに置く。binの中にjava.exeなどがあり、merabase.jarを起動するときに使う。

```
C:\Program Files\jdk-19.0.1\bin
```

### 3. Metabaseのダウンロード
以下のサイトから、任意のMetabase.jarをダウンロードする。

https://www.metabase.com/start/oss/jar

任意のフォルダに置く。
```
"C:\Users\username\Documents\metabase\metabase.jar"
```

### 4. PHPのインストール
下記からPHPを任意のフォルダにダウンロードする。

https://www.php.net/downloads

```
C:\Program Files\php-8.1.13-nts-Win32-vs16-x64\php-cgi.exe
```

C:\Program Files\php-8.1.13-nts-Win32-vs16-x64\php-cgi.exe
フォルダの直下の以下のファイルのどちらかをコピーして、php.iniを作る。

```
php.ini-development
or
php.ini-production
```

php.iniの以下の部分をコメントアウトか無ければ追記する。

```
extension=php_pgsql.dll
```

### 5. IISを有効にする

コントロールパネル -> プログラム -> プログラムと機能 -> Windows の機能の有効化または無効化から、下記にチェックを入れて、インストールする。

 - Windows プロセスアクティブ化サービス
 - インターネットインフォメーションサービス
 - アプリケーション開発機能 - いくつかのアイテム

![WIN有効か.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483556/e7eeb13d-f9ee-48b1-796c-340e16f4e9a0.png)

正常にインストールされれば、IIS(インターネットインフォメーションサービス)マネージャーが使用できる。Windowsマークの検索から、IISを検索して、起動する。

### 6. IISマネージャーで外部からの信号をGETするアプリを設定する
インターネットインフォメーショサービス(IIS)マネージャーで以下のアプリケーションプールを追加する。

```
アプリケーションプールの名前 = PhpAppPool
```

![IIS設定1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483556/f44cd5ed-4684-6bce-756f-827e9fbd7d87.png)


CGI or FastCGIのアプリケーションを追加で、以下のパスを追加する。

```
C:\Program Files\php-8.1.13-nts-Win32-vs16-x64\php-cgi.exe
```

![IIS設定２.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483556/77496e4c-8c8d-d968-f616-0553750cf1e9.png)


サイトのDefault Web Siteを右クリックし、アプリケーションの追加から、Webアプリケーションのエイリアスとパスを追加する。

```
エイリアス = php
物理パス = C:\php
```

![IIS設定３.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483556/a0d7cf77-e8ac-26eb-e298-a8fcadabef67.png)

:::note warn
補足
ここで設定したフォルダに.phpプログラムを追加することで、複数のサーバープログラムを構成できます。
:::

### 7. ポート80と5432を開く。
設定 -> ネットワークとインターネット -> Windows ファイアウォール -> 詳細設定からデータサーバーで使用するポート80と5432をファイアーウォールから開く。

![WINポート1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483556/808b4651-fd2c-c34c-9eff-8eec3e8a1c8a.png)

作成した規則をクリックして、ポートが受信した際にデータを受け取るプログラムを登録する。

:::note warn
補足
ポートはデフォルトで開いていることもあるため、設定しなくても問題なく接続されることもあります。
:::

### 8. webアプリケーションのフォルダにIISユーザー権限を付与する。

下記のパスで、フォルダ名 -> 右クリック -> プロパティを開く。
セキュリティのタブを押し、編集を押す。
追加で、IUSRとIIS_IUSRSを追加する。

```
物理パス = C:\php
```

![IIS_セキュリティ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483556/fe55f705-18c1-095a-03ff-5b1e7f50f699.png)

### 8.1 MicroSoft C++のインストール
PHPの実行にライブラリが足りない場合がある。
下記コマンドで正常にphp versionが表示されたらOK。
```
php -v
```
そうでない場合は、下記手順によりMicrosoft C++をインストールする
1. 下記を開く
    https://visualstudio.microsoft.com/ja/downloads/
1. 下部の「その他の Tools、Frameworks、そして Redistributables」を開く
1. Microsoft Visual C++ Redistributable for Visual Studio 2022をダウンロードする
    ![postgresSQL11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483556/cf4999b5-bd14-707f-dabf-95496bf2996b.png)
1. ダウンロードファイルを実行して、Microsoft C++をインストールする


### 9. 接続テスト
テスト用phpファイルをC:\php\post.phpへ置く。

```php
<?php
 
    $body = file_get_contents('php://input');
    $json = json_decode($body, true);

    $column1 = $json['column1'];
    $column2 = $json['column2'];
    $column3 = $json['column3'];

    $conn = "host=localhost dbname=postgres user=postgres password=1";
    $link = pg_connect($conn);
    if (!$link) {
      die('接続失敗'.pg_last_error());
    }

    $sql = "INSERT INTO ble_data (column1, column2, column3) VALUES ('".$column1."',".$column2.",".$column3.")";
    $result_flag = pg_query($sql);

    if (!$result_flag) {
      die('INSERTクエリー失敗'.pg_last_error());
    }      
    exit();

?>

```

下記コマンドを実行し、自身のパソコンで登録したwebアプリケーションpost.phpが正常に作動するか確認する。

```
curl -XPOST http://192.168.202.53/php/post.php -H "Content-Type:application/json" -d "{\"column1\":\"222\",\"column2\":111,\"column3\":333}"
```

phpのエラーはphp.iniに設定されているerror_logのファイルでも参照できる。
また、変数の中身など確認する場合は、以下のようにすることもできる。

```php
define("Logfile","./log.txt");
$fh = fopen(Logfile, "a");
fwrite($fh, 変数など);
fclose($fh);
```

## Postgresの設定

起動しているかどうかは、タスクマネージャーのサービスでPostgressqlを探せばわかる。PostgresSQLマネージメントツールであるPgadmin4でPostgresSQLサーバーのテーブルを作成する。以下の階層のTablesにデータを受け取るときに必要なテーブルやマスターテーブルを作成する。Viewsには、Tablesにあるデータを用いて、SQL文で処理を行い、データテーブルを作成する。

```
Servers/
　└  PostgresSQL 15/
          └ Database
                └ postgres
                     └ Schemas
                          ├ Tables 
                          └ Views
```

## metabaseの起動
下記batを実行するとmetabaseが起動し、localhost:3030にmetabseが立ち上がる。

```bat:start.bat
cd "C:\Program Files\jdk-19.0.1\bin"
java -jar "C:\Users\keita_miyaoka\Documents\metabase\metabase.jar"
```
### metabaseのパスワードのリセット方法

```terminal
java -jar metabase.jar reset-password email@example.com
>> 成功[[1_7177fd86-a9b8-42ea-a46b-0ea297a83b18]]

下記にブラウザでアクセス
http://localhost:3000/auth/reset_password/1_7177fd86-a9b8-42ea-a46b-0ea297a83b18
```


## まとめ
今回は、Windows PCへPostgresSQLサーバーを立てる方法を紹介した。