psql: FATAL: “postgres” rolü mevcut değil


404

Ben bir postgres acemisiyim.

Mac için postgres.app dosyasını yükledim. Ben psql komutları ile oynuyordu ve yanlışlıkla postgres veritabanı düştü. İçinde ne olduğunu bilmiyorum.

Şu anda bir eğitim üzerinde çalışıyorum: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

Ve ben sıkıştım sudo -u postgres psql postgres

HATA MESAJI: psql: FATAL: role "postgres" does not exist

$ hangi psql

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

Bu çıktı 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)

O halde atmam gereken adımlar nelerdir? Psql ile ilgili her şeyi silmek ve her şeyi yeniden yüklemek?

Yardımlarınız için teşekkürler çocuklar!


1
Bilgisayar yeniden başlatılıyor. Launchd kaynağının brew services start postresqlyürütülmesini sağlar.
Michael Dimmitt

Yanıtlar:


410

NOT: Postgres'i homebrew kullanarak kurduysanız, aşağıdaki @ user3402754'teki yoruma bakın.

Hata mesajı olmadığını Not DEĞİL eksik bir veritabanı bahsetmek, bu kayıp bir rol bahsediyor. Daha sonra oturum açma işleminde eksik veritabanı üzerinde de rastlanabilir.

Ancak ilk adım eksik rolü kontrol etmektir: psqlKomutun çıktısı nedir \du? Ubuntu sistemimde ilgili hat şöyle görünüyor:

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

En az bir rol superuseryoksa, bir sorununuz var :-)

Eğer varsa, giriş yapmak için bunu kullanabilirsiniz. Ve çıkışında bakarak \lizinlerini: komuta userüzerine template0ve template1veritabanları süper benim Ubuntu sisteminde aynıdır postgres. Bu yüzden kurulumunuzun usersüper kullanıcı olarak kullanıldığını düşünüyorum . Böylece giriş yapmak için bu komutu deneyebilirsiniz:

sudo -u user psql user

userGerçekten DB süper kullanıcısı ise , onun için başka bir DB süper kullanıcı ve özel, boş bir veritabanı oluşturabilirsiniz:

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

Ancak postgres.app kurulumunuz bunu yapmadığı için, aynı zamanda yapmamalısınız. Basit öğretici uyarlayın.


10
Benim için kullanıcı oluşturulmuyordu - bunun yerine CREATE USER postgres WITH SUPERUSER PASSWORD 'password'; postgres v10 kullanıyorum.
arcseldon

229
Postgres'i bundan homebrewsonra kurduysanız /usr/local/opt/postgres/bin/createuser -s postgres, terminalinizde çalıştırmanız gerekir
user3402754

7
Çalıştırmak zorunda kaldım/usr/local/opt/postgresql/bin/createuser -s postgres
user1807782

1
@ user1807782 Günümü kurtardın; Sanırım bunu bir cevap olarak ilan etmelisin.
tolga

1
Postgres'in belirli bir sürümünü kullanıyorsanız, sürümü yola dahil etmeniz gerekir -/usr/local/opt/postgresql@11/bin/createuser -s postgres
Digitrance

264

Anahtar "mac için postgres.app yükledim" dir. Bu uygulama , yerel PostgreSQL kurulumunu, rol adı oturum açma (kısa) adınızla aynı olan bir veritabanı süper kullanıcısıyla kurar.

Postgres.app ilk başladığında, hiçbiri belirtilmediğinde psql için varsayılan veritabanı olan $ USER veritabanını oluşturur. Varsayılan kullanıcı şifresiz $ USER.

Bazı komut dosyaları (örneğin, bir pgdumpLinux sistemiyle oluşturulan bir veritabanı yedeklemesi ) ve öğreticiler, süper kullanıcının geleneksel rol adına sahip olduğunu varsayacaktır postgres.

Yerel kurulumunuzun biraz daha geleneksel görünmesini sağlayabilir ve bir kerede yaparak bu sorunlardan kaçınabilirsiniz:

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

bu FATAL yapacak : "postgres" rolü yok .


119
Homebrew'dan postgres kullanıyorsanız, /usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres( istediğiniz 9.2.4 sürümü için).
Roger Lipscombe

1
Postgres.app 9.3 için, dizinleri yeniden düzenledikleri görülüyor. Denedim: /Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres, ancak bu aynı hata mesajını oluşturdu: "createuser: veritabanı postgresine bağlanılamadı: FATAL: role" postgres "mevcut değil "
Michael Coxon

