ChatGPT解决这个技术问题 Extra ChatGPT

How to configure postgresql for the first time?

I have just installed postgresql and I specified password x during installation. When I try to do createdb and specify any password I get the message:

createdb: could not connect to database postgres: FATAL: password authentication failed for user

Same for createuser.

How should I start? Can I add myself as a user to the database?

This is very much the same as this question which was asked a year later. But, I believe this one has a dangerous primary answer. You should not be setting up the postgres user. It's the SU of PostgreSQL, and it opens you up for login-attacks against it. Create another super-user, and reserve the locked postgres for UNIX admins with root.

y
yodabar

The other answers were not completely satisfying to me. Here's what worked for postgresql-9.1 on Xubuntu 12.04.1 LTS.

Connect to the default database with user postgres: sudo -u postgres psql template1 Set the password for user postgres, then exit psql (Ctrl-D): ALTER USER postgres with encrypted password 'xxxxxxx'; Edit the pg_hba.conf file: sudo vim /etc/postgresql/9.1/main/pg_hba.conf and change "peer" to "md5" on the line concerning postgres: local all postgres peer md5 To know what version of postgresql you are running, look for the version folder under /etc/postgresql. Also, you can use Nano or other editor instead of VIM. Restart the database : sudo /etc/init.d/postgresql restart (Here you can check if it worked with psql -U postgres). Create a user having the same name as you (to find it, you can type whoami): sudo createuser -U postgres -d -e -E -l -P -r -s The options tell postgresql to create a user that can login, create databases, create new roles, is a superuser, and will have an encrypted password. The really important ones are -P -E, so that you're asked to type the password that will be encrypted, and -d so that you can do a createdb. Beware of passwords: it will first ask you twice the new password (for the new user), repeated, and then once the postgres password (the one specified on step 2). Again, edit the pg_hba.conf file (see step 3 above), and change "peer" to "md5" on the line concerning "all" other users: local all all peer md5 Restart (like in step 4), and check that you can login without -U postgres: psql template1 Note that if you do a mere psql, it will fail since it will try to connect you to a default database having the same name as you (i.e. whoami). template1 is the admin database that is here from the start. Now createdb should work.


This procedure worked great on Ubuntu 13.10 as well. Just remember sudo in step 5 when creating a user.
Worked great on Ubuntu 14.04 LTS as well
just as a note, the line in pg_hba.conf must be the first line, otherwise it could get ignored because of other rules (pgsql 9.3.5 on F21). It took me some time to figure this out, that uncommenting and changing already-commented-out lines for postgresql user will not simply do.
This is actually bad advice. You're mucking with the postgres user. stackoverflow.com/a/41604969/124486
Please update answer to 2017! PostgreSQL 9.6 and UBUNTU 16 LTS... No simple way??
J
JJD

Under Linux PostgresQL is usually configured to allow the root user to login as the postgres superuser postgres from the shell (console or ssh).

$ psql -U postgres

Then you would just create a new database as usual:

CREATE ROLE myuser LOGIN password 'secret';
CREATE DATABASE mydatabase ENCODING 'UTF8' OWNER myuser;

This should work without touching pg_hba.conf. If you want to be able to do this using some GUI tool over the network - then you would need to mess with pg_hba.conf.


i am working on windows i ran initdb for my directory and have the configuration files present. now createdb works but when i do psql test i get the message WARNING: Console code page (437) differs from Windows code page (1252) 8-bit characters might not work correctly. See psql reference page "Notes for Windows users" for details. and none of the commands work.
psql: FATAL: Peer authentication failed for user "postgres" even with sudo.
Perfect answer, I didn't want to touch on configuration files and this worked flawlessly on PostgreSQL 10.10 over Ubuntu. You should be able to connect thereafter with psql -d mydatatabase -U myuser.
E
Evan Carroll

There are two methods you can use. Both require creating a user and a database.

Using createuser and createdb, $ sudo -u postgres createuser --superuser $USER $ createdb mydatabase $ psql -d mydatabase Using the SQL administration commands, and connecting with a password over TCP $ sudo -u postgres psql postgres And, then in the psql shell CREATE ROLE myuser LOGIN PASSWORD 'mypass'; CREATE DATABASE mydatabase WITH OWNER = myuser; Then you can login, $ psql -h localhost -d mydatabase -U myuser -p If you don't know the port, you can always get it by running the following, as the postgres user, SHOW port; Or, $ grep "port =" /etc/postgresql/*/main/postgresql.conf

