WindowsでのPostgreSQL初期設定

PostgreSQLを利用する機会があったので、個人の備忘録として記事を作成しました。

# インストール方法

## バージョンについて

[こちら](https://www.enterprisedb.com/downloads/postgres-postgresql-downloads)のページでpostgresql-12.1-1-windows-x64.exeをダウンロード

## 下記の設定でインストールを行った


```
Installation Directory: D:\PostgreSQL\12
Server Installation Directory: D:\PostgreSQL\12
Data Directory: E:\PostgreSQL\12\data
Database Port: 5432
Database Superuser: postgres
Operating System Account: NT AUTHORITY\NetworkService
Database Service: postgresql-x64-12
Command Line Tools Installation Directory: D:\PostgreSQL\12
pgAdmin4 Installation Directory: D:\PostgreSQL\12\pgAdmin 4
Stack Builder Installation Directory: D:\PostgreSQL\12
```

# 環境変数にパスを追加

環境変数の「Path」にPostgreSQLの「bin」フォルダのパスを設定します。
（上記の`Server Installation Directory` のフォルダの中にbinというフォルダが存在します）

## 設定できているかの確認

コマンドプロンプトを実行して、下記のコマンドを実行し、バージョン情報が返ってくると正しく設定できています。

```sh:確認コマンド
psql --version
```

# PostgreSQLサービスの停止と開始

Windowsにインストールした場合は既にサービスに追加されているため、スタートメニューで「サービス」と検索し、サービスのウィンドウを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401878/cb255acb-a337-337c-f350-df94e53cd4a5.png)

# データベースの作成

```sh:データベースの作成
postgres=# create database slackdb;
CREATE DATABASE
```

`postgres=# \l` を利用して、データベースの一覧を確認してみましょう。

```sh:作成後の確認結果
postgres=# \l
                                             データベース一覧
   名前    |  所有者  | エンコーディング |      照合順序      | Ctype(変換演算子)  |     アクセス権限
-----------+----------+------------------+--------------------+--------------------+-----------------------
 postgres  | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 |
 slackdb   | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 |
 template0 | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres          +
           |          |                  |                    |                    | postgres=CTc/postgres
 template1 | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres          +
           |          |                  |                    |                    | postgres=CTc/postgres
(4 行)
```

# スキーマの作成

`template1=# \c slackdb` で確認したいデータベースに接続します。

`slackdb=# \dn` でスキーマの一覧を確認します。

```sh:スキーマの確認
template1=# \c slackdb
データベース"slackdb"にユーザ"postgres"として接続しました。
slackdb=# \dn
   スキーマ一覧
  名前  |  所有者
--------+----------
 public | postgres
(1 行)
```

初期設定では、「public」のみしか存在していないため、今回は、「private_information」を作成したいと思います。
`slackdb=# create schema private_information;` でスキーマの作成を行います。

```sh:スキーマの作成
slackdb=# create schema private_information;
CREATE SCHEMA
slackdb=# \dn
          スキーマ一覧
        名前         |  所有者
---------------------+----------
 private_information | postgres
 public              | postgres
(2 行)
```

正しく作成されたことが確認できます。

# データベースを特定のパソコンに公開する場合

## 閲覧する側のIPアドレスを確認する

下記のコマンドで閲覧したいパソコンのIPアドレスを確認し伝えてもらいます。

```sh:IPアドレスの確認
ipconfig
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401878/61499aa3-932b-94a0-98c7-b7ab9be53d80.png)

## 設定ファイルを変更する
PostgreSQLのダウンロードした場所に`data`フォルダ内の`pg_hba.conf`ファイルの内容を変更します。
一番下に下記の設定を追加します。（Xの部分を上記の手順で確認したIPアドレスに置き換えてください。

```conf:pg_hba.conf
host    all             all             XXX.XX.XXX.XXX/32            md5
```