行き当たりばったり学習～PostgreSQL PGAdmin操作編(RHEL8)～

皆さんこんにちは！

医療業界から IT にチャレンジして2年目のharuです。

前回、pgAdminからの接続設定ができたことで晴れて PosgreSQL の操作ができます！
そこで今回は基本的な操作方法について共有したいと思います。


## ユーザー作成
**1.[ログイン/グループロール]を右クリックし、[作成]→[ログイン/グループロール...]を選択**
![ユーザー1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/301b0c6b-2df0-9887-c3d8-59aafd825fc9.png)
**2.[General]タブの[名前]に任意のユーザー名を入力**
![ユーザー2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/ba788687-af1b-2b5c-c807-b6d55521681d.png)
**3.[権限]タブで付与したい属性を選択して右下の[保存]ボタンをクリック**
![ユーザー3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/a570d396-8066-0e6e-7586-f6581957ad02.png)
**4.作成完了**
ウィンドウの右側にユーザー作成時に裏で入力されたコマンド表示されています。
![ユーザー4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/f8309ffc-0b00-82da-5e6e-91f50214d9bd.png)

## データベースの作成
**1.[データベース]を右クリックし、[作成]→[データベース...]を選択**
![DB0.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/65d342bc-1bce-9779-1c80-41a8a66857c5.png)
**2.[General]タブの[名前]任意のデータベース名を入力**
![DB2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/da428742-15cd-e651-020e-8d8f7dd7d7bb.png)
**3.[定義]タブで文字コード等の任意の設定を選択し、保存をクリック**
![DB3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/e340b6d5-c33e-4eb4-833c-4a472d10f94a.png)
**4.作成完了**
![DB4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/dce1317d-0823-249e-c4e5-f68c40254312.png)

ちなみに作成されたデータベースの文字コード等を確認する方法は以下です。
```
/* シェル上から実行する方法です。*/
[postgres@postgreSQL ~]$ psql -l
                                                          データベース一覧
   名前    |  所有者  | エンコーディング | 照合順序 | Ctype(変換演算子) | ICUロケール | ロケールプロバイダー |     アクセス権限

-----------+----------+------------------+----------+-------------------+-------------+----------------------+----------------------
-
 postgres  | postgres | UTF8             | C        | C                 |             | libc                 |
 template0 | postgres | UTF8             | C        | C                 |             | libc                 | =c/postgres
+
           |          |                  |          |                   |             |                      | postgres=CTc/postgres
 template1 | postgres | UTF8             | C        | C                 |             | libc                 | =c/postgres
+
           |          |                  |          |                   |             |                      | postgres=CTc/postgres
 test_db1  | postgres | UTF8             | C        | C                 |             | libc                 |
(4 行)

――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
/* もしくは以下の方法もあります。*/

[postgres@postgreSQL ~]$ psql test_db1
psql (15.0)
"help"でヘルプを表示します。

test_db1=# \l
                                                          データベース一覧
   名前    |  所有者  | エンコーディング | 照合順序 | Ctype(変換演算子) | ICUロケール | ロケールプロバイダー |     アクセス権限

-----------+----------+------------------+----------+-------------------+-------------+----------------------+----------------------
-
 postgres  | postgres | UTF8             | C        | C                 |             | libc                 |
 template0 | postgres | UTF8             | C        | C                 |             | libc                 | =c/postgres
+
           |          |                  |          |                   |             |                      | postgres=CTc/postgres
 template1 | postgres | UTF8             | C        | C                 |             | libc                 | =c/postgres
+
           |          |                  |          |                   |             |                      | postgres=CTc/postgres
 test_db1  | postgres | UTF8             | C        | C                 |             | libc                 |
(4 行)

――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
/* カレントユーザーのみの文字コードも以下のコマンドで確認できます。 */

test_db1=# select character_set_name FROM information_schema.character_sets;
 character_set_name
--------------------
 UTF8
(1 行)

```

