psql: FATAL: peran "postgres" tidak ada

406

Saya seorang pemula postgres.

Saya menginstal postgres.app untuk mac. Saya bermain-main dengan perintah psql dan saya tidak sengaja menjatuhkan database postgres. Saya tidak tahu apa isinya.

Saat ini saya sedang mengerjakan tutorial: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

Dan saya terjebak sudo -u postgres psql postgres

PESAN EROR: psql: FATAL: role "postgres" does not exist

$ mana psql

/Applications/Postgres.app/Contents/MacOS/bin/psql

Ini adalah hasil cetakan psql -l

                                List of databases
    Name    |   Owner    | Encoding | Collate | Ctype |     Access privileges     
------------+------------+----------+---------+-------+---------------------------
 user       | user       | UTF8     | en_US   | en_US | 
 template0  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
 template1  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
(3 rows)

Jadi apa langkah yang harus saya ambil? Hapus semua yang terkait dengan psql dan instal ulang semuanya?

Terima kasih atas bantuan kalian!

pengguna805981
sumber
1
Mulai Ulang Komputer. Memastikan Launchd dari brew services start postresqldijalankan.
Michael Dimmitt

Jawaban:

411

CATATAN: Jika Anda menginstal postgres menggunakan homebrew, lihat komentar dari @ user3402754 di bawah ini.

Perhatikan bahwa pesan kesalahan TIDAK berbicara tentang database yang hilang, itu berbicara tentang peran yang hilang. Kemudian dalam proses login mungkin juga tersandung database yang hilang.

Tetapi langkah pertama adalah untuk memeriksa peran yang hilang: Apa output dalam psqlperintah \du? Pada sistem Ubuntu saya, baris yang relevan terlihat seperti ini:

                              List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}        

Jika tidak ada setidaknya satu peran dengan superuser, maka Anda memiliki masalah :-)

Jika ada, Anda dapat menggunakannya untuk masuk. Dan melihat output dari \lperintah Anda : Izin untuk userpada template0dan template1database sama seperti pada sistem Ubuntu saya untuk superuser postgres. Jadi saya pikir pengaturan Anda menggunakan sederhana usersebagai superuser. Jadi Anda bisa mencoba perintah ini untuk masuk:

sudo -u user psql user

Jika userbenar-benar superuser DB, Anda dapat membuat superuser DB lain dan database kosong pribadi untuknya:

CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;

Tetapi karena pengaturan postgres.app Anda tampaknya tidak melakukan ini, Anda juga tidak boleh melakukannya. Sederhana menyesuaikan tutorial.

AH
sumber
10
Bagi saya, pengguna tidak diciptakan - ini berfungsi sebagai gantinya CREATE USER postgres WITH SUPERUSER PASSWORD 'password'; saya menggunakan postgres v10.
arcseldon
230
Jika Anda menginstal Postgres sejak homebrewsaat itu, Anda perlu menjalankannya /usr/local/opt/postgres/bin/createuser -s postgresdi terminal Anda
user3402754
7
Saya harus menjalankan/usr/local/opt/postgresql/bin/createuser -s postgres
user1807782
1
@ user1807782 Anda telah menyelamatkan hari saya; Saya pikir Anda harus mengiklankan ini sebagai jawaban.
tolga
1
Jika Anda menggunakan versi postgres tertentu, maka Anda harus memasukkan versi di jalur -/usr/local/opt/postgresql@11/bin/createuser -s postgres
Digitrance
264

Kuncinya adalah "Saya menginstal postgres.app untuk mac." Aplikasi ini mengatur instalasi PostgreSQL lokal dengan superuser basis data yang nama perannya sama dengan nama login Anda (pendek).

Ketika Postgres.app pertama kali dijalankan, itu menciptakan database $ USER, yang merupakan database default untuk psql ketika tidak ada yang ditentukan. Pengguna default adalah $ USER, tanpa kata sandi.

Beberapa skrip (misalnya, cadangan basis data yang dibuat dengan pgdumppada sistem Linux) dan tutorial akan menganggap superuser memiliki nama peran tradisional postgres.

Anda dapat membuat pemasangan lokal Anda terlihat sedikit lebih tradisional dan menghindari masalah ini dengan melakukan satu kali:

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

yang akan membuat FATAL: peran "postgres" tidak ada hilang.

jwd630
sumber
119
Jika Anda menggunakan postgres dari Homebrew, maka Anda menginginkannya /usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres(untuk versi 9.2.4, tentu saja).
Roger Lipscombe
1
Untuk postgres.app 9.3, mereka tampaknya telah mengatur ulang direktori. Saya mencoba: /Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres, tetapi ini menghasilkan pesan eror yang sama: "createuser: tidak dapat terhubung ke postgres basis data: FATAL: peran" postgres "tidak ada "
Michael Coxon
7
/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgresberlari dengan benar untukku.
cjspurgeon
9
@RogerLipscombe jika Anda menjalankan brew link postgresqlsetelah instalasi, tidak perlu menambahkan seluruh path ke createuser, sederhana createuser -s postgresakan bekerja dengan baik
AlessioX
2
createuser -s postgresbekerja untukku. Saya memasang postgres dengan Homebrew
biniam
228

