Createuser: tidak dapat terhubung ke database postgres: FATAL: role "tom" tidak ada

92

Saya mencoba menyiapkan Postgres untuk pertama kalinya, dan saya perlu membuat pengguna dengan izin untuk membaca dan membuat database. Namun, saat saya menggunakan:

createuser username

di terminal saya, saya mendapatkan pesan berikut:

createuser: tidak dapat terhubung ke database postgres: FATAL: role "tom" tidak ada

Tom adalah akun pengguna Ubuntu saya yang saya masuki sekarang. Saya mencoba membuat nama pengguna "postgres" lalu melakukan a psql -U psql template1sehingga saya dapat membuat database dan menetapkan pemiliknya untuk aplikasi Rails saya.

Tom Maxwell
sumber
Apakah Anda benar-benar mencoba membuat pengguna 'postgres'? Atau hanya pengguna untuk aplikasi Rails Anda? Biasanya pengguna 'postgres' sudah ada dan masalahnya hanya menghubungkannya untuk melakukan apa yang Anda butuhkan.
ostergaard

Jawaban:

132

Anda menyebutkan Ubuntu jadi saya akan menebak Anda menginstal paket PostgreSQL dari Ubuntu melalui apt.

Jika demikian, postgresakun pengguna PostgreSQL sudah ada dan dikonfigurasi agar dapat diakses melalui peerotentikasi untuk soket unix di pg_hba.conf. Anda bisa melakukannya dengan menjalankan perintah sebagai postgrespengguna unix, misalnya:

sudo -u postgres createuser owning_user
sudo -u postgres createdb -O owning_user dbname

Ini semua ada dalam dokumentasi Ubuntu PostgreSQL yang merupakan hit Google pertama untuk "Ubuntu PostgreSQL" dan tercakup dalam banyak pertanyaan Stack Overflow.

(Anda telah membuat pertanyaan ini jauh lebih sulit untuk dijawab dengan menghilangkan detail seperti OS dan versi yang Anda gunakan, cara Anda menginstal PostgreSQL, dll.)

Craig Ringer
sumber
baik setelah membuat owning_user, Bagaimana Anda terhubung dengan pengguna ini? Maksud saya menghubungkan pengguna default yang saya gunakan, sudo -u postgres psql postgres. cara yang sama bagaimana menghubungkan owning_user?
Jony
2
Tiga opsi. (a) Tetapkan kata sandi untuk pengguna itu dan edit pg_hba.confuntuk menggunakan md5auth bagi pengguna itu (lihat manual); (b) Membuat pengguna OS dengan nama yang sama dan tetap menggunakan peerauth; atau (c) lebih lanjut, buat pg_ident.confpemetaan untuk memungkinkan pengguna OS Anda masuk sebagai pengguna baru.
Craig Ringer
66

Lihat intinya dengan instruksi di sini

Jalankan ini:

 sudo -u postgres psql

ATAU

psql -U postgres

di terminal Anda untuk masuk ke postgres

NB: Jika Anda menggunakan Mac dan kedua perintah di atas gagal, lompat ke bagian tentang Mac di bawah

postgres=#

Lari

CREATE USER new_username;

Catatan: Ganti nama_baru dengan pengguna yang ingin Anda buat, dalam kasus Anda itu adalah tom.

postgres=# CREATE USER new_username;
CREATE ROLE

Karena Anda ingin pengguna tersebut dapat membuat DB, Anda perlu mengubah peran menjadi superuser

postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE

Untuk mengonfirmasi, semuanya berhasil,

postgres=# \du
                         List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
new_username     | Superuser, Create DB                           | {}
postgres         | Superuser, Create role, Create DB, Replication | {}
root             | Superuser, Create role, Create DB              | {}

postgres=# 

Pembaruan / Modifikasi (Untuk Mac):

Saya baru-baru ini mengalami kesalahan serupa di Mac saya:

psql: FATAL: role "postgres" does not exist

Ini karena instalasi saya diatur dengan superuser database yang nama perannya sama dengan nama login (pendek) Anda.

Tetapi beberapa skrip linux menganggap superuser memiliki nama peran tradisional postgres

Bagaimana saya menyelesaikan ini?

Jika Anda menginstal dengan homebrewrun:

/usr/local/opt/postgres/bin/createuser -s postgres

Jika Anda menggunakan versi postgres tertentu, katakan 10.5lalu jalankan:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s postgres

