はじめに
普段学習としてPostgreSQLを利用する場合は、クライアントとしてpgAdmin4を利用しています。しかし、psqlコマンドによる操作を実施したことがないため、試そうとしたところ、**"psqlコマンドにパスが通っていない"**ことが発覚しました。その際に行なった対処を備忘録として記しておくこととします。私と同じようにデータベースやPostgreSQLの初学者の方の一助になれば幸いです。
実行環境は下記の通りです。
- MacBook Air (M1, 2020)
- チップ Apple M1
- macOS Big Sur 11.3.1
- PostgreSQL13
##1. パスを通す(Symlinkの作成)
パスが通っていない時の対処というタイトルなのに、いきなり"パスを通す"というのもいかがなものかと思いましたが。この記事をご覧くださっている方は、ご自身で学習を進めらて、ターミナルからpsqlコマンドを打つと、command not found:psqlとなられた方が多いのではないでしょうか。そこで、"command not found エラー"などとググると、**”パスが'通っていないことが原因”と記載されていることが多いかと思います。そして、.bash_profileファイルに'export PATH=・・・'として、'source ~/.bash_profileコマンドで反映すると記されているのではないのでしょうか。
しかしここでは、.bash_profile(シェルがzshなら.zshrc)を編集せずにパスを通すための、Symlinkの作成という方法を実施しました。SymlinkとはSymbolic linkの略のことで、「既にPATHが通っているところに、追加したいコマンドを追加する」**ために利用します。"パスを通すとは何か"、ということについては、アメリカでデータサイエンティストをされていらっしゃる、かめさんという方のブログ記事が非常にわかりやすく書かれていたため、こちらのリンクを記載します。この方の記事ではSublimeというテキストエディタを起動するsublコマンドにパスを通すことをされていたので、psqlも同じやり方でできるのでは、と思い試してみたのがきっかけです。
(かめさんのブログ『【完全解説】Macで「PATHを通す」をちゃんと理解する【初学者必読】』)
前置きが長くなりましたが、ここから実際に行なったことを記載します。
####Step1. PostgreSQLがインストールされている場所を確認
→ /Library/PostgreSQL/13/bin/psql
※インストール時の設定により異なります。私がPostgreSQLをインストールしたときはデフォルトでこの場所でした。
※'13'の部分は利用しているバージョンに合わせて適宜変更してください
####Step2. Symlinkの作成
既に通っているパスを確認します。下記のコマンドをターミナルで実行します。:区切りのものが既にパスが通っているものです。今回は/usr/local/binを指定します。
echo $PATH
-> /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Symlinkを作成するコマンドの書き方は、ln -s <通したいコマンドの絶対パス> <既に通っているパス> です。下記のコマンドをターミナルで実行します。
ln -s /Library/PostgreSQL/13/bin/psql /usr/local/bin/.
##2. 動作確認
さぁ、これで無事パスが通ったはずなので、psqlコマンドを使用してデータベースに接続し、何かクエリを実行してみましょう。ターミナルに"psql"コマンドを打つとパスワードをデータベースのパスワードを問われます。
<失敗例>
psql
-> Password for user koh:
データベースのパスワードを入れても弾かれます。おや?と思いmacのユーザーパスワードを入れてみましたがこれも弾かれます。どうやら単に”psql”コマンドを打つと、macのユーザー名でデータベースに接続することを試みるようです。ちなみに、現時点ではkohというユーザーはPostgreSQLにはなく、デフォルトのpostgresしかありません。すなわちユーザー名をpostgresと指定する必要があるようです。そのためにはpsqlコマンドにオプションをつけます。
<成功例>
psql -h localhost -p 5432 -U postgres -d practice
(psql -h ホスト名 -p ポート番号 -U ロール名 -d データベース名)
※practiceというデータベースは、pgAdmin4を利用してあらかじめ作っておいたものです
-> Password for user postgres:
(パスワードを入力してエンター)
practice=#
パスワードを入力してエンターを押すと、ターミナルの入力部分が、上のように<データベース名>=#という表記に変わります。これで接続が完了です。試しにあらかじめ用意しておいたテーブルに対してクエリを投げてみると、欲しい結果が返ってきます。めでたしめでたし。
参考記事:https://awesomecatsis.com/mac-psql-path/
##3. よく使うコマンド
最後によく利用するであろうコマンドを記載しておきます。ここまで読み進めていただき、ありがとうございました。
####データベース接続前に利用するコマンド
・psql --help:ヘルプ確認
・psql --version:PostgreSQLのバージョン確認
・psql -l:データベース一覧の確認
####psqlコマンドを実行して、データベース接続時に使用するコマンド
- \l:作成済みのデータベース一覧を取得
- \dt:今あるテーブルリストの確認
- \d <Table name>:テーブルのスキーマ詳細の確認
- \q:psqlから抜ける