◆未解決◆【PostgreSQL】$ pg_ctl stop -m fast →エラー（pg_ctl: command not found）

#1.未解決事項
・現状＝pg_ctlコマンドが使えない。
・原因＝おそらく、パスが通っていないことが原因。
・パスを通す方法がわからない。

#2.やりたいこと
tarコマンドでPostgreSQLの関連ファイルが格納されているデータディレクトリ $PGDATA 以下をアーカイブしたい。

↓教科書のコード。この流れを実行したい。

```
[postgres@ localhost ~]$ pg_ctl stop -m fast 
サーバ停止処理の完了を待っています....完了
サーバは停止しました
[postgres@ localhost ~]$ tar cvf backup.tar $PGDATA
（・・・返答がつづく）
（引用：『オープンソースデータベース標準教科書 -PostgreSQL-（Ver.2.0.0）』 9.2ファイルのコピー）
```
|||参考URL|
|:--|:--|:--|
|pg_ctl|PostgreSQLサーバの初期化、起動、停止、制御。|[ドキュメント](https://www.postgresql.jp/document/9.1/html/app-pg-ctl.html)| 
|stop|stopモード。指定されたデータディレクトリで稼働しているサーバを停止。|同上| 
|-m|-mオプション。3つの異なる停止方式を選択できる。（3つ＝Smart(デフォルト)/Fast/Immediate）|同上| 
|fast|Fastモード。クライアントが切断するまで待たず、かつ、実行中のオンラインバックアップを終了させる。 全ての実行中のトランザクションをロールバックし、クライアントとの接続を強制的に切断した後、サーバを停止する。|同上|  
|tar|Linuxコマンド。アーカイブファイルを作成／展開する。|[@IT](https://atmarkit.itmedia.co.jp/ait/articles/1608/15/news015.html#:~:text=%E3%80%8Ctar%E3%80%8D%E3%81%AF%E3%80%81%E8%A4%87%E6%95%B0%E3%81%AE,%E4%BD%9C%E6%88%90%EF%BC%8F%E5%B1%95%E9%96%8B%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%81%99%E3%80%82)| 
|cvf|オプション。c=(create)アーカイブを新規に作成。<br>v=(verbose)アーカイブ結果を表示する。<br>f=(file=ARCHIVE)アーカイブファイル名を指定する。|[エンジニアの入り口](https://eng-entrance.com/linux-command-tar)| 
|backup.tar|バックアップファイル名？|無|  
|$PGDATA|環境変数|-| 

#3.エラー発生

上記の教科書のコードを実行したら、下記のようなエラーが発生。

```VSCode
postgres@MyComputer:~$ pg_ctl stop -m fast　（#意味：PostgreSQLサーバをFastモードで停止せよ）
pg_ctl: command not found
```
↓
パスを確認してみる。

```:VSCode
postgres@MyComputer:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
```
参考：【PATHを通す】を理解する　→　https://zenn.dev/b1essk/articles/0785ea4f88d9ae

##◆bin、sbinって何？
これまでもbin/bashみたいな記述に何度も出会ってきた。どういう意味だろう？

|bin/bash|bashの本体ファイル|
|:--|:--|
|bash|「bin」ディレクトリの中の「bash」ファイル。|
|/bin|「/usr/bin」のシンボリックリンク(＝Winのショートカットみたいなもの）|
|sbin|/usr/binが一般ユーザのコマンドに対して、/usr/sbinは管理コマンド（目安）|

参考：
「/bin/bashとは」　→　https://wa3.i-3-i.info/word14414.html
「/bin, /usr/bin, /usr/sbin, /usr/local/bin の違いとは？」→　https://qiita.com/valzer0/items/67a4c8bf2b1be0fc825a
「/usr/binと/usr/sbinの違い」→　[Linuxとは日記](https://kouritool.com/what-linux/binusrsbin%E3%81%AA%E3%81%A9%E3%80%81%E3%83%91%E3%82%B9%E3%81%AB%E3%82%88%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E9%81%95%E3%81%84/)

##で、「pg_ctl」は何処にあるの？

>PGDATA
デフォルトのデータディレクトリの場所です。
ほとんどのpg_ctlのモードはデータディレクトリの位置を知っている必要があるため、PGDATAが設定されていないときは-Dオプションが必須です。
（引用元：[PostgreSQL 11.5文書](https://www.postgresql.jp/document/11/html/app-pg-ctl.html)）

これがヒントな気がする・・・。
もしかして、PGDATAが設定されていないんじゃないか？
どうやってPGDATAの設定がされているorいないを調べれば良いんだろう？

>1.2 pg_ctl がない
PostgreSQLのマニュアルに よれば、PostgreSQLサーバの起動や終了は pg_ctl プログラムを使って行うように書かれています。 しかし、UbuntuのPostgreSQL パッケージをインストールしても、pg_ctlが見あたりません。 (これも別の場所にインストールしてあります)。
（中略）
initdb と pg_ctl だけは、別なツールを使わなければなりませんが、それ以外のコマンドは、全て元のPostgreSQLと同じ名前になっています。
（引用元：https://lets.postgresql.jp/documents/tutorial/ubuntu/4）

#4.・・・迷走してきた。
私の環境ではエラーになるけれど、
エラーにならなかったと仮定して、教科書の残り（以下3つ）を進めようと思う。
・9.2　ファイルのコピー　←now
・9.3 pg_dumpコマンドによるバックアップ
・9.4 pg_restore によるリストア

おそらくこの「9.3」「9.4」も、パスが原因のエラーが起きる気がする。
が、とにかく今はざくっとこの標準教科書を終わらせて、OSSDB-Silver問題集に進もうと思う。
問題集を一通り終えたら、またここに戻る！

#5.おまけ
案の定、「9.3」「9.4」でも、エラーが発生。
こちらも、問題集完了後、戻ってやってみる。
以下、エラー箇所記録。

```:VSCode
（標準教科書－9.3 pg_dumpコマンドによるバックアップ）
postgres@MyComputer:~$ mkdir backup.d
mkdir: cannot create directory ‘backup.d’: File exists
postgres@MyComputer:~$ ls -l | grep backup.d
drwxrwxr-x 2 postgres postgres  4096 Oct 31 05:21 backup.d
postgres@MyComputer:~$ pg dump -Fd -f backup.d ossdb
pg: command not found (←エラー）

postgres@MyComputer:~$ ls backup.d
postgres@MyComputer:~$ 　　　　　　（←反応なし）
```

```:VSCode
（標準教科書－9.4 pg_restore によるリストア）
postgres@MyComputer:~$ dropdb ossdb
postgres@MyComputer:~$ 　　　　　　（←反応なし）

postgres@MyComputer:~$ psql ossdb
psql: error: FATAL:  database "ossdb" does not exist （←ここはこれでOK！教科書どおり。）
postgres@MyComputer:~$ pg restore -d postgres -c -C backup.d
pg: command not found　　（←エラー）
```


#参考

http://trytomake.site/windows/postgresql-pg-ctl-classpath/

https://note.com/code82/n/n6e8895536df1

https://www.postgresql.jp/docs/9.2/runtime-config-file-locations.html

https://qiita.com/domodomodomo/items/12fe7555513de6b078db

https://note.com/sho_tokyo/n/n4c44c17211cc