Pengguna Postgres tidak ada?

92

Saya baru saja menginstal Postgres dan telah mengutak-atiknya dan berbagai konfigurasi selama 1-2 jam.

Saya terjebak karena tidak dapat mengubah ke pengguna postgres

$ su - postgres menghasilkan kesalahan berikut: su: unknown login: postgres

$ sudo -u postgres psql menghasilkan kesalahan berikut: sudo: unknown user: postgres

Upaya ini dilakukan sebagai pengguna biasa. Mencoba mereka sebagai root memiliki hasil yang sama persis. Saya telah menginstal postgres melalui Homebrew di OS X, dan saya telah membaca instruksinya berkali-kali.

krystah
sumber
Apakah Anda hanya mencoba menjalankan psql?
danielM
Ya, saya ingin menjalankan sebagai postgrespengguna yang tepat .
krystah
Pada beberapa jenis Mac OS X, dengan beberapa metode instalasi, saya pikir pengguna dibuat sebagai postgres_gantinya. Catatan mengikuti garis bawah. Selain itu, apakah Anda yakin (atau penginstal) benar-benar membuat instance PostgreSQL dan memulai database?
Craig Ringer
1
Saya terlalu tidak dapat beralih ke postgrespengguna. Memecahkan masalah setelah menginstal postgresql-serverpaket.
sergio 郝海东 冠状 病 六四 事件 法轮功

Jawaban:

89

psql: Masukkan saya dengan nama pengguna default saya

psql -U postgres: Masukkan saya sebagai pengguna postgres

Sudo sepertinya tidak diperlukan untukku.

Saya menggunakan Postgres.app untuk database postgres OS X saya. Ini menghilangkan sakit kepala karena memastikan penginstalan berfungsi dan server database diluncurkan dengan benar. Lihat di sini: http://postgresapp.com

Edit: Penghargaan untuk @Erwin Brandstetter karena mengoreksi penggunaan argumen saya.

danielM
sumber
8
Saya menginstal menggunakan Brew dan itu tidak membuat pengguna yang disebut postgres atau _postgres (sejauh yang saya bisa lihat) jadi ini gagal untuk saya. Solusi @kangkyu menjelaskan dan memandu Anda melalui masalah - dengan asumsi Anda tidak memiliki pengguna postgres maka: psql postgresdan psql -d postgres.
notapatch
21

Oleh psql --help, ketika Anda tidak mengatur opsi untuk nama database (tanpa -dopsi) itu akan menjadi nama pengguna Anda, jika Anda tidak melakukannya -U, nama pengguna database akan menjadi nama pengguna Anda juga, dll.

Tetapi dengan initdb(untuk membuat database pertama) perintah itu tidak memiliki nama pengguna Anda sebagai nama database. Ini memiliki database bernama postgres. Database pertama selalu dibuat oleh perintah initdb ketika area penyimpanan data diinisialisasi. Database ini disebut postgres.

Jadi jika Anda tidak memiliki database lain yang bernama nama pengguna Anda, Anda perlu melakukan psql -d postgresperintah psql agar berfungsi. Dan tampaknya itu memberi -dopsi secara default, psql postgresjuga berfungsi.

Jika Anda telah membuat nama database lain yang sama dengan nama pengguna Anda, (itu harus dilakukan dengan createdb) maka Anda psqlhanya dapat memerintahkan . Dan tampaknya nama pengguna database pertama ditetapkan sebagai nama pengguna mesin Anda oleh brew.

psql -d <first database name> -U <first database user name>

atau,

psql -d postgres -U <your machine username>
psql -d postgres

akan bekerja secara default.

kangkyu
sumber
17

OS X cenderung mengawali nama akun sistem dengan "_"; Anda tidak mengatakan versi OS X yang Anda gunakan, tetapi setidaknya di 10.8 dan 10.9 pengguna _postgres ada dalam penginstalan default. Perhatikan bahwa Anda tidak akan dapat sumengakses akun ini (kecuali sebagai root), karena tidak memiliki kata sandi. sudo -u _postgres, di sisi lain, seharusnya bekerja dengan baik.

