Windows 10 に Posgtgres12 をインストールしてみる

# 目的
Windows 10 に Posgtgres12 をインストールしてみる

## ファイルのダウンロード
[PostgreSQL Database Download](https://www.enterprisedb.com/downloads/postgres-postgresql-downloads)から
12.3xWindows x86-64 をDLする
インストールを始める前に[ロケール(国際化と地域化)](https://lets.postgresql.jp/documents/technical/text-processing/2)をまず読んで--locale=Cでいいのかな？と事前に確認したほうが良いのかな？と
※ただ10年以上前の記事であること、Ubuntuのデフォで --locale=ja_JP.UTF-8 でインストールされるんだよなぁ・・
※TODO 最近はどうなんだろう？？

## インストール
※基本的なインストールの手順はこちら[PostgreSQLのダウンロード及びインストール](https://www.dbonline.jp/postgresinstall/install/index1.html)
※キャプチャ付きは他にも色々見つかるはず
※インストール先は、好みで
postgresql-12.3-1-windows-x64.exe をダブルクリック
Installation Directory : D:\DB\PostgreSQL\12
Select Components : そのまま
Data Directory : D:\DB\PostgreSQL\12\data
Passwd : 適当に
Port : 5432
Locale : C
Pre Installation Summary を確認
インストール開始
インストール終了後 D:\DB\PostgreSQL\12\bin をPATHに追加する

<pre>
PS > psql -lU postgres
ユーザ postgres のパスワード:
                                        データベース一覧
   名前    |  所有者  | エンコーディング | 照合順序 | Ctype(変換演算子) |     アクセス権限
-----------+----------+------------------+----------+-------------------+-----------------------
 postgres  | postgres | UTF8             | C        | C                 |
 template0 | postgres | UTF8             | C        | C                 | =c/postgres          +
           |          |                  |          |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | C        | C                 | =c/postgres          +
           |          |                  |          |                   | postgres=CTc/postgres
(3 行)
</pre>

psql -l の結果を見ると
initdb --locale=C --encoding=UTF-8
で作成した状態かなと

## 設定ファイルの修正
<pre>
D:\DB\PostgreSQL\12\data\postgresql.conf はデフォルトのまま
listen_addresses = '*'

D:\DB\PostgreSQL\12\data\pg_hba.conf を以下に修正
&#35; IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             192.168.5.0/24          md5
&#35; IPv6 local connections:
host    all             all             ::1/128                md5
&#35; Allow replication connections from localhost, by a user with the
&#35; replication privilege.
host    replication     all             127.0.0.1/32           md5
host    replication     all             ::1/128                md5
</pre>
修正後再起動する

## サンプルDBの作成
[PostgreSQL Sample Database](https://www.postgresqltutorial.com/postgresql-sample-database/)より
PostgreSQL DVD Rental sample databaseをDL後 dvdrental.zip を解凍する

<pre>
PS > createdb --locale=C --encoding=UTF-8 --template=template0 -U postgres dvdrental
パスワード:
PS > psql -lU postgres
ユーザ postgres のパスワード:
                                        データベース一覧
   名前    |  所有者  | エンコーディング | 照合順序 | Ctype(変換演算子) |     アクセス権限
-----------+----------+------------------+----------+-------------------+-----------------------
 dvdrental | postgres | UTF8             | C        | C                 |
 postgres  | postgres | UTF8             | C        | C                 |
 template0 | postgres | UTF8             | C        | C                 | =c/postgres          +
           |          |                  |          |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | C        | C                 | =c/postgres          +
           |          |                  |          |                   | postgres=CTc/postgres
(4 行)

PS > pg_restore -U postgres -d dvdrental dvdrental.tar
パスワード:

PS > psql -U postgres
ユーザ postgres のパスワード:
psql (12.3)
"help"でヘルプを表示します。

postgres=# \c dvdrental
データベース"dvdrental"にユーザ"postgres"として接続しました。
dvdrental=# \d
                       リレーション一覧
 スキーマ |            名前            |     型     |  所有者
----------+----------------------------+------------+----------
 public   | actor                      | テーブル   | postgres
 public   | actor_actor_id_seq         | シーケンス | postgres
 public   | actor_info                 | ビュー     | postgres
 public   | address                    | テーブル   | postgres
 public   | address_address_id_seq     | シーケンス | postgres
 public   | category                   | テーブル   | postgres
～
dvdrental=# \q
PS >
</pre>

## アクセス環境の設定
<pre>
PS > psql -U postgres
ユーザ postgres のパスワード:
psql (12.3)
"help"でヘルプを表示します。

postgres=# create role dvdrental with login password 'passwd';
CREATE ROLE
postgres=# \c dvdrental
データベース"dvdrental"にユーザ"postgres"として接続しました。

postgres=# grant all on all tables in schema public to dvdrental;
GRANT
postgres=# grant all on all sequences in schema public to dvdrental;
GRANT
postgres=# grant all on all functions in schema public to dvdrental;
GRANT
</pre>

## psycopg2のインストール
<pre>
PS > pip3 install psycopg2
</pre>

## python3 からアクセスしてみる

```python
# Windows Add env PYTHONIOENCODING = UTF-8 & restart vscode
# coding:utf-8

import psycopg2

server   = '192.168.5.xx' 
port= '5432'
database = 'dvdrental' 
username = 'dvdrental' 
password = 'demo'

# 接続文字列 - 空白文字がセパレータなのか？？
constr = 'host=' + server + ' port=' + port + ' dbname=' + database + ' user=' + username + ' password=' + password
conn = psycopg2.connect(constr)

cur = conn.cursor()

# 件数を確認する
cur.execute("SELECT COUNT(*) FROM actor")
row = cur.fetchone()

if row:
    print(row)

cur.close()
conn.close()
```

# 参考にしたサイトはこちら
[PostgreSQL Database Download](https://www.enterprisedb.com/downloads/postgres-postgresql-downloads)
[ロケール(国際化と地域化)](https://lets.postgresql.jp/documents/technical/text-processing/2)
[PostgreSQLのダウンロード及びインストール](https://www.dbonline.jp/postgresinstall/install/index1.html)
[PostgreSQL Sample Database](https://www.postgresqltutorial.com/postgresql-sample-database/)
[Ubuntu 20.04 に Posgtgres をインストール後 C# + Npgsql でアクセスしてみる](https://qiita.com/tabizou/items/47f395d7ab3030dd1915)
[Win10 + VsCode + Python3 + psycopg2 から Ubuntu 20.04 + Posgtgres12 にアクセスしてみる](https://qiita.com/tabizou/items/ff2255ec546e2d3e6e2e)