I followed this tutorial to install PG on my Mac. It's my first time using PG locally. I used Sqlite a lot in my Rails projects before this.
I found this PSequel GUI app and I just installed it. But I've no idea how to connect to my localhost PostgreSQL databases.
What is my:
Host/Socket?
Port? (I use localhost:3000 to test my Rails app locally)
User?
Password?
Database?
Thanks.
localhost:3000 is the default url of webrick webserver. By default postgre SQL service connection is to localhost on 5432 post.
$ cat /etc/services | grep postgres
postgres 5432/tcp # POSTGRES
postgres 5432/udp # POSTGRES
That is for unix like systems. And I have postgres server listening on 5432 port.
$ netstat -l --numeric-ports |grep 5432
tcp 0 0 localhost.localdomain:5432 *:*
unix 2 [ ACC ] STREAM LISTENING 11396 /tmp/.s.PGSQL.5432
So the fields will have the following default values:
Host/Socket
localhost
For test/development purposes most people use local server to connect to db.
Port
5432
That is just postgres server (not webserver) connection port. To validate just list and grep the postgres configuration file, like follows:
# cat /var/lib/pgsql/data/postgresql.conf | grep port
#port = 5432 # (change requires restart)
Here it is commented out, so default values are applied.
User
you are, but you must create the user role before connection as of the postgres user with createuser or psql terminal utilities.
Password
When you will create the user just leave password empty. So you be able then stay the field empty in the form.
Database
That is the database name. Create it with the command if needed.
You should enter below detail for configuration:
Host/Socket? - localhost
Port? - 5432
User? - DB user(My case its: postgres)
Password? - Password for above user
Database? - DB name of your project
You can see screenshot in this site: http://www.psequel.com/
Related
I'm trying to deploy rails app with capistrano, nginx and puma. When I visit the app I get errors like this in my production.log:
[11c972c9-c8fb-404f-93c3-9fc614ad815b] ActiveRecord::ConnectionNotEstablished (connection to server at "localhost" (127.0.0.1), port 5432 failed: fe_sendauth: no password supplied
):
When I log to this machine and run bin/rails console it works without any problems, I can create records, query records. Connection to database works without problems.
RAILS_ENV is set to production in /etc/environment
Any idea what could be the problem?
database.yml
default: &default
adapter: postgresql
encoding: unicode
host: localhost
password: <%= ENV['APP_DATABASE_PASSWORD'] %>
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
production:
<<: *default
database: app_production
username: app
pg_hba.conf
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
The solution for me was to delete PostgreSQL completely using,
sudo apt-get --purge remove postgresql\*
Click yes on that pop-up, re-install PostgreSQL using,
sudo apt update
then,
sudo apt install postgresql postgresql-contrib
then,
sudo service postgresql start
Finally, you'll also need to create a database user so that you are able to connect to the database from Rails. First, check what your operating system username is:
whoami
If your username is "stack", for example, you'd need to create a Postgres user with that same name. To do so, run this command to open the Postgres CLI:
sudo -u postgres -i
From the Postgres CLI, run this command (replacing "stack" with your username):
createuser -sr stack
Then enter control + d or type logout to exit.
For sake of Lord, I'm unable to understand why postgres is complaining about password authentication(using ActiveRecord).
sudo -u postgres psql rdb
This work (no password is asked)
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
But when connecting with an ORM like ActiveRecord it complains.
ActiveRecord::Base.establish_connection(adapter: 'postgresql', username: 'postgres', database: 'rdb')
The server requested password-based authentication, but no password was provided.
This a basic setup and I was expecting this to work all the time. My last resort would be to allow trust or md5(on pg_hba.conf) but before I move ahead with that can some please provide me with some pointer as to why the above did not work.
Just an update postgres is running at localhost
The sudo command is triggering the local all postgres peer restriction, not asking for a password. The ActiveRecord configuration with the postgresql adapter uses this:
:host - Defaults to a Unix-domain socket in /tmp. On machines without
Unix-domain sockets, the default is to connect to localhost.
Do you have working sockets on your machine? Is /tmp writeable? It might be the case that a TCP connection to 127.0.0.1 is used, triggering the password check as indicated by md5.
I'm trying to restore a backup to my localhost machine to review the data - so that I can actually make sure the backup is working. I'm using Heroku, postgres, and rails.
I clean installed the app, so there is no data in the localhost database. I ran db:reset, and db:migrate.
Here is the string I'm trying to use for pg_restore:
pg_restore --verbose --clean --no-acl --no-owner -h localhost -p 3000 -U ian -d backup_production latest.dump
The error I receive says:
"connection to database "backup_production" failed: server closed the connection unexpectedly"
I've never had to do this before, so any help would be appreciated. I assume that development is what localhost uses (instead of test or production)?
I'm not sure what I'm missing, but I'll answer any question you may have.
Thanks a lot.
edit,. Here is a question, for this database string I assumed that I need to to use all the localhost information, because I created a backup using heroku capture/download. Am I wrong in that assumption? Should I instead be using the database name and port, etc, from the heroku credentials?
Turns out, I shouldn't have added the port. Removing -p 3000 , made this command work.
Try this
Edit the postgre configuration file typing in terminal
sudo gedit /etc/postgresql/POSTGRE_VERSION/main/pg_hba.conf
Then change your configuration to this
# Database administrative login by Unix domain socket
local all all trust
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
Restart your postgre server
sudo /etc/init.d/postgresql restart
This should be the solution to access without password
I am working with PostgreSQL and I have a user with password matching the one specified in database.yml
postgres=# select * from pg_user
;
usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valuntil | useconfig
------------+----------+-------------+----------+-----------+---------+----------+----------+-----------
goodsounds | 16386 | t | t | t | t | ******** | |
postgres | 10 | t | t | t | t | ******** | |
(2 rows)
But when I try creating a database by running the command
rails db:create
I get the error
FATAL: Peer authentication failed for user "goodsounds"
Here is my pg_hba.conf:
# 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
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 trust
#host replication postgres ::1/128 trust
Previously "trust" above was md5 but I changed to see if that would help.
Here is my database.yml:
# PostgreSQL. Versions 8.2 and up are supported.
#
# Install the pg driver:
# gem install pg
# On Mac 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'
#
development:
adapter: postgresql
encoding: unicode
database: goodsounds_development
pool: 5
username: goodsounds
password: test
# 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
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
# The server defaults to notice.
#min_messages: warning
# 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:
adapter: postgresql
encoding: unicode
database: goodsounds_test
pool: 5
username: goodsounds
password: test
production:
adapter: postgresql
encoding: unicode
database: goodsounds_production
pool: 5
username: goodsounds
password: test
"Peer authentication" means that it's using a unix socket and expecting the connecting unix user to have the same unix username as the postgresql username.
Since your local unix username is funkdified and you're trying to connect as user goodsounds over a unix domain socket (local) connection where your pg_hba.conf specifies peer authentication, Pg correctly rejects your connection attempt.
This is the default behaviour for many installs when using unix sockets.
You can:
Connect via TCP/IP by specifying a hostname in your database connection settings;
edit pg_hba.conf to use md5 password authentication instead of peer authentication for unix sockets (local connection type) so Pg accepts password authentication; or
Connect with a PostgreSQL username the same as your unix username and create the user in PostgreSQL if it doesn't exist yet.
See the docs for pg_hba.conf and the rest of the client authentication chapter of the documentation.
Note that changes to pg_hba.conf do not take effect immediately, you must restart or at least reload PostgreSQL to get it to reread pg_hba.conf.
Oh, also, if you have multiple PostgreSQL versions installed you might have a libpq from one version and a server from another. In this case make sure the location for the unix socket that libpq connects to by default is the same as the server's unix_socket_directories or override it with (e.g.) host=/tmp in your connection string.
I was facing same problem on Ubuntu machine so I removed this error by following some steps.
Switch to postgres user
$ sudo su - postgres
it will ask for password and by default password is postgres
After switch the user to postgres, open psql console
$ psql
so check the version of postgres if multiple versions are available
psql=# select VERSION();
PostgreSQL 9.1.13 on x86_64-unk.... # so version is 9.1
Now Open postgres user
vim /etc/postgresql/9.1/main/pg_hba.conf
9.1 is version return form upper command
and replace
local all postgres peer
to
local all postgres md5
Restart the service
sudo service postgresql restart
I write steps on my blog also
http://tarungarg402.blogspot.in/2014/10/set-up-postgresql-on-ubuntu.html
If "peer authentication" does not work, try md5 authenticaion.
To specify host try something like this:
psql -d <dbname> -U <username> -h <hostname>
or this:
psql -d <dbname> -U <username> -h <hostname> -W
edit /etc/postgresql/9.3/main/pg_hba.conf
# "local" is for Unix domain socket connections only
local all all peer
change to below line and it works for me
# "local" is for Unix domain socket connections only
local all all md5
Here's how I solved it;
Run the command below to confirm your PostgreSQL version.
psql --version
Navigate to the PostgreSQL configuration directory on your server, which is in /etc/postgresql/10/main. Take note that 10 is the version of my PostgreSQL installation on my server. Your version might be 9.5, 11 or 12 or any other version.
cd ~
cd /etc/postgresql/10/main
Once you navigate into the /etc/postgresql/10/main directory, open the file pg_hba.conf using the command below. This file controls: which hosts are allowed to connect, how clients are authenticated, which PostgreSQL user names they can use, which databases they can access:
sudo nano pg_hba.conf
Replace the following line below:
# Database administrative login by Unix domain socket
local all postgres peer
with the line below:
# Database administrative login by Unix domain socket
local all postgres md5
Also, replace the following line below:
# "local" is for Unix domain socket connections only
local all all peer
with the line below:
# "local" is for Unix domain socket connections only
local all all md5
Additionally, we may want to allow inbound connections to the PostgreSQL database in production (to allow host connections from all databases, all users, all addresses using the md5 method).
To achieve this, add the line below at the end of the file, and then save the file:
# remote connections
host all all all md5
Still within the /etc/postgresql/10/main directory, open and edit the file postgresql.conf using the command below:
sudo nano postgresql.conf
Replace the line # listen_address='127.0.0.1' or the line listen_address='127.0.0.1' or the line # listen_address='localhost' or the line listen_address='localhost' with the line below, in order to allow PostgreSQL database to listen to connections from all addresses:
listen_addresses = '*'
Save the file, and navigate to the root directory of your server:
cd ~
Restart or reload the PostgreSQL server using the command below:
sudo systemctl restart postgresql # To restart
sudo systemctl reload postgresql # To reload
I have my mongoid.yml file set up like (eventually production environment will be called staging):
development:
host: staging.domain.com
port: 27018
username: domain
password: passw0rd
database: domain_production
production:
host: localhost
port: 27017
username: domain
password: passw0rd
database: domain_production
I can open up my tunneling like:
ssh deployer#staging.domain.com -L 27018:staging.domain.com:27017
I can open up my mongo shell with
mongo --port 27018
I can run mongod on the remote port but again, none of the entries on the staging server show up. (Do I need to run mongod?)
But when I go to the domain_production I don't see the documents that show up on the website itself. And when I try to start the rails server it hangs. Am I missing a step?
mongod is the mongo database process. It needs be run prior to running the "mongo" shell. mongo is the interactive javascript shell that you use to interact with the mongod process.
mongod picks up the configuration file, and starts listening on port 21017 by default. 21017 + 1000 = 22017 is the port where the http interface shows up. Did i answer your question?