Gordon Davisson
sumber
Terima kasih! Inilah jawaban yang saya cari. Apakah ada yang bisa saya lakukan untuk mengganti nama pengguna menjadi hanya "postgres"? Masuk karena pengguna _postgres itu mengarah ke psql yang mengeluh bahwa pengguna "_postgres" tidak ada. Saya mencoba memulihkan instance postgres bersih dengan file cadangan dari database lain
Chris Reyes - he-him
1
@ChrisReyes Mengubah nama akun sistem dapat merusak komponen sistem yang menggunakannya, jadi saya sangat menyarankan untuk tidak melakukannya. Anda dapat membuat akun pengguna lain dengan nama "postgres" dan menggunakan itu, tetapi jika saya mengerti benar (yang mungkin saya tidak), yang Anda hadapi adalah bahwa akun pengguna dalam database postgres tidak bernama _postgres. AIUI, nama akun dalam DB terpisah dari nama akun sistem, jadi seharusnya tidak ada masalah saat menjalankan instans DB di bawah akun sistem "_postgres", dan membuka DB tersebut dengan akun basis data "postgres".
Gordon Davisson
4
psql -U postgres

Bekerja dengan baik untuk saya dalam kasus nama db: postgres & nama pengguna: postgres. Jadi Anda tidak perlu menulis sudo.

Dan dalam kasus db lain, Anda dapat mencoba

psql -U yourdb postgres

Seperti yang diberikan dalam bantuan Postgres:

psql [OPTION]... [DBNAME [USERNAME]]
cloudberry
sumber
Kasus saya: $ psql -U postgresmenghasilkan keluaran psql: FATAL: role "postgres" does not exist, tetapi psql postgresberfungsi.
Frozen Flame
4

Saya mendapatkan kesalahan yang sama persis dengan kryshah dengan su - postgresdan sudo -u postgres psql. Jawaban DanielM juga memberikan kesalahan.

Keluaran saat pengaturan salah

Namun jawaban dari komentar przbabu.

masi$ psql
psql: FATAL:  database "masi" does not exist
masi$ psql -U postgres
psql: FATAL:  role "postgres" does not exist
masi$ psql postgres
psql (9.4.1)
Type "help" for help.

Saya pikir beberapa bagian dari masalah ini mungkin ada dalam pengaturan pemilik di OSX

masi$ ls -al /Users/
total 0
drwxr-xr-x   7 root      admin  238 Jul  3 09:50 .
drwxr-xr-x  37 root      wheel 1326 Jul  2 19:02 ..
-rw-r--r--   1 root      wheel    0 Sep 10  2014 .localized
drwxrwxrwt   7 root      wheel  238 Apr  9 19:49 Shared
drwxr-xr-x   2 root      admin   68 Jul  3 09:50 postgres
drwxr-xr-x+ 71 masi      staff 2414 Jul  3 09:50 masi

tapi melakukan sudo chown -R postgres:staff /Users/postgresmemberi chown: invalid user: ‘postgres:staff’.

Singkatnya, ini bukanlah solusi masalahnya. Gunakan alat yang disediakan oleh instalasi postgres untuk membuat pengguna dan database.

Untuk mendapatkan pengaturan dan keluaran yang benar

Ada perintah khusus setelah instalasi postgres untuk menambahkan pengguna baru ke sistem database. Setelah initdb, jalankan perintah berikut seperti yang dijelaskan di sini

createuser --pwprompt postgres
createdb -Opostgres -Eutf8 masi_development
psql -U postgres -W masi_development

Untuk menghindari permintaan kata sandi setiap saat, Anda memiliki tiga pilihan seperti yang dijelaskan di sini .

Léo Léopold Hertz 준영
sumber
2

Bagi saya Ini adalah solusi di macOS Instal ulang psql

brew install postgres

Mulai server PostgreSQL

pg_ctl -D /usr/local/var/postgres start

Inisialisasi DB

initdb /usr/local/var/postgres

Jika perintah ini menimbulkan kesalahan, rm file database lama dan jalankan kembali perintah di atas

rm -r /usr/local/var/postgres

Buat database baru

createdb postgres_test
psql -W postegres_test

Anda akan masuk ke db ini dan dapat membuat pengguna di sini untuk masuk

Adnan Fayaz
sumber
0

Solusinya sederhana:
masuk sebagai root
dan setelah:

su - postgres

psql
el fuser
sumber