PostgreSQL

トランザクション分離レベル

pojiro=> show transaction_isolation;
 transaction_isolation
-----------------------
 read committed
(1 row)
SET TRANSACTION ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }

see. https://www.postgresql.org/docs/12/sql-set-transaction.html

Peer authentication failed

Unix ユーザ pojiro で以下のコマンドを実行すると

psql -U postgres -W
psql: error: FATAL:  Peer authentication failed for user "postgres"

となり失敗する。この原因は書いてあるとおりで Peer authentication failed ということらしい。

Peer Authentication とは https://www.postgresql.org/docs/12/auth-peer.html

-W をつけているがパスワード認証にはなっておらず Peer 認証になっている。 Peer 認証となっているのは /etc/postgresql/12/main/pg_hba.conf が以下(抜粋)のように設定されているため。

# Database administrative login by Unix domain socket
local   all             postgres                                peer

パスワード認証にするには https://www.postgresql.org/docs/12/auth-password.html

例えば md5 を選び、リロードすれば良い。

# Database administrative login by Unix domain socket
local   all             postgres                                md5
sudo systemctl reload postgresql.service

psql: error: FATAL: database "pojiro" does not exist

create user pojiro; し、 psql でアクセスすると発生する。

文字通り database "pojiro" が存在しないことが原因。 これはどういうことかと言うとユーザは必ず何らかの database に接続してログインしているということ。

例えば、psql -U postgres で database 指定なしでログインすると postgres という名前の database に接続している。

postgres=# \l
                                         List of databases
          Name           |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-------------------------+----------+----------+-------------+-------------+-----------------------
 ...
 postgres                | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |
 ...
postgres=# \dt
Did not find any relations.
postgres=# \c test;
You are now connected to database "test" as user "postgres".
test=#

=# の左側が接続している database ということだ。

文字通り database "pojiro" が存在しないことが原因。

なので、create database pojiro としてデフォルト接続先を用意してやればよい。 user に Create DB の権限があれば、そこで create database して database を切り替えられる。