Untuk Mac:

  1. Instal Homebrew
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgresatau /usr/local/opt/postgres/bin/createuser -s postgresyang hanya akan menggunakan versi terbaru.
  5. mulai server postgres secara manual: pg_ctl -D /usr/local/var/postgres start

Untuk memulai server saat startup

  • mkdir -p ~/Library/LaunchAgents
  • ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
  • launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Sekarang, sudah diatur, login menggunakan psql -U postgres -h localhostatau menggunakan PgAdmin untuk GUI.

Secara default, pengguna postgrestidak akan memiliki kata sandi login.

Periksa situs ini untuk artikel lainnya seperti ini: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7

Nitin
sumber
3
Dengan pemasangan bir terbaru yang dapat Anda lakukan brew services start postgresqluntuk memulai postgres
Automatico
<3 <3 <3 <3 <3
Adeel Ahmad
ini adalah jawaban terbaik
Alejandro Pablo Tkachuk
39
createuser postgres --interactive

atau membuat postgresl superuser hanya dengan

createuser postgres -s
SubstanceMX
sumber
Saya menemukan jawaban ini berguna ketika pgadmin saya terus meminta pengguna postgres dan saya tidak memiliki peran postgres untuk memulai, perintah ini menciptakannya, saya menambahkan pw autogenerated ke pgadmin saya dan masalah terpecahkan!
theusual
Ini berfungsi untuk saya .. tetapi cara ini: "buat postgres pengguna"
Roberto Rodriguez
31

Ini terjadi ketika Anda menjalankan initdbdengan pengguna yang ID bukan postgres, tanpa menentukan postgresnama pengguna dengan --username=postgresatau -U postgres.

Cluster database kemudian dibuat dengan akun pengguna sistem yang Anda gunakan untuk menjalankan initdb, dan diberikan izin pengguna super.

Untuk memperbaikinya, cukup buat pengguna baru bernama postgresdengan opsi --superusermenggunakan createuserutilitas yang datang dengan Postgres. Utilitas dapat ditemukan di bindirektori Postgres . misalnya

createuser --superuser postgres

Jika Anda memiliki nama host atau port khusus maka pastikan untuk mengatur opsi yang sesuai .

Jangan lupa untuk menghapus akun pengguna lain yang dibuat untuk Anda oleh initdb.

isapir
sumber
2
Ini adalah jawaban yang paling informatif.
MyWrathAcademia
17

Bagi saya, kode ini berfungsi:

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

itu datang dari sini: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4

Kevin Zhao
sumber
Bekerja untuk saya juga! Anda menyimpan daging saya.
Dave Munger
1
Saya mendapat peran "saya" tidak ada
SuperUberDuper
Apakah ini berarti pengguna posgres baru ini tidak akan memiliki kata sandi?
olaoluwa_98
16

Saya harus menghapus $PGUSER:

$ unset PGUSER
$ createuser -s postgres
Beau Barker
sumber
1
oh man, akhirnya mendapatkan apa masalahnya. Ternyata kami mencoba membuat postgres pengguna sebagai postgres pengguna
Taras Matsyk
14

Pertama, Anda perlu membuat pengguna:

sudo -u postgres createuser --superuser $USER

Setelah Anda membuat database:

sudo -u postgres createdb $USER

Ubah $USER nama pengguna sistem Anda.

Anda dapat melihat solusi lengkapnya di sini .

ruzenhack
sumber
8

Menjalankan ini pada baris perintah harus memperbaikinya

/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>

Alex Levine
sumber
1
Ini adalah satu-satunya hal yang berhasil untuk saya. Terima kasih!
Ramuan Meehan
4

Menjatuhkan postgresbasis data tidak terlalu penting. Database ini awalnya kosong dan tujuannya hanya untuk postgrespengguna untuk memiliki semacam "rumah" untuk terhubung, jika diperlukan.

Anda masih dapat membuatnya kembali dengan perintah SQL CREATE DATABASE postgres;

Perhatikan bahwa tutorial yang disebutkan dalam pertanyaan tidak ditulis dengan postgres.apppikiran. Berlawanan dengan PostgreSQL untuk Unix secara umum, postgres.appmencoba terlihat seperti aplikasi normal sebagai lawan dari layanan yang akan dijalankan oleh postgrespengguna khusus yang memiliki hak istimewa berbeda dari pengguna normal Anda. postgres.appdijalankan dan dikelola oleh akun Anda sendiri.