Sidenote: the postgres user

I suggest NOT modifying the postgres user.

It's normally locked from the OS. No one is supposed to "log in" to the operating system as postgres. You're supposed to have root to get to authenticate as postgres. It's normally not password protected and delegates to the host operating system. This is a good thing. This normally means in order to log in as postgres which is the PostgreSQL equivalent of SQL Server's SA, you have to have write-access to the underlying data files. And, that means that you could normally wreck havoc anyway. By keeping this disabled, you remove the risk of a brute force attack through a named super-user. Concealing and obscuring the name of the superuser has advantages.


With the first method, the user ends up with no privileges. I ended up using this instead of the first command: sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami)
@FabienSnauwaert the -s makes the user a superuser.
A
A.H.

This is my solution:

su root
su postgres
psql

This will work in many cases because many sites will have pg_hba.conf authenticate the postgres db user against the postgres system account (peer method). Successful login however, will ultimately depend on the contents of pg_hba.conf for any particular site.
Worked for me. I replaced the first line with sudo bash.
i don't get how this helps,.. from my understanding, this logs in root and postgres, and runs psql. What exactly is happening? Thanks!
su root doesn't work in ubuntu
R
Robert

EDIT: Warning: Please, read the answer posted by Evan Carroll. It seems that this solution is not safe and not recommended.

This worked for me in the standard Ubuntu 14.04 64 bits installation.

I followed the instructions, with small modifications, that I found in http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html

Install postgreSQL (if not already in your machine):

sudo apt-get install postgresql

Run psql using the postgres user

sudo –u postgres psql postgres

Set a new password for the postgres user:

\password postgres

Exit psql

\q

Edit /etc/postgresql/9.3/main/pg_hba.conf and change:

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

To:

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

Restart postgreSQL:

sudo service postgresql restart

Create a new database

sudo –u postgres createdb mytestdb

Run psql with the postgres user again:

psql –U postgres –W

List the existing databases (your new database should be there now):

\l


I downvoted because I think activating the postgres user is a bad idea. stackoverflow.com/a/41604969/124486
S
SuperNova

In MacOS, I followed the below steps to make it work.

For the first time, after installation, get the username of the system.

$ cd ~
$ pwd
/Users/someuser
$ psql -d postgres -U someuser

Now that you have logged into the system, and you can create the DB.

postgres=# create database mydb;
CREATE DATABASE
postgres=# create user myuser with encrypted password 'pass123';
CREATE ROLE
postgres=# grant all privileges on database mydb to myuser;
GRANT

N
Nick Woodhams

If you're running macOS like I am, you may not have the postgres user.

When trying to run sudo -u postgres psql I was getting the error sudo: unknown user: postgres

Luckily there are executables that postgres provides.

createuser -D /var/postgres/var-10-local --superuser --username=nick
createdb --owner=nick

Then I was able to access psql without issues.

psql
psql (10.2)
Type "help" for help.

nick=#

If you're creating a new postgres instance from scratch, here are the steps I took. I used a non-default port so I could run two instances.

mkdir /var/postgres/var-10-local
pg_ctl init -D /var/postgres/var-10-local

Then I edited /var/postgres/var-10-local/postgresql.conf with my preferred port, 5433.

/Applications/Postgres.app/Contents/Versions/10/bin/postgres -D /Users/nick/Library/Application\ Support/Postgres/var-10-local -p 5433

createuser -D /var/postgres/var-10-local --superuser --username=nick --port=5433
createdb --owner=nick --port=5433

Done!


L
LifeInstructor
Note: textdb is the database which you are going to explore with 'alex' user 

root@kalilinux:~# sudo su - postgres 
postgres=#  psql   
postgres=#  create database testdb;
postgres=#  create user alex with password 'alex';
postgres=# GRANT ALL PRIVILEGES ON DATABASE testdb TO alex;`enter code here`

N
Neall

You probably need to update your pg_hba.conf file. This file controls what users can log in from what IP addresses. I think that the postgres user is pretty locked-down by default.


For RHEL6.4 and postgres 8.4 the file was located in /var/lib/pgsql/data/pg_hba.conf. Change ident to trust for host (and local if you are using ssh).
W
Wellington Ribeiro

Just browse up to your installation's directory and execute this file "pg_env.bat", so after go at bin folder and execute pgAdmin.exe. This must work no doubt!