PostgreSQLを外部から接続できるように設定

# 概要

実質的に下記記事の続きです。

https://qiita.com/waokitsune/items/3a27b7d0ca75bc06b7c0

1. テストデータベース、テストテーブル、接続用ユーザーの作成。
1. 外部から接続できるように設定。
1. 動作確認。

をやっていきます。

pgAdmin4を使ってGUIで操作していきますが、SQLも載せておきます。

# テストデータベース作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/41dc1334-389d-f8ff-17e4-d35e501c2469.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/5373e9ff-8fff-f90b-2f9c-4bd09abf7ccd.png)

```sql:テストデータベース作成SQL
CREATE DATABASE tester
    WITH
    OWNER = postgres
    ENCODING = 'UTF8'
    CONNECTION LIMIT = -1
    IS_TEMPLATE = False;
```

# テストテーブル作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/fb9a5c90-837f-2fd4-3dde-e42e8bc7c6d8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/243dff5c-6aaf-8550-e2bc-e9e03b0d3d7f.png)

カラム1個作っとく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/0eeb56a1-1b29-53df-2d8c-657f5dd4aed8.png)

```sql:テストテーブル作成SQL
CREATE TABLE public.lycoreco
(
    onamae character varying(20) NOT NULL,
    PRIMARY KEY (onamae)
);

ALTER TABLE IF EXISTS public.lycoreco
    OWNER to postgres;
```

# テストテーブルにレコードインサート

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/b73023c5-05bc-5c55-7989-a89fba088db4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/7c9710e1-e688-3e61-1fee-e106ba51cb37.png)

ダブルクリックで値入力できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/4b3ffc3c-deaf-5057-3e21-6677baa9e582.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/a09d18da-ecbd-7471-8988-dab7bcc26061.png)

```sql:テストテーブルにレコードインサートSQL
INSERT INTO public.lycoreco (
onamae) VALUES (
'たきな'::character varying)
 returning onamae;
```

```sql:テストテーブルにレコードインサートSQL
INSERT INTO public.lycoreco (
onamae) VALUES (
'ちさと'::character varying)
 returning onamae;
```

# 接続ユーザー作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/3844c734-f415-b506-1037-8e75da5aed12.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/5ef93945-b8c6-c93d-e8d8-29b39e2d30d5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/867e3db6-ffae-78e2-7f44-aec0ca35f3e2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/9bec9d3a-3e24-4b48-bea6-4798c7586b17.png)

```sql:接続ユーザー作成SQL
CREATE ROLE iizo WITH
	LOGIN
	NOSUPERUSER
	NOCREATEDB
	NOCREATEROLE
	INHERIT
	NOREPLICATION
	CONNECTION LIMIT -1
	PASSWORD 'xxxxxx';
```

# テーブルの権限設定

作ったユーザーでテーブルのレコードが見れるように。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/505a3a0d-6a7c-3e42-9802-d7711ad1851f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/72757083-69f4-8598-5586-a49156d8fb01.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/7b51bf9e-476f-9212-6d36-23b7891dbd78.png)

```sql:テーブルの権限設定SQL
GRANT SELECT ON TABLE public.lycoreco TO iizo;
```

# postgresql.conf

```:postgresql.confが置いてある場所
C:\Program Files\PostgreSQL\15\data
```

下記のようになっていたので、postgresql.confは編集せず。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/0f781e4c-72de-b9f0-ef1f-49592e673b4f.png)

# pg_hba.conf

```:pg_hba.confが置いてある場所
C:\Program Files\PostgreSQL\15\data
```

下記を追加。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/309a3705-06af-f728-b0a6-1a5a8128f2d4.png)

# PostgreSQLサービス再起動

confファイルの変更を反映させる為。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/1a956f27-3091-f08e-2d83-a481c1058c78.png)

# ファイアウォール設定

PostgreSQLインストール時に自動で設定されない。
手動で受信規則を新規作成する必要あり。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/0d346c7d-e289-2e4a-ecb2-832d226b9b6c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/8661a48c-2f58-5b39-df06-06c9f2b977e9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/334fe937-4894-ad2c-b233-82296cf13802.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/b602209e-593e-531a-ae1b-b97915d34e5a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/b1e15d51-b094-3cdc-a737-45748cd9dfc8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/a8c018bb-c589-f2fd-c2d7-88fe0d688f39.png)

名前は好きな値でOK。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/d03d69a1-dc9f-974f-3254-b19b19a31742.png)

# 動作確認

クライアント側にpgAdmin4をインストール。

以降は **クライアント側のpgAdmin4の操作** 。

接続情報作成。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/f9b74c86-77f6-493f-f126-5760cb794830.png)

接続先名は好きな値でOK。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/4ab86aae-cb53-2a9f-3ae0-a7438e998a5e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/35346f9a-6ff3-8741-1e09-002cb522fd4e.png)

接続できれば下記のようにデータベースの情報が見られる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/64c484db-7710-cce4-c2a1-2f56d54cd8aa.png)

テーブルに対してSELECTできる権限設定をしているので、下記のようにテーブルのレコードを見ることも可。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/dbd22260-d4fa-04ab-f8f4-78b8383bd8a9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/bb9a001b-5f4f-be34-9cfd-11b85e3d449b.png)

# 参考サイトさん

https://www.projectgroup.info/documents/PostgreSQL/POS_000007.html

https://densan-hoshigumi.com/server/postgresql-remote-connection

https://www.postgresql.jp/document/8.3/html/auth-pg-hba-conf.html

# バージョン

Windows 10 Pro 21H2 OSビルド 19045.2364
PostgreSQL 15.1, compiled by Visual C++ build 1914, 64-bit