Kesalahan postgreSQL: Fatal: peran "nama pengguna" tidak ada

733

Saya sedang mengatur PostgreSQL 9.1 saya. Saya tidak bisa melakukan apa pun dengan PostgreSQL: tidak createdbbisa, tidak bisa createuser; semua operasi mengembalikan pesan kesalahan

Fatal: role h9uest does not exist

h9uestadalah nama akun saya, dan saya sudo apt-get installPostgreSQL 9.1 di bawah akun ini.
Kesalahan serupa tetap ada untuk rootakun tersebut.

hestest
sumber
1
Setelah itu Anda mungkin mengalami FATAL: role "user" is not permitted to log in, periksa dba.stackexchange.com/questions/57723/… untuk itu.
kqw
19
Saya menjawab pertanyaan ini di sini . Baca juga tutorial ini " Cara Memasang Postgres untuk Ubuntu Linux ".
ruzenhack
@Ruzenhack tautan tutorial itu persis seperti yang saya butuhkan! Sangat jelas dan sederhana
dwanderson
4
psql -h localhost -U postgres
Metin Atalay
Jika Anda mendapatkan kesalahan role doesn't existDAN kesalahan can't create role, it already existsperiksa jawaban ini: stackoverflow.com/a/56658832/1689770
Jonathan

Jawaban:

775

Gunakan pengguna sistem operasi postgres untuk membuat database Anda - selama Anda belum mengatur peran database dengan hak istimewa yang diperlukan yang sesuai dengan pengguna sistem operasi Anda dengan nama yang sama ( h9uestdalam kasus Anda):

sudo -u postgres -i

Seperti yang disarankan di sini atau di sini .

Lalu coba lagi. Ketik exitketika selesai dengan operasi sebagai pengguna sistem postgres.

Atau jalankan perintah tunggal createusersebagai postgresdengan sudo, seperti yang ditunjukkan oleh Drees dalam jawaban lain.

Intinya adalah untuk menggunakan pengguna sistem operasi yang cocok dengan peran database dengan nama yang sama untuk diberikan akses melalui identotentikasi . postgresadalah pengguna sistem operasi default yang telah menginisialisasi cluster database. Manual:

Untuk mem-bootstrap sistem basis data, sistem yang baru diinisialisasi selalu berisi satu peran yang telah ditentukan. Peran ini selalu merupakan "superuser", dan secara default (kecuali diubah saat dijalankan initdb), ia akan memiliki nama yang sama dengan pengguna sistem operasi yang menginisialisasi gugus basis data. Biasanya, peran ini akan dinamai postgres. Untuk membuat lebih banyak peran, Anda harus terlebih dahulu terhubung sebagai peran awal ini.

Saya pernah mendengar tentang pengaturan aneh dengan nama pengguna non-standar atau di mana pengguna sistem operasi tidak ada. Anda perlu menyesuaikan strategi Anda di sana.

Baca tentang peran basis data dan otentikasi klien di manual.

Erwin Brandstetter
sumber
1
Tidak mungkin dijalankan sudo etcsebagai postgres pengguna ... Bagaimana cara menginstal suatu program? Lihat masalah pemasangan S2geometri ini .
Peter Krauss
Tergantung pada konfigurasi, seseorang mungkin hanya perlu su postgres.
Fabien Snauwaert
1
sudo -u postgrestidak bekerja, sambil sudo -u postgres -ibekerja! Apa yang dilakukan -ibendera?
parsecer
1
@parsecer: Shell interaktif dimulai, mirip dengan su, tetapi berdasarkan hak istimewa sudo. Lihat man sudo.
Erwin Brandstetter
284

Setelah mencoba banyak solusi orang lain, dan tanpa hasil, jawaban ini akhirnya membantu saya.

https://stackoverflow.com/a/16974197/2433309

Singkatnya, berlari

sudo -u postgres createuser owning_user

membuat peran dengan nama owning_user (dalam hal ini, h9uest). Setelah itu Anda dapat menjalankan rake db:createdari terminal dengan nama akun apa pun yang Anda atur tanpa harus masuk ke lingkungan Postgres.

drees
sumber
29
Jika Anda mendapatkan kesalahan "tidak cukup hak istimewa" setelah ini, Anda bisa menambahkan tanda -s ke perintah di atas. Ini akan membuat pengguna baru Anda sebagai pengguna super. Harap perhatikan implikasi keamanan dari hal ini jika Anda memutuskan untuk melakukannya.
sarink
1
Saya mendapatkan "hak istimewa tidak mencukupi", tetapi sekarang saya mendapatkan ERROR: roll "username" sudah ada.
Wylliam Judd
4
@ConnorLeech Anda dapat mengganti 'postgres' dengan nama pengguna super PG Anda. Dalam kasus saya itu adalah nama saya.
myfashionhub
1
Saya juga harus menggunakan -s, dan tidak perlu menggunakan sudo -u postgres(hanya createuser new_userberfungsi dengan baik)
Meekohi
2
psql: FATAL: role "jonny" does not existoke jadi sudo -u postgres -s createuser jonnymengapa createuser: creation of new role failed: ERROR: role "jonny" already exists
Jonathan
134
sudo su - postgres

psql template1

menciptakan peran di pgsql dengan hak istimewa sebagai "superuser"

CREATE ROLE username superuser;
eg. CREATE ROLE demo superuser;

Lalu buat pengguna

CREATE USER username; 
eg. CREATE USER demo;

Tetapkan hak istimewa untuk pengguna

GRANT ROOT TO username;

Dan kemudian aktifkan login pengguna itu, sehingga Anda dapat menjalankan mis:, psql template1dari $terminal normal :

