1

I am running into this problem with rails 5.2.3 when trying to make it work with postgresql 11.

FATAL: Peer authentication failed for user "postgres"

I have been checking 1 and 2

They talk about pg_hba.conf and how the methods should be changed to md5 or trust. In my hard disk, there is no such file. These archives are found within /var/lib/postgresql/11/ :

base          pg_dynshmem   pg_notify    pg_snapshots  pg_subtrans  PG_VERSION  postgresql.auto.conf
global        pg_logical    pg_replslot  pg_stat       pg_tblspc    pg_wal  postmaster.opts
pg_commit_ts  pg_multixact  pg_serial    pg_stat_tmp   pg_twophase  pg_xact postmaster.pid

If I try to locate the file it will appear here:

$locate pg_hba.conf
/home/linuxbrew/.linuxbrew/var/postgres/pg_hba.conf

If I go inside, the method trust is already used.

I have already uninstalled postgresql and install it again.

This is my database.yml file:

# PostgreSQL. Versions 9.1 and up are supported.
#
# Install the pg driver:
#   gem install pg
# On OS X with Homebrew:
#   gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On OS X with MacPorts:
#   gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
#   gem install pg
#       Choose the win32 build.
#       Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: postgres
  username: postgres
  #host: localhost
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  # The specified database role being used to connect to postgres.
  # To create additional roles in postgres see `$ createuser --help`.
  # When left blank, postgres will use the default role. This is
  # the same name as the operating system user that initialized the database.

  # The password associated with the postgres role (username).

  # Connect on a TCP socket. Omitted by default since the client uses a
  # domain socket that doesn't need configuration. Windows does not have
  # domain sockets, so uncomment these lines.
  #host: localhost

  # The TCP port the server listens on. Defaults to 5432.
  # If your server runs on a different port number, change accordingly.
   # port: 5432

  # Schema search path. The server defaults to $user,public
  #schema_search_path: myapp,sharedapp,public

  # Minimum log levels, in increasing order:
  #   debug5, debug4, debug3, debug2, debug1,
  #   log, notice, warning, error, fatal, and panic
  # Defaults to warning.
  #min_messages: notice

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: postgres
  username: postgres
  host: localhost
  pool: 5




# As with config/secrets.yml, you never want to store sensitive information,
# like your database password, in your source code. If your source code is
# ever seen by anyone, they now have access to your database.
#
# Instead, provide the password as a unix environment variable when you boot
# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database
# for a full rundown on how to provide these environment variables in a
# production deployment.
#
# On Heroku and other platform providers, you may have a full connection URL
# available as an environment variable. For example:
#
#   DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase"
#
# You can use this database configuration with:
#
#   production:
#     url: <%= ENV['DATABASE_URL'] %>
#
production:
  <<: *default
  database: postgres
  username: postgres

If I remove the line

  username: postgres

I get

FATAL: role "root" does not exist

2 Answers 2

3

I had faced this issue yesterday. Try this ... This should do

default: &default
  adapter: postgresql
  pool: 5
  host: localhost

development:
  <<: *default
  database: prj_development
  username: pg_username
  password: pg_password

The only difference I noticed while making it work was the host key

host: localhost

To make sure I just commented the key host and reproduced the following error

PG::ConnectionBad: FATAL: Peer authentication failed for user "postgres"

Sign up to request clarification or add additional context in comments.

Comments

1

Did you create a user with the name postgres? If so you would've set a password for it. So you should include password attribute that in your config/database.yml file: (Also it's best practice to name your test, development and production databases name as different):

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: yourappname_dev
  username: postgres
  password: 1234
  host: localhost

test:
  <<: *default
  database: yourappname_test
  username: postgres
  password: 1234
  host: localhost

production:
  <<: *default
  host: localhost
  database: yourappname_prod
  password: 1234
  username: postgres

If you don't remember the password for postgres, create a new user and set password for it from the below commands and then update the above code with your new username and password:

$ sudo -u postgres createuser yournamehere -s
$ sudo -u postgres psql

postgres=# \password yournamehere
# enter your password

# now quit
\q

1 Comment

Thanks for your help allenbrkn. I was lacking host: localhost under default in my database.yml file

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.