はじめに
エンジニアになり、LinuxやPostgreSQLに触れることになりましたので、記録として学んだことを残そうと思います。
環境は、CentOS7.2です。PostgreSQLを使用します。
postgresユーザーとpsqlコマンド
DBを操作するためには、psqlコマンドを使用します。
psqlコマンドとは、ターミナルからDBを操作するためのコマンドです。
しかしどのユーザーでもこのコマンドを使用できるわけではありません。(設定を変更すれば可能なようです。)
DBを操作する際は、rootユーザーや一般ユーザーではなく、postgresユーザーに切り替えて(あるいはpsqlコマンドが使用できるユーザーに切り替えて)psqkコマンドを実行し、DBを操作することになります。
そのユーザーの切り替え時に使用するのがsuコマンドとsudoコマンドになります。
suコマンドについて
suコマンドはsubstitute userとか、super userとか、switch userとか。調べましたが何の略なのか分かりませんでした。
ユーザーを切り替えるという意味です。
su - postgres
postgresユーザーに切り替えています。
ハイフンの有無については、
「-」の有無に注意してください。「-」があると、直接ログインしたときと同様に環境が初期化されます。
つまり、カレントディレクトリは新しいユーザーのホームディレクトリとなり、環境変数もすべて初期化されます。
「-」がなければ、現在の環境をそのままにしてユーザーだけを切り替えます。(中島能和「LinuC教科書 LinuCレベル1 Version10.0対応」p425)
ということのようです。
su -
パスワード:
ユーザー名を省略すると、rootユーザーへの切り替えが行われ、パスワードを求められます。
su - postgres
#ユーザーをpostgresへ切り替えて
psql test
#psqlコマンドでtestサーバーへアクセスします
¥d
#¥マーク(あるいはバックスラッシュ)dとすることで、testサーバー内にある、テーブルを一覧表示できます
¥d table
#また、¥dの後ろにテーブル名を入力することで、そのテーブルにあるカラムを一覧表示できます
suコマンドでpostgresユーザーに切り替えた後、psqlコマンドで対象のサーバーを指定したら、
SELECT~等のSQL文を書いていくことになります。
ユーザーを切り替えるとそのままですので、ctrl + d で元のユーザーに戻ることができます。
sudoコマンドについて
sudoコマンドの場合ですと、sudoから続けて一行でSQL文まで書くことができます。
sudo -u postgres psql table -c "SELECT~";
sudoコマンドからuオプションでpostgresユーザー切り替え、psqlコマンドからtableというDBを指定し、
続けてコマンドを打つのでcオプション、ダブルクォーテーションで囲んでSQL文が入力できます。
sudo -u postgres psql table -f /var/test.sql
また、SQL文をファイルにまとめている場合、cオプションをfオプションに変えることで実行できます。
上記の場合ですと、/var 配下にあるtest.sqlファイルを実行しています。
ただ、sudoコマンドは毎回ユーザーを切り替えてSQL文を書かなくてはならないので、
suコマンドで一度切り替えてしまった方が、何回もSQL文を書く場合には良いかもしれません。
#まとめ
postgresユーザーに切り替えるための、suとsudoの違いについて記載しました。
もっと奥が深いかと思いますが、これから学習していきます。