ALTER ROLE username WITH LOGIN;
Mohammed Saleem
sumber
4
Saya baru saja melakukan instalasi baru PostgreSQL 9.4.4 dan dapat menggunakan tindak untuk membuat superuser baru: CREATE ROLE username superuser createdb login; yang menggabungkan ketiga langkah ...
iPad Guy
25
# GRANT ROOT bagiku; GALAT: peran "root" tidak ada
shacker
6
versi yang lebih sederhana: sudo -u postgres createuser --superuser $USER; sudo -u postgres createdb $USER
Zach Estela
2
@shacker#GRANT postgres TO username
7kemZmani
Saya menggunakan root untuk memulai server kemudian `` `psql -U postgres-h 127.0.0.1 - perintah" BUAT postgresondocker PENGGUNA DENGAN SUPERUSER PASSWORD 'postgresondocker'; " && \ Createdb -O postgresondocker postgresondocker`` bisakah saya menggunakan root untuk melakukan ini jika saya menambahkannya ke pg_ident?
Shivangi Singh
85

Menginstal postgres menggunakan apt-gettidak membuat peran pengguna atau database.

Untuk membuat peran pengguna super dan basis data untuk akun pengguna pribadi Anda:

sudo -u postgres createuser -s $(whoami); createdb $(whoami)

Miles Erickson
sumber
1
Saya perlu menjalankan bagian kedua sebagai:sudo -u postgres createdb $(whoami)
SanD
2
@SanD Jika Anda telah membuat akun pengguna Anda sendiri sebagai pengguna super (melalui -sbendera pada perintah pertama), Anda dapat membuat database sebagai diri Anda sendiri. Anda tidak perlu menjalankan createdbsebagai postgres.
Miles Erickson
2
Jawaban bagus! Menyelamatkan saya berjam-jam melakukan debug !!
Aminu Kano
79

Ini bekerja untuk saya:

psql -h localhost -U postgres
mateusz.szymborski
sumber
tolong tambahkan kata sandi untuk pengguna di atas.
Chaudhry Waqas
1
@Vincent jika kata sandi tidak pernah diubah setelah instalasi PostgreSQL, secara default adalah postgres(diuji pada Linux dan Windows).
silvioprog
1
role postgres does not exist
Jacob Schneider
15

Metode kerja,

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer di sini ubah rekan menjadi kepercayaan
  3. mengulang kembali, sudo service postgresql restart

  4. sekarang coba, psql -U postgres

Mohideen bin Mohammed
sumber
1
Harus jelas bahwa trustmetode ini hanya disarankan di lingkungan yang sepenuhnya aman. Meskipun akses dari koneksi yang tidak terpercaya dimungkinkan, jangan pernah memaparkan kluster DB Anda seperti itu.
Erwin Brandstetter
ini bagus
horoyoi o
Periksa: Jika layanan postgresql tidak dimulai, mungkin ada beberapa kesalahan dalam filepg_hba.conf
Walk
11

Untuk versi Postgres 9.5 gunakan perintah berikut:

psql -h localhost -U postgres

Semoga ini bisa membantu.

Kalyan Halder Raaz
sumber
11
psql postgres

postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;
Abel
sumber
4
psql postgreshasil:psql: FATAL: role "root" does not exist
TomSawyer
2
psql postgres -U postgres? Tergantung pada pengguna (-U) yang Anda miliki.
Meadowlark Bradsher
Terima kasih! Saya berjuang bagaimana cara mencadangkan postgresql dengan root karena saya tidak tahu kata sandi postgres
Dika
7

Di prompt pengguna lokal, bukan prompt pengguna root, ketik

sudo -u postgres createuser <local username>

Kemudian masukkan kata sandi untuk pengguna lokal.

Kemudian masukkan perintah sebelumnya yang menghasilkan "peran 'nama pengguna' tidak ada."

Langkah-langkah di atas memecahkan masalah bagi saya. Jika tidak, silakan kirim pesan terminal untuk langkah-langkah di atas.

Robert Cambil
sumber
3

Membuat kluster DB secara manual memecahkannya dalam kasus saya.

Untuk beberapa alasan, ketika saya menginstal postgres, "DB awal" tidak dibuat. Pelaksana initdbmelakukan trik untuk saya.

Solusi ini disediakan di PostgreSQL Wiki - Langkah pertama :

initdb

Biasanya menginstal postgres ke OS Anda menciptakan "DB awal" dan mulai menjalankan daemon server postgres. Jika tidak, Anda harus menjalankan initdb

Natacha
sumber
2

Untuk pengguna Windows :psql -U postgres

Anda akan melihat antarmuka baris perintah ke PostgreSQL: postgres=#

Andriy Tolstoy
sumber
0

Ikuti Langkah-Langkah Ini dan Akan Berhasil Untuk Anda:

  1. Lari msfconsole
  2. ketik db_console
  3. beberapa informasi akan ditampilkan kepada Anda memilih informasi yang meminta Anda untuk membuat: db_connect user:pass@host:port.../databasemaaf saya tidak ingat tapi itu seperti yang ini kemudian ganti pengguna dan kata sandi dan host dan database dengan informasi yang termasuk dalam database.ymlemplacement :/usr/share/metasploit-framework/config
  4. kamu akan lihat. membangun kembali cache model di latar belakang.
  5. Ketik pembaruan apt-get && apt-get upgrade setelah pembaruan restart terminal dan makan siang msfconsole dan berfungsi, Anda dapat memeriksa bahwa dengan mengetik msfconsole: msf>db_statusAnda akan melihat bahwa itu terhubung.
Pronom Loli
sumber
0

dump dan restore dengan --no-owner --no-privilegesflag

misalnya

dump - pg_dump --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname > /tmp/full.dump

pulihkan - pg_restore --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname /tmp/full.dump

srghma
sumber