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!
macos
postgresql
terminal
pengguna805981
sumber
sumber
brew services start postresql
dijalankan.Jawaban:
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
psql
perintah\du
? Pada sistem Ubuntu saya, baris yang relevan terlihat seperti ini:Jika tidak ada setidaknya satu peran dengan
superuser
, maka Anda memiliki masalah :-)Jika ada, Anda dapat menggunakannya untuk masuk. Dan melihat output dari
\l
perintah Anda : Izin untukuser
padatemplate0
dantemplate1
database sama seperti pada sistem Ubuntu saya untuk superuserpostgres
. Jadi saya pikir pengaturan Anda menggunakan sederhanauser
sebagai superuser. Jadi Anda bisa mencoba perintah ini untuk masuk:Jika
user
benar-benar superuser DB, Anda dapat membuat superuser DB lain dan database kosong pribadi untuknya:Tetapi karena pengaturan postgres.app Anda tampaknya tidak melakukan ini, Anda juga tidak boleh melakukannya. Sederhana menyesuaikan tutorial.
sumber
CREATE USER postgres WITH SUPERUSER PASSWORD 'password';
saya menggunakan postgres v10.homebrew
saat itu, Anda perlu menjalankannya/usr/local/opt/postgres/bin/createuser -s postgres
di terminal Anda/usr/local/opt/postgresql/bin/createuser -s postgres
/usr/local/opt/postgresql@11/bin/createuser -s postgres
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).
Beberapa skrip (misalnya, cadangan basis data yang dibuat dengan
pgdump
pada sistem Linux) dan tutorial akan menganggap superuser memiliki nama peran tradisionalpostgres
.Anda dapat membuat pemasangan lokal Anda terlihat sedikit lebih tradisional dan menghindari masalah ini dengan melakukan satu kali:
yang akan membuat FATAL: peran "postgres" tidak ada hilang.
sumber
/usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres
(untuk versi 9.2.4, tentu saja)./Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres
berlari dengan benar untukku.brew link postgresql
setelah instalasi, tidak perlu menambahkan seluruh path kecreateuser
, sederhanacreateuser -s postgres
akan bekerja dengan baikcreateuser -s postgres
bekerja untukku. Saya memasang postgres dengan HomebrewUntuk Mac:
brew install postgres
initdb /usr/local/var/postgres
/usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres
atau/usr/local/opt/postgres/bin/createuser -s postgres
yang hanya akan menggunakan versi terbaru.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 localhost
atau menggunakan PgAdmin untuk GUI.Secara default, pengguna
postgres
tidak akan memiliki kata sandi login.Periksa situs ini untuk artikel lainnya seperti ini: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7
sumber
brew services start postgresql
untuk memulai postgresatau membuat postgresl superuser hanya dengan
sumber
Ini terjadi ketika Anda menjalankan
initdb
dengan pengguna yang ID bukanpostgres
, tanpa menentukanpostgres
nama pengguna dengan--username=postgres
atau-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
postgres
dengan opsi--superuser
menggunakancreateuser
utilitas yang datang dengan Postgres. Utilitas dapat ditemukan dibin
direktori Postgres . misalnyaJika 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.
sumber
Bagi saya, kode ini berfungsi:
itu datang dari sini: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4
sumber
Saya harus menghapus
$PGUSER
:sumber
Pertama, Anda perlu membuat pengguna:
Setelah Anda membuat database:
Ubah
$USER
nama pengguna sistem Anda.Anda dapat melihat solusi lengkapnya di sini .
sumber
Menjalankan ini pada baris perintah harus memperbaikinya
/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>
sumber
Menjatuhkan
postgres
basis data tidak terlalu penting. Database ini awalnya kosong dan tujuannya hanya untukpostgres
pengguna 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.app
pikiran. Berlawanan dengan PostgreSQL untuk Unix secara umum,postgres.app
mencoba terlihat seperti aplikasi normal sebagai lawan dari layanan yang akan dijalankan olehpostgres
pengguna khusus yang memiliki hak istimewa berbeda dari pengguna normal Anda.postgres.app
dijalankan dan dikelola oleh akun Anda sendiri.Jadi alih-alih perintah ini:,
sudo -u postgres psql -U postgres
itu akan lebih semangat postgres.app untuk hanya mengeluarkan:,psql
yang 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.sumber
ERROR: cannot drop the currently open database
ketika saya mencoba menghapus pengguna db? Jadi bukankah itu praktik yang baik untuk menggunakan postgres.app ini?Postgres.app
adalah 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.app
tidak masalah untuk pengujian, tetapi saya tidak akan mempertimbangkan menggunakannya untuk produksi atau data nyata, itu bukan untuk apa.Untuk apa nilainya, saya memiliki ubuntu dan banyak paket yang diinstal dan bertentangan dengan itu.
Bagi saya jawaban yang tepat adalah:
sumber
Ini adalah satu-satunya yang memperbaikinya untuk saya:
sumber
sudo
untuk mendapatkan hak superuser sementara.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.
sumber
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:
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.
sumber
Saya menjadi macet karena masalah ini dieksekusi
brew services stop postgresql
sehari sebelumnya.Hari berikutnya:
brew services start postgresql
tidak 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.
sumber
The
\du
perintah return:Dan perintah itu
postgres=# \password postgres
mengembalikan kesalahan:Tapi itu
postgres=# \password postgres@implicit_files
berjalan baik.Juga setelah
sudo -u postgres createuser -s postgres
varian pertama juga berfungsi.sumber