1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQLのログインについて

Posted at

環境

Utuntu22.4
PostgreSQL17

内容

PostgreSQLにログインするのに、一番手っ取り早い方法はこれになります。

$sudo su postgres
$psql

ただ呪文のように覚えていても意味がないため、このコマンドについて少し考察してみよう。

疑問その1

ユーザーを切り替えるときに、root権限で切り替えるのはなぜでしょうか。su postgresだけではユーザーを切り替えることはできません。あくまでもデフォルトの状態ではという条件付きではありますが。

PostgreSQLをインストールすると、postgresユーザーが自動で追加されます。しかし、このときにパスワードは設定されていません。/etc/shadowを見ると、設定されているように見えますが、実際には設定されていません。自分で変更すればいいのですが、デフォルトの状態であれば、postgresユーザーのパスワードを求められて、そのままEnterを押してもログインはできません。パスワードが設定されていないということは、空白のパスワードが設定されているという意味合いとはまた異なるからです。

疑問その2

postgreユーザーであればPostgreSQLにログインするときに、オプションをすべて省略してpsqlコマンドだけでログインできるのはなぜでしょうか。
psqlだけでログインするには、少なくてもデータベース名とユーザーを指定する必要があります。

データベース名を省略すると、OSにログインしているユーザー名と同じデータベース名で接続しようとします。また、ユーザー名を省略すると、OSにログインしているユーザー名と同じユーザー名で接続しようとします。

つまり、postgreユーザーでログインしている場合、psqlコマンドだけで、つぎのコマンドを入力したことと同じことになるのです。

>psql -d postgres -U postgres

疑問その3

postgresユーザーに切り替えることなく、別のユーザーでOSにログインしている状態で、つぎのコマンドでPostgreSQLにログインできないのはなぜでしょうか。

>psql -U postgres -d postgres

その答えは、pg_hba.confを見るとわかります。デフォルトの状態ではpostgresユーザーの認証はpeer認証になっています。peer認証とは、OSログインしているユーザーと同じユーザー名でPostgreSQLにログインしないと認証が通らないようにする仕組みのことです。

これを解決させるには、pg_haba.confでmd5認証(一例です)に変更するか、postgresql以外のユーザーをPostgreSQLで作成するかになります。

例えば、vagrantユーザーでOSにログインしている場合、PostgreSQLでOSと同じvagrantユーザーを追加してやれば、つぎのコマンドでPostgreSQLにログインすることができます。このときはpeer認証を行っています。

当然ではありますが、デフォルトで用意されているpostgresデータベースが存在していなければログインができなくなります。開発用で新しいデータベースを作成しても、postgresデータベースだけは削除しないで残しておいた方が何かと便利だということです。

>psql -d postgres -U vagrant

繰り返しになりますが、ログインしているユーザーと同じ名前のデータベースが存在していれば、つぎのコマンドだけでログインができます。postgresどうしだけでなく、hogoどうしであっても同じようにログインができます。pg_hba.confをみると、デフォルトではallユーザーもまた、peer認証になっているからです。

>psql
1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?