#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サーバの初期化、起動、停止、制御。 | ドキュメント |
stop | stopモード。指定されたデータディレクトリで稼働しているサーバを停止。 | 同上 |
-m | -mオプション。3つの異なる停止方式を選択できる。(3つ=Smart(デフォルト)/Fast/Immediate) | 同上 |
fast | Fastモード。クライアントが切断するまで待たず、かつ、実行中のオンラインバックアップを終了させる。 全ての実行中のトランザクションをロールバックし、クライアントとの接続を強制的に切断した後、サーバを停止する。 | 同上 |
tar | Linuxコマンド。アーカイブファイルを作成/展開する。 | @IT |
cvf | オプション。c=(create)アーカイブを新規に作成。 v=(verbose)アーカイブ結果を表示する。 f=(file=ARCHIVE)アーカイブファイル名を指定する。 |
エンジニアの入り口 |
backup.tar | バックアップファイル名? | 無 |
$PGDATA | 環境変数 | - |
#3.エラー発生
上記の教科書のコードを実行したら、下記のようなエラーが発生。
postgres@MyComputer:~$ pg_ctl stop -m fast (#意味:PostgreSQLサーバをFastモードで停止せよ)
pg_ctl: command not found
↓
パスを確認してみる。
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とは日記
##で、「pg_ctl」は何処にあるの?
PGDATA
デフォルトのデータディレクトリの場所です。
ほとんどのpg_ctlのモードはデータディレクトリの位置を知っている必要があるため、PGDATAが設定されていないときは-Dオプションが必須です。
(引用元:PostgreSQL 11.5文書)
これがヒントな気がする・・・。
もしかして、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」でも、エラーが発生。
こちらも、問題集完了後、戻ってやってみる。
以下、エラー箇所記録。
(標準教科書-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:~$ (←反応なし)
(標準教科書-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 (←エラー)
#参考