@ledsun blog

無味の味は佳境に入らざればすなわち知れず

WSLにPostgresSQLをインストールした

結局、PostgreSQLにログインユーザと同名のロールを追加しました。

経緯としては、PostgreSQLを使っているRailsアプリケーションが動かしたかったです。

ledsun@MSI:~/pubannotation►bin/rails db:create
could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Couldn't create 'pubannotation' database. Please check your configuration.
rails aborted!
PG::ConnectionBad: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
bin/rails:4:in `<main>'
Tasks: TOP => db:create
(See full trace by running task with --trace)

こんな感じで、そもそもPostgreSQLをインストールしていないことに気がつきました。 How To Install PostgreSQL on Ubuntu 20.04 [Quickstart] | DigitalOcean を参考にし

sudo apt update && sudo apt upgrade
sudo apt install postgresql postgresql-contrib

それからPostgreSQLを起動します。

ledsun@MSI:~/pubannotation►sudo -i -u postgres
postgres@MSI:~$  /etc/init.d/postgresql start
 * Starting PostgreSQL 12 database server

それでもう一度DBを作ろうとすると

ledsun@MSI:~/pubannotation[1]►bin/rails db:create
FATAL:  Peer authentication failed for user "postgres"
Couldn't create 'pubannotation' database. Please check your configuration.
rails aborted!
PG::ConnectionBad: FATAL:  Peer authentication failed for user "postgres"
bin/rails:4:in `<main>'
Tasks: TOP => db:create
(See full trace by running task with --trace)

RailsでPostgresを使おうとしてはまった|TechRacho by BPS株式会社

結論としてはPeer認証が有効になっていたのが原因でした。 Peer認証が有効になっている場合は、ユーザ名とUnixユーザ名が一致している必要があります。

database.ymlにユーザー指定がなかったので、ログインユーザと同じロールを作ることにしました。

ledsun@MSI:~/pubannotation[1]►sudo -i -u postgres
postgres@MSI:~$ createuser -s ledsun

/etc/postgresql/12/main/pg_hba.conf を編集します。

postgres@MSI:~$ vi /etc/postgresql/12/main/pg_hba.conf

次のようにすべてのローカルユーザーをPeer認証にします。

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

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer

再起動します。

postgres@MSI:~$  /etc/init.d/postgresql restart
 * Restarting PostgreSQL 12 database server

DBの作成に成功しました。

ledsun@MSI:~/pubannotation[1]►bin/rails db:create
Database 'pubannotation' already exists
Created database 'pubannotation_test'

参考