psql: FATAL: database “<user>” bestaat niet

Ik gebruik de PostgreSql-app voor mac (http://postgresapp.com/). Ik heb het in het verleden op andere machines gebruikt, maar het geeft me wat problemen bij het installeren op mijn macbook. Ik heb de applicatie geïnstalleerd en ik heb uitgevoerd:

psql -h localhost

Het geeft terug:

psql: FATAL:  database "<user>" does not exist

Het lijkt erop dat ik de console niet eens kan draaien om de database te maken die hij probeert te vinden. Hetzelfde gebeurt als ik gewoon hardloop:

psql 

of als ik psql start vanuit het vervolgkeuzemenu van de toepassing:

Machinestatistieken:

  • OSX 10.8.4

  • psql (PostgreSQL) 9.2.4

Alle hulp wordt op prijs gesteld.

Ik heb ook geprobeerd PostgreSql te installeren via homebrew en ik krijg hetzelfde probleem. Ik heb ook de documentatiepagina van de applicatie gelezen waarop staat:

Wanneer Postgres.app voor het eerst opstart, wordt de $USER-database gemaakt,
wat de standaarddatabase is voor psql als er geen is opgegeven. De
standaardgebruiker is $USER, zonder wachtwoord.

Het lijkt er dus op dat de toepassing $USER niet aanmaakt, maar ik heb nu verschillende keren geïnstalleerd->verwijderd-opnieuw geïnstalleerd, dus het moet iets met mijn machine zijn.

Ik heb het antwoord gevonden, maar ik weet niet precies hoe het werkt, aangezien de gebruiker die in deze thread heeft geantwoord -> Postgresql laten draaien op Mac: Database “postgres” niet bestaanniet opgevolgd. Ik heb de volgende opdracht gebruikt om psql te openen:

psql -d template1

Ik laat deze onbeantwoord totdat iemand een verklaring kan geven waarom dit werkt.


Antwoord 1, autoriteit 100%

Het lijkt erop dat uw pakketbeheerder de database met de naam $user niet voor u heeft gemaakt. De reden dat

psql -d template1

voor u werkt, is dat template1 een database is die door postgres zelf is gemaakt en aanwezig is op alle installaties.
U kunt blijkbaar inloggen op template1, dus u moet een aantal rechten hebben die door de database aan u zijn toegewezen. Probeer dit bij een shell-prompt:

createdb

en kijk dan of je weer kunt inloggen met

psql -h localhost

Hiermee wordt eenvoudig een database gemaakt voor uw aanmeldingsgebruiker, wat volgens mij is wat u zoekt. Als createb mislukt, heb je niet genoeg rechten om je eigen database te maken en moet je uitzoeken hoe je het homebrew-pakket kunt repareren.


Antwoord 2, autoriteit 19%

Voer vanaf de terminal de opdracht uit in uw opdrachtpromptvenster. (Niet binnen psql).

createdb <user>

En probeer dan postgres opnieuw uit te voeren.


Antwoord 3, autoriteit 14%

Standaard probeert postgres verbinding te maken met een database met dezelfde naam als uw gebruiker. Om dit standaardgedrag te voorkomen, geeft u gewoon gebruiker en database op:

psql -U Username DatabaseName 

Antwoord 4, autoriteit 5%

  1. Log in als standaardgebruiker: sudo -i -u postgres
  2. Maak een nieuwe gebruiker: createuser --interactive
  3. Wanneer u wordt gevraagd om de rolnaam, voert u de linux-gebruikersnaam in en selecteert u Ja op de vraag van de supergebruiker.
  4. Nog steeds ingelogd als postgres-gebruiker, maak een database aan: createdb <username_from_step_3>
  5. Bevestig de fout(en) door het volgende in te voeren: psqlbij de opdrachtprompt.
  6. Uitvoer zou psql (x.x.x) Type "help" for help.

Antwoord 5, autoriteit 4%

Aanmelden met standaard template1 database:

#psql -d template1
#template1=# \l
  List of databases
   Name    |  Owner  | Encoding |   Collate   |    Ctype    |  Access privileges  
-----------+---------+----------+-------------+-------------+---------------------
 postgres  | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
 template1 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
(3 rows)

Maak een database met uw gebruikers-ID:

template1=# CREATE DATABASE gogasca WITH OWNER gogasca ENCODING 'UTF8';
CREATE DATABASE

Stop en log opnieuw in

template1=# \q
gonzo:~ gogasca$ psql -h localhost
psql (9.4.0)
Type "help" for help.
gogasca=# \l
                                List of databases
   Name    |  Owner  | Encoding |   Collate   |    Ctype    |  Access privileges  
-----------+---------+----------+-------------+-------------+---------------------
 gogasca   | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
 template1 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
(4 rows)

6, Autoriteit 2%

Ik heb geconfronteerd met dezelfde fout bij het openen van PostGresql op Mac

psql: FATAL:  database "user" does not exist

Ik vond deze eenvoudige opdracht om het op te lossen:

Method1

$ createdb --owner=postgres --encoding=utf8 user

en typ

psql

Methode 2:

psql -d postgres

7

Had hetzelfde probleem, een simpele psql -d postgresdeed het (typ het commando in de terminal)


Antwoord 8

Probeer-

psql -d postgres

Ik had hetzelfde probleem toen ik psql

. uitvoerde


Antwoord 9

Deze fout kan ook optreden als de omgevingsvariabele PGDATABASE is ingesteld op de naam van een database die niet bestaat.

In OSX zag ik de volgende fout bij het starten van psql vanuit het Postgress.app-menu:

psql: FATAL: database "otherdb" does not exist

De oplossing voor de fout was het verwijderen van export PGDATABASE=otherdbuit ~/.bash_profile:

Verder, als PGUSER is ingesteld op iets anders dan uw gebruikersnaam, zal de volgende fout optreden:

psql: FATAL: role "note" does not exist

De oplossing is om export PGUSER=notmete verwijderen uit ~/.bash_profile.


Antwoord 10

Aangezien deze vraag de eerste is in de zoekresultaten, zal ik hier toch een andere oplossing voor een ander probleem plaatsen, om geen dubbele titel te krijgen.

Dezelfde foutmelding kan verschijnen bij het uitvoeren van een querybestand in psqlzonder een database op te geven. Aangezien er geen use-statement is in postgresql, moeten we de database specificeren op de opdrachtregel, bijvoorbeeld:

psql -d db_name -f query_file.sql

Antwoord 11

Zoals de createdb-documentatiestelt:

De eerste database wordt altijd gemaakt door het initdb-commando wanneer het gegevensopslaggebied wordt geïnitialiseerd… Deze database wordt postgres genoemd.

Dus als bepaalde OS/postgresql-distributies dat anders doen, is het zeker niet de standaard/standaard (net geverifieerd dat initdbop openSUSE 13.1 de DB “postgres” aanmaakt, maar niet “<user&gt ;”). Om een lang verhaal kort te maken, wordt verwacht dat psql -d postgreswordt gebruikt bij het gebruik van een andere gebruiker dan “postgres”.

Uiteraard werkt het geaccepteerde antwoord, met createdbom een DB te maken met de naam van de gebruiker, ook, maar creëert een overbodige DB.


Antwoord 12

Ik weet niet zeker of het al in de antwoorden is toegevoegd, het antwoord van Anatolii Stepaniuk was erg nuttig, namelijk het volgende.

psql -U Username postgres # when you have no databases yet

Antwoord 13

had het probleem met het gebruik van de JDBC-driver, dus je hoeft alleen maar de database toe te voegen (misschien redundant, afhankelijk van de tool die je gebruikt) achter de hostnaam in de URL, b.v.
jdbc:postgres://<host(:port)>/<db-name>

verdere details zijn hier gedocumenteerd: http:// www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT


Antwoord 14

Ten eerste is het handig om een database te maken met dezelfde naam als uw huidige gebruik, om de fout te voorkomen wanneer u alleen de standaarddatabase wilt gebruiken en nieuwe tabellen wilt maken zonder de naam van een db expliciet te declareren.

Vervang “skynotify” door uw gebruikersnaam:

psql -d postgres -c "CREATE DATABASE skynotify ENCODING 'UTF-8';"

-d verklaart expliciet welke database als standaard moet worden gebruikt voor SQL-instructies die niet expliciet een db-naam bevatten tijdens deze interactieve sessie.

BASIS OM EEN DUIDELIJK BEELD TE KRIJGEN VAN WAT UW PostgresQL-SERVER erin heeft.

U moet verbinding maken met een bestaande database om psql interactief te kunnen gebruiken. Gelukkig kun je psql om een lijst met databases vragen:

psql -l

.

                                         List of databases
               Name               | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
----------------------------------+-----------+----------+-------------+-------------+-------------------
 skynotify                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 myapp_dev                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres                         | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 ruby-getting-started_development | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/skynotify          +
                                  |           |          |             |             | skynotify=CTc/skynotify
 template1                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/skynotify          +
                                  |           |          |             |             | skynotify=CTc/skynotify
(6 rows)

Hiermee wordt de interactieve console NIET gestart, maar wordt alleen een op tekst gebaseerde tabel naar de terminal uitgevoerd.

Zoals een ander antwoord zegt, wordt postgres altijd gemaakt, dus u moet het gebruiken als uw failsafe-database als u de console gewoon aan de slag wilt met andere databases. Als het er niet is, maak dan een lijst van de databases en gebruik er dan een.

Selecteer op dezelfde manier tabellen uit een database:

psql -d postgres -c "\dt;"

Mijn “postgres”-database heeft geen tabellen, maar elke database die dat wel doet, zal een op tekst gebaseerde tabel naar de terminal uitvoeren (standaard uit).

En voor de volledigheid kunnen we ook alle rijen uit een tabel selecteren:

psql -d ruby-getting-started_development -c "SELECT * FROM widgets;"

.

id | name | description | stock | created_at | updated_at 
----+------+-------------+-------+------------+------------
(0 rows)

Zelfs als er nul rijen worden geretourneerd, krijgt u de veldnamen.

Als uw tabellen meer dan een dozijn rijen hebben, of als u het niet zeker weet, is het handiger om te beginnen met een telling van rijen om te begrijpen hoeveel gegevens zich in uw database bevinden:

psql -d ruby-getting-started_development -c "SELECT count(*) FROM widgets;"

.

count 
-------
     0
(1 row)

En verwar die “1 rij” je niet, het geeft alleen aan hoeveel rijen worden geretourneerd door de query, maar de 1 rij bevat het aantal dat je wilt, wat in dit voorbeeld 0 is.

OPMERKING: een database die is gemaakt zonder dat een eigenaar is gedefinieerd, is eigendom van de huidige gebruiker.


Antwoord 15

Maak verbinding met postgres via bestaande superuser.

Maak een database aan met de naam van de gebruiker waarmee u verbinding maakt met postgres.

create database username;

Probeer nu verbinding te maken via gebruikersnaam


Antwoord 16

Stap 1:

psql -d template1

nu zou je op de psql-terminal moeten zijn

Stap 2:

CREATE DATABASE username;

optioneel: typ op psql-terminal \lsom alle databases weer te geven

Stap 3:

psql -h localhost

nu zou je verbonden moeten zijn


Antwoord 17

Ik heb een aantal van deze oplossingen geprobeerd, maar ze werkten niet helemaal (hoewel ze erg op de goede weg waren!)

Uiteindelijk was mijn fout:

FATAL: wachtwoordverificatie mislukt voor gebruiker

toen ik het volgende commando uitvoerde: psql

Dus toen heb ik deze twee commando’s uitgevoerd:

dropdb()
createdb()

OPMERKING: dit zalde db verwijderen, maar ik had het niet nodig en om de een of andere reden had ik geen toegang meer tot pqsl, dus heb ik het verwijderd en opnieuw gemaakt.
Daarna werkte psqlweer.


Antwoord 18

u kunt de databasenaam instellen waarmee u verbinding wilt maken in env variabele PGDATABASE=database_name. Als u deze psql niet instelt, is de standaard databasenaam als gebruikersnaam. nadat je dit hebt ingesteld, hoef je niet te makenb


Antwoord 19

Had dit probleem bij het installeren van postgresql via homebrew.

Moest de standaard “postgres”-supergebruiker maken met:

createuser –interactive postgres antwoord op voor supergebruiker

createuser –interactieve gebruiker antwoord y op voor supergebruiker


Antwoord 20

Ik had nog steeds het bovenstaande probleem na het installeren van postgresql met homebrew – ik heb het opgelost door /usr/local/bin in mijn pad te zetten vóór /usr/bin


Antwoord 21

Dit is een fundamenteel misverstand. Gewoon typen:

pgres

zal resulteren in deze reactie:

pgres <db_name> 

Het zal zonder fouten lukken als de gebruiker de machtigingen heeft om toegang te krijgen tot de database.

Je kunt ingaan op de details van de geëxporteerde omgevingsvariabelen, maar dat is niet nodig. Dit is te basaal om om een andere reden te mislukken.

Other episodes