Ubuntu 22.04 に PostgreSQL 14をインストール

## PostgreSQL 14のインストール Ubuntu 22.04編

### PostgreSQL 14のインストール
以下のコマンドでインストール

```
$ sudo apt install postgresql postgresql-contrib
```

systemctl コマンドで、PostgreSQL サービスが動いているか確認
```
$ systemctl status postgresql.service
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Sun 2024-03-24 21:39:22 JST; 8min ago
    Process: 8372 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 8372 (code=exited, status=0/SUCCESS)
        CPU: 2ms

 3月 24 21:39:22 taka-X202E systemd[1]: Starting PostgreSQL RDBMS...
 3月 24 21:39:22 taka-X202E systemd[1]: Finished PostgreSQL RDBMS.
```

### postgres ユーザーのパスワードの変更
インストールするとデータベースの管理ユーザーとして、ユーザー postgresが作成されています。postgres ユーザーを利用できるようにするため、ユーザー postgresのパスワードを変更します。

```
$ sudo passwd postgres
```

### PostgreSQL 14の動作確認
インストールが完了すると他のOSではインストール後に行うデータベースクラスタの作成が、Ubuntu版の場合はインストール時点で作成されています。

postgresql ユーザーになり、psql コマンドで データベースに接続します。

su コマンドで一時的に postgresql になります。 
```
$ su - postgres
パスワード: 
postgres@:~$
```

psql コマンドで データベースに接続します。
```
postgres@:~$ psql 
psql (14.11 (Ubuntu 14.11-0ubuntu0.22.04.1))
Type "help" for help.
postgres=#
```

SHOW コマンドで data_directory パラメータの値を確認。
```
postgres=# SHOW data_directory;
       data_directory        
-----------------------------
 /var/lib/postgresql/14/main
(1 row)
```

\l コマンドでデータベースの一覧を表示。
```
postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
 template0 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(3 rows)

```

### もう一度、データベースクラスタの動作確認
Ubuntu版のPostgreSQLは、複数のデータベースクラスタが動作するように各種コマンドが設計されているようです。

先程、systemctl で指定した　postgresql.service は、複数のデータベースクラスタを管理するように設計されていて、個々のデータベースクラスタの状態を表示してはくれないようです。インストール時に作成されたデータベースクラスタの起動状態を表示する場合は、postgresql@14-main.service と指定するようです。

```
postgres@:~$ systemctl status postgresql@14-main.service
● postgresql@14-main.service - PostgreSQL Cluster 14-main
     Loaded: loaded (/lib/systemd/system/postgresql@.service; enabled-runtime; vendor preset: enabled)
     Active: active (running) since Sun 2024-04-07 16:57:06 JST; 2 days ago
   Main PID: 871 (postgres)
      Tasks: 7 (limit: 4458)
     Memory: 11.6M
        CPU: 17.661s
     CGroup: /system.slice/system-postgresql.slice/postgresql@14-main.service
             ├─871 /usr/lib/postgresql/14/bin/postgres -D /var/lib/postgresql/14/main -c config_file=/etc/postgresql/14/main/postgresql.conf
             ├─898 "postgres: 14/main: checkpointer " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" >
             ├─899 "postgres: 14/main: background writer " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">
             ├─900 "postgres: 14/main: walwriter " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" >
             ├─901 "postgres: 14/main: autovacuum launcher " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "">
             ├─903 "postgres: 14/main: stats collector " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" >
             └─904 "postgres: 14/main: logical replication launcher " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "">
```
### PL/Tcl, PL/Python3 のインストール
PL/Tclを使いたい場合、標準パッケージに格納されていないので、追加にインストールします。以下のコマンドでインストールできるはずだったのですが、

```
$ sudo apt install postgresql-pltcl-14
```

実際に試したところ、以下のエラーとなりました
```
$ sudo apt install postgresql-pltcl-14
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
E: パッケージ postgresql-pltcl-14 が見つかりません
```

そのため、[Ubuntuの公式リポジトリ](http://archive.ubuntu.com)の [postgresql14関連が格納されている場所](http://archive.ubuntu.com/ubuntu/pool/main/p/postgresql-14/)から[postgresql-pltcl-14_14.13-0ubuntu0.22.04.1_amd64.deb](http://archive.ubuntu.com/ubuntu/pool/main/p/postgresql-14/postgresql-pltcl-14_14.13-0ubuntu0.22.04.1_amd64.deb)をダウンロードして、ダウンロードしたファイルをインストール

```
# sudo apt install ./postgresql-pltcl-14_14.13-0ubuntu0.22.04.1_amd64.deb 
```

同様にPL/Python3も [postgresql-plpython3-14_14.13-0ubuntu0.22.04.1_amd64.deb](http://archive.ubuntu.com/ubuntu/pool/main/p/postgresql-14/postgresql-plpython3-14_14.13-0ubuntu0.22.04.1_amd64.deb)をダウンロードして、ダウンロードしたファイルをインストール

```
# sudo apt install ./postgresql-plpython3-14_14.13-0ubuntu0.22.04.1_amd64.deb 
```

PL/Tclを及び、PL/Python3を有効化するために plsql から以下のSQLコマンドを実施
```
postgres=# CREATE EXTENSION pltcl;
postgres=# CREATE EXTENSION plpython3u;
```



### 参考情報
* [PostgreSQL を Ubuntu に普通にインストール](https://qiita.com/nanbuwks/items/846cf3536a82a2798555)
* [Ubuntu で PostgreSQL を使ってみよう(続編)](https://lets.postgresql.jp/documents/tutorial/ubuntu/4)
* [PostgreSQL でデータベースクラスタの場所を調べるには](https://qiita.com/tom-sato/items/b3842d7f0ade1e8302a5)