ATAU:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s new_username

ATAU:

/usr/local/opt/postgresql@11/bin/createuser -s postgres

Jika Anda menginstal dengan postgres.appuntuk Mac, jalankan:

/Applications/Postgres.app/Contents/Versions/10.5/bin/createuser -s postgres

PS: ganti 10.5 dengan versi PostgreSQL Anda

pengguna3402754
sumber
Ini bekerja untuk masuk ke postgres:psql -U postgres
leontalbot
29
sudo -u postgres createuser -s tom 

ini akan membantu Anda karena ini akan terjadi jika administrator belum membuat akun pengguna PostgreSQL untuk Anda. Bisa juga Anda diberi nama pengguna PostgreSQL yang berbeda dari nama pengguna sistem operasi Anda, dalam hal ini Anda perlu menggunakan tombol -U.

Tanmay
sumber
7

1- Login sebagai pengguna PostgreSQL default (postgres)

sudo -u postgres -i

2- Sebagai pengguna postgres. Tambahkan pengguna database baru menggunakan createuserperintah

[postgres]$ createuser --interactive

3-keluar

[postgres]$ exit
Saman Mohamadi
sumber
5

Kesalahan Anda diposting di dokumentasi resmi. Anda bisa membaca artikel ini .

Saya telah menyalin alasan Anda (dan membuat hyperlink URL) dari artikel itu:

Ini akan terjadi jika administrator belum membuat akun pengguna PostgreSQL untuk Anda. (Akun pengguna PostgreSQL berbeda dari akun pengguna sistem operasi.) Jika Anda adalah administrator, lihat Bab 20 untuk bantuan membuat akun. Anda harus menjadi pengguna sistem operasi tempat PostgreSQL diinstal (biasanya postgres) untuk membuat akun pengguna pertama. Bisa juga Anda diberi nama pengguna PostgreSQL yang berbeda dari nama pengguna sistem operasi Anda; dalam hal ini Anda perlu menggunakan tombol -U atau mengatur variabel lingkungan PGUSER untuk menentukan nama pengguna PostgreSQL Anda

Untuk tujuan Anda, Anda dapat melakukan:

1) Buat akun pengguna PostgreSQL:

sudo -u postgres createuser tom -d -P

( -Popsi untuk menyetel kata sandi; -dopsi untuk mengizinkan pembuatan database untuk nama pengguna Anda 'tom'. Perhatikan bahwa 'tom' adalah nama pengguna sistem operasi Anda. Dengan begitu, Anda dapat menjalankan perintah PostgreSQL tanpa sudoing.)

2) Sekarang Anda harus dapat menjalankan createdbdan perintah PostgreSQL lainnya.

Rocky Inde
sumber
1

Saya memiliki masalah yang sama, saya hanya melakukan ini

sudo su - postgres

createuser odoo -U postgres -dRSP #P untuk kata sandi ( odoo atau nama pengguna yang ingin Anda berikan akses postgres)

Sagar T
sumber
0

Jika Anda tidak ingin mengubah metode otentikasi (ident) dan mengacaukan pg_hba.conf gunakan ini:

Pertama login sebagai pengguna default

 sudo su - posgres

kemudian akses psql dan buat pengguna dengan nama yang sama dengan yang Anda masuki

postgres=# CREATE USER userOS WITH PASSWORD 'garbage' CREATEDB;

Anda dapat memverifikasi pengguna Anda dengan peran yang sesuai dengan

postgres=#  \du

Setelah ini, Anda dapat membuat database Anda dan memverifikasinya dengan

psql -d dbName
\l
\q
Eduardo Hernández
sumber
-4

Anda harus menjalankan initdb terlebih dahulu. Ini akan membuat cluster database dan pengaturan awal

Lihat Bagaimana cara mengkonfigurasi postgresql untuk pertama kalinya? dan http://www.postgresql.org/docs/8.4/static/app-initdb.html

Jean-Marie
sumber
5
Ini sepenuhnya tidak benar. Jika pengguna tidak menjalankan, initdbmereka tidak akan menjalankan server database dan menerima koneksi untuk menghasilkan pesan kesalahan yang dilaporkan. Harap hapus jawaban yang menyesatkan ini. (BTW, di masa mendatang, harap tautkan ke / docs / current / static / untuk menghindari penumpukan tautan lama)
Craig Ringer