PostgreSQLの文字コード一覧は、以下のマニュアルをご参照ください。
↓
[PostgreSQL 15.0文書-24.3. 文字セットサポート](https://pgsql-jp.github.io/current/html/multibyte.html#CHARSET-TABLE)

## pgAdmin の接続ユーザー変更
**1.[PostgreSQL]右クリックし、[サーバーから切断]を選択**
![再接続.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/10b239c9-cf52-cf42-80b0-ab32b27ff49e.png)

**2.[はい]を選択**
![再接続2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/232d10b5-b8da-8c94-3d93-34b9cd35a442.png)

**3.[Servers]を右クリックし、[登録]→[サーバ]を選択**
![再接続3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/ef1c52ff-6b9f-db4b-f6b6-5a7bfac1889f.png)

**4.情報登録**
サーバー名を入力します。
![再接続4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/f4614310-6855-5092-55aa-ca319bf9bb7d.png)
[ホスト名/アドレス]、[ポート番号]、[管理用データべース]は変更せず、
[ユーザー名]と[パスワード]に先ほど作成したユーザー情報を入力します。
![再接続5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/dfe73104-ce3c-67fe-75d3-a935fe6f2a0a.png)
ちなみにユーザーパスワードを設定していない場合は、あらかじめ以下の方法で設定可能です。
```
test_db1=# alter role test_user1 with password 'test_user1';
ALTER ROLE
```
入力し終わったら保存をクリックします。

**5.接続完了**
先ほど作成したデータベースが確認できます。
![再接続6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/49d56f6f-7435-5be2-d059-fa68f6ff7627.png)

## テーブル作成
**1.[ツール]タブの[クエリツール]を選択**
![テーブル作成1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/56f19ecb-53ad-f8f3-072f-bc2a07ccfcbc.png)
コンソール画面が表示されました。
![テーブル作成2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/7c9e9049-d401-5c9b-678f-770bac8d7b72.png)

**2.テーブル作成コマンドを入力し、▶ボタンで実行**
![テーブル作成3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/5eecb062-98d7-d63b-895f-0d453b48a18e.png)
あれ、権限のエラーが出ていますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/f6477310-0152-9831-c9a0-8ad4529aef4d.png)
ユーザー:test_user1 どのような権限を持っているのか確認してみましょう。
```
test_db1=# \du
                                                ロール一覧
  ロール名  |                                     属性                                     | 所属グループ
------------+------------------------------------------------------------------------------+--------------
 postgres   | スーパーユーザー, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {}
 test_user1 | ロール作成可, DB作成可, レプリケーション可                                   | {}
```
権限が足りないみたいです。
せっかくなので、test_user1 君に最高権力である SUPERUSER を付与してみます。
```
test_db1=# alter role test_user1 with superuser;
ALTER ROLE
```
CREATE 分を再実行してみます。
![テーブル作成5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/c41dd309-43ae-8e8b-0872-87a8e6bddd0b.png)
成功したようです。

[参考]
[SQLサンプルコード (PostgreSQLで動作確認)](https://qiita.com/rubytomato@github/items/54a9df78f87f0e2491ec)
[PostgreSQLの権限系操作まとめ](https://katsusand.dev/posts/postgresql-auth/)

## テーブル参照
何ら特徴の無いSQLです。
先ほどテーブルが正常に作成されたことが確認できます。

![参照1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/8d6efc64-860d-ff0e-5adc-c9a9b97b0d09.png)

ちなみにコマンドラインでは以下のように味気ないです。
```
test_db1=# create table test_ta (id integer, name varchar(10));
CREATE TABLE
```
pgAdmin だと GUI でイメージし易くていいですね。

## データ挿入
次はあらかじめ作っておいた test_ta2 にデータを入れます。
```
test_db1=# \dt
              リレーション一覧
 スキーマ |   名前   |  タイプ  |   所有者
----------+----------+----------+------------
 public   | test_ta  | テーブル | postgres
 public   | test_ta2 | テーブル | test_user1 ★
(2 行)
```
![参照2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/9df95f24-9894-335e-be40-80913b1d54eb.png)
できました。
![参照3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/6f71b28d-17c3-7b55-9c31-74659fbdb3ab.png)

## データ更新
![削除.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/bf4ff0d9-5e87-ae69-b436-ce04cab228af.png)
![更新.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/e764cbc0-65c8-9887-c3be-814e19c2e19f.png)

## データ削除
![削除100.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/a694a54a-ac50-7aa6-9b1e-b88c87549165.png)
![削除200.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/882763e2-594b-250d-d5dc-d91600844479.png)

簡単なコマンドなので最後の方はコメント無しですが、、、
ざっくりと基本操作をしてみました。

ではまた！