Jadi alih-alih perintah ini:, sudo -u postgres psql -U postgresitu akan lebih semangat postgres.app untuk hanya mengeluarkan:, psqlyang secara otomatis terhubung ke database yang cocok dengan nama pengguna Anda, dan dengan akun db dengan nama yang sama yang kebetulan superuser, jadi itu bisa melakukan apa saja yang bijaksana.

Daniel Vérité
sumber
Baik. Tetapi mengapa saya mendapatkan kesalahan ERROR: cannot drop the currently open databaseketika saya mencoba menghapus pengguna db? Jadi bukankah itu praktik yang baik untuk menggunakan postgres.app ini?
user805981
Anda tidak dapat menjatuhkan db saat tersambung ke sana. mengapa Anda ingin menghapusnya? Itu di sini untuk kenyamanan Anda.
Daniel Vérité
Saya hanya ingin melihat apakah saya bisa. Jadi itu seperti database default yang benar ketika saya boot psql dan postgres.app saya? Sekarang bagaimana dengan hak akses? Saya tidak dapat mengaturnya lagi? Saya melihat bahwa template0 dan template1 memiliki hak akses
user805981
@ user805981 Postgres.appadalah untuk tujuan pengujian dan pengembangan; ini adalah paket PostgreSQL dari Heroku yang dirancang untuk membuatnya lebih mudah bagi pengguna Mac yang berkembang dengan Ruby on Rails untuk menguji dengan PostgreSQL alih-alih SQLite default. Penggunaan Rail cenderung diuji dengan SQLite dan disebarkan ke PostgreSQL yang menyebabkan semua jenis masalah, jadi Heroku mencoba membuatnya lebih mudah untuk diuji pada PostgreSQL juga. Postgres.apptidak masalah untuk pengujian, tetapi saya tidak akan mempertimbangkan menggunakannya untuk produksi atau data nyata, itu bukan untuk apa.
Craig Ringer
4

Untuk apa nilainya, saya memiliki ubuntu dan banyak paket yang diinstal dan bertentangan dengan itu.

Bagi saya jawaban yang tepat adalah:

sudo -i -u postgres-xc
psql
softwareplay
sumber
2

Ini adalah satu-satunya yang memperbaikinya untuk saya:

createuser -s -U $USER
Bax
sumber
2
Ini membuat pengguna saat ini menjadi pengguna super sistem, bukan hanya pengguna super postgres. Saya akan mengatakan ini umumnya merupakan ide yang buruk karena menghindari kebijakan keamanan yang biasa. Anda harus pengguna sudountuk mendapatkan hak superuser sementara.
Sean Dawson
1

Pada sistem Ubuntu, saya membersihkan PostgreSQL dan menginstalnya kembali. Semua basis data dipulihkan. Ini memecahkan masalah bagi saya.

Saran - Ambil cadangan dari basis data agar lebih aman.

Gaurav Neema
sumber
0

Saya tidak berpikir bahwa sudo diperlukan di sini karena psql -l mengembalikan daftar database. Ini memberitahu saya bahwa initdb dijalankan di bawah pengguna saat ini, bukan di bawah pengguna postgres.

Anda bisa saja:

psql

Dan lanjutkan tutorialnya.

Saya menyarankan poin-poin umum AH untuk menciptakan pengguna postgres dan db karena banyak aplikasi mungkin berharap ini ada.

Penjelasan singkat:

PostgreSQL tidak akan berjalan dengan akses administratif ke sistem operasi. Alih-alih itu berjalan dengan pengguna biasa, dan untuk mendukung otentikasi rekan (meminta OS siapa yang mencoba menghubungkan) itu menciptakan pengguna dan db dengan pengguna yang menjalankan proses inisialisasi. Dalam hal ini, itu adalah pengguna normal Anda.

Chris Travers
sumber
membersihkan beberapa perbedaan penting dalam postgres. Terima kasih.
imsrgadich
0

Saya menjadi macet karena masalah ini dieksekusi brew services stop postgresqlsehari sebelumnya.
Hari berikutnya: brew services start postgresqltidak akan bekerja. Ini karena seperti yang ditunjukkan ketika Anda menginstal menggunakan homebrew. postgresql menggunakan launchd ... yang dimuat saat komputer Anda dihidupkan.

resolusi:
brew services start postgresql
Nyalakan kembali komputer Anda.

Michael Dimmitt
sumber
0

The \duperintah return:

Nama peran = postgres@implicit_files

Dan perintah itu postgres=# \password postgresmengembalikan kesalahan:

GALAT: peran "postgres" tidak ada.

Tapi itu postgres=# \password postgres@implicit_filesberjalan baik.

Juga setelah sudo -u postgres createuser -s postgresvarian pertama juga berfungsi.

Michael
sumber