7
/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgresbenim için doğru koştu.
cjspurgeon

9
@RogerLipscombe brew link postgresqlKurulumdan sonra koşarsanız , tüm yolu eklemenize gerek yoktur createuser, basit bir createuser -s postgresharika çalışır
AlessioX

2
createuser -s postgresbenim için çalıştı. Homebrew ile postgres
kurdum

228

Mac için:

  1. Homebrew Yükle
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgresveya /usr/local/opt/postgres/bin/createuser -s postgresen son sürümü kullanacaktır.
  5. postgres sunucusunu manuel olarak başlat: pg_ctl -D /usr/local/var/postgres start

Sunucuyu başlangıçta başlatmak için

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

Şimdi, psql -U postgres -h localhostGUI için PgAdmin'i kurun, kullanın veya kullanın.

Varsayılan olarak kullanıcının postgresgiriş şifresi olmayacaktır.

Bunun gibi daha fazla makale için bu siteye bakın: https://medium.com/@Nithanaroy/instal-postgres-on-mac-18f017c5d3f7


3
En yeni demleme kurulumu ile brew services start postgresqlpostgres başlatmak için yapabilirsiniz
Automatico

<3 <3 <3 <3 <3 <3
Adeel Ahmad

bu en iyi cevap
Alejandro Pablo Tkachuk

39
createuser postgres --interactive

veya sadece bir süper kullanıcı postgresl yapın

createuser postgres -s


Benim pgadmin postgres kullanıcı sormaya devam ettiğinde bu cevabı yararlı buldum ve ben dint ile başlamak postgres rolü var, bu komut oluşturdu, ben pgadmin içine otomatik olarak üretilen pw ekledi ve sorun çözüldü!
olağandışı

Bu benim için çalışıyor .. ama bu şekilde: "kullanıcı postgres oluşturmak"
Roberto Rodriguez

31

Bu , kullanıcı adını veya ile belirtmeden initdbkimliği olmayan bir kullanıcıyla çalıştırdığınızda olur .postgrespostgres--username=postgres-U postgres

Daha sonra veritabanı kümesi, initdb'yi çalıştırmak için kullandığınız sistemin kullanıcı hesabıyla oluşturulur ve buna süper kullanıcı izinleri verilir.

Düzeltmek için, Postgres ile birlikte gelen yardımcı programı kullanarak postgresseçenekle adlandırılmış yeni bir kullanıcı oluşturmanız yeterlidir . Yardımcı program Postgres dizininde bulunabilir. Örneğin--superusercreateuserbin

createuser --superuser postgres

Özel bir ana bilgisayar adınız veya bağlantı noktanız varsa , uygun seçenekleri ayarladığınızdan emin olun .

İnitdb tarafından sizin için oluşturulan diğer kullanıcı hesabını silmeyi unutmayın.


2
Bu en bilgilendirici cevaptır.
MyWrathAcademia


16

Unsetmem gerekiyordu $PGUSER:

$ unset PGUSER
$ createuser -s postgres

1
Ah adamım, nihayet sorunun ne olduğunu anladım. Kullanıcı postgres olarak kullanıcı postgres oluşturmaya çalışıyoruz
Taras Matsyk

14

Öncelikle bir kullanıcı oluşturmanız gerekir:

sudo -u postgres createuser --superuser $USER

Bir veritabanı oluşturduktan sonra :

sudo -u postgres createdb $USER

$USERSistem kullanıcı adınızla değiştirin .

Komple çözümü burada görebilirsiniz .


8

Bunu komut satırında çalıştırmak düzeltmelidir

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


1
Benim için işe yarayan tek şey bu. Teşekkür ederim!
Herb Meehan

4

postgresVeritabanını bırakmak gerçekten önemli değil. Bu veritabanı başlangıçta boş ve amacı sadecepostgres kullanıcının ihtiyaç duyması halinde bağlanmak için bir tür "ev" bulundurmasıdır.

Yine de SQL komutuyla yeniden oluşturabilirsiniz CREATE DATABASE postgres;

Soruda belirtilen öğreticinin postgres.appakılda tutulmadığını unutmayın. Genel olarak Unix için PostgreSQL'in aksine , normal kullanıcınızdan farklı ayrıcalıklara sahip postgres.appözel bir postgreskullanıcı tarafından çalıştırılacak bir hizmetin aksine normal bir uygulama gibi görünmeye çalışır .postgres.appkendi hesabınız tarafından yönetilir ve yönetilir.

