LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-11-01

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


パスを確認してみる。

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とは日記

で、「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」でも、エラーが発生。
こちらも、問題集完了後、戻ってやってみる。
以下、エラー箇所記録。

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  (←エラー)

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0