Bu komut yerine:, sudo -u postgres psql -U postgressadece sayı vermek için postgres.app ruhunda daha fazla olurdu: psqlotomatik olarak kullanıcı adınızla eşleşen bir veritabanına bağlanır ve süper kullanıcı olduğu için aynı adda bir db hesabıyla, izinler doğrultusunda her şeyi yapabilir.


Tamam. Ama neden ERROR: cannot drop the currently open databasekullanıcı db silmeye çalıştığımda bir hata alıyorum ? Peki bu postgres.app kullanmak iyi bir uygulama değil mi?
user805981

Bir db'yi bağlıyken bırakamazsınız. neden silmek istiyorsun? Rahatınız için burada.
Daniel Vérité

Sadece yapabileceğimi görmek istedim. Yani benim psql ve postgres.app önyükleme doğru bir varsayılan veritabanı gibi mi? Şimdi erişim ayrıcalıkları ne olacak? Artık ayarlayamıyorum? Template0 ve template1'in erişim ayrıcalıklarına sahip olduğunu görüyorum
user805981

@ user805981 Postgres.apptest ve geliştirme amaçlıdır; Heroku'dan, Ruby on Rails ile geliştirilen Mac kullanıcılarının varsayılan SQLite yerine PostgreSQL ile test etmelerini kolaylaştırmak için tasarlanmış bir PostgreSQL paketidir. Rails, SQLite ile test etme ve her türlü soruna neden olan PostgreSQL'e dağıtım yapma eğilimlerini kullanır, bu nedenle Heroku PostgreSQL üzerinde de test yapmayı kolaylaştırmaya çalıştı. Postgres.apptest için iyi, ancak üretim veya gerçek veriler için kullanmayı düşünmezdim, bunun için değil.
Craig Ringer

4

Ne için değer, ben ubuntu ve yüklü birçok paket var ve onunla çatışma gitti.

Benim için doğru cevap:

sudo -i -u postgres-xc
psql

2

Benim için düzelten tek kişi bu:

createuser -s -U $USER

2
Bu, geçerli kullanıcıyı yalnızca postgres süper kullanıcısı yerine sistem süper kullanıcısı yapar. Genel güvenlik politikalarını atlattığı için bunun genellikle kötü bir fikir olacağını söyleyebilirim. sudoGeçici süper kullanıcı ayrıcalıkları kazanmak için kullanıcı olmalısınız .
Sean Dawson

1

Ubuntu sisteminde PostgreSQL'i temizledim ve tekrar kurdum. Tüm veritabanları geri yüklenir. Bu benim için problemi çözdü.

Tavsiye - Daha güvenli olmak için veritabanlarının yedeğini alın.


0

Sudo burada gerekli olduğunu sanmıyorum çünkü psql -l veritabanlarının bir listesini döndürür. Bu bana initdb'nin postgres kullanıcısı yerine kullanıcının mevcut kullanıcısı altında çalıştırıldığını söylüyor.

Sadece şunları yapabilirsiniz:

psql

Ve eğiticiye devam edin.

AH'nin postgres kullanıcısı ve db'yi oluşturmanın genel noktalarını öneririm çünkü birçok uygulama bunun var olmasını bekleyebilir.

Kısa bir açıklama:

PostgreSQL, işletim sistemine yönetici erişimi ile çalışmaz. Bunun yerine sıradan bir kullanıcıyla çalışır ve eş kimlik doğrulamasını desteklemek için (bağlanmaya çalışan işletim sistemine soran), başlatma işlemini çalıştıran kullanıcıyla bir kullanıcı ve db oluşturur. Bu durumda normal kullanıcınızdı.


postgres'te birkaç önemli ayrımı temizler. Teşekkür ederim.
imsrgadich

0

Bir brew services stop postgresqlgün önce bu konuda takıldım .
Ertesi gün: brew services start postgresqlişe yaramaz. Bunun nedeni, homebrew kullanarak kurduğunuzda gösterildiği gibidir. postgresql, bilgisayarınız açıldığında yüklenen bir başlatma ... kullanır.

çözünürlük:
brew services start postgresql
Bilgisayarınızı yeniden başlatın.


0

\duKomut dönüş:

Rol adı = postgres@implicit_files

Ve bu komut postgres=# \password postgresdönüş hatası:

HATA: "postgres" rolü mevcut değil.

Ama bu postgres=# \password postgres@implicit_filesiyi gidiyor.

Ayrıca sudo -u postgres createuser -s postgresilk varyanttan sonra da çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.