it-swarm-eu.dev

PostgreSQL běží lokálně, ale nemůžu se připojit. Proč?

Nedávno jsem aktualizoval svůj počítač z Mac OS X Lion (10.7.4) na Mountain Lion (10.8) a myslím, že to přineslo moji instalaci PostgreSQL. Byl nainstalován původně přes Homebrew. Nejsem DBA, ale doufám, že mi někdo řekne, jak to vyřešit.

Nemohu se připojit (ale dokázal jsem před lezeckým lvem):

$ psql -U Rails -d myapp_development
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Ale Postgres stále jasně běží:

$ ps aux | grep postgres
meltemi          2010   0.0  0.0  2444124   5292   ??  Ss   Wed01PM   0:00.02 postgres: Rails myapp_development [local] idle    
meltemi           562   0.0  0.0  2439312    592   ??  Ss   Wed12PM   0:02.28 postgres: stats collector process       
meltemi           561   0.0  0.0  2443228   1832   ??  Ss   Wed12PM   0:01.57 postgres: autovacuum launcher process       
meltemi           560   0.0  0.0  2443096    596   ??  Ss   Wed12PM   0:02.89 postgres: wal writer process       
meltemi           559   0.0  0.0  2443096   1072   ??  Ss   Wed12PM   0:04.01 postgres: writer process       
meltemi           466   0.0  0.0  2443096   3728   ??  S    Wed12PM   0:00.85 /usr/local/bin/postgres -D /usr/local/varpostgres -r /usr/local/var/postgres/server.log

A reaguje na dotazy (na testovací i vývojový db) z místní aplikace Rails)

  User Load (0.2ms)  SELECT "users".* FROM "users" 
  Rendered users/index.html.haml within layouts/application (1.3ms)

Zdá se, že neexistuje /var/pgsql_socket/ adresář, natož adresář /var/pgsql_socket/.s.PGSQL.5432 soubor soketu uvedený výše!?! Možná to instalace Mountain Lion zničila?

$ ls -l /var/ | grep pg
drwxr-x---   2 _postgres  _postgres    68 Jun 20 16:39 pgsql_socket_alt

Jak to mohu vyřešit?

32
Meltemi

Zjistil jsem, že mám extrémně podobný problém, a to, že postgres otevíral soket v /var/pgsql_socket_alt, Kde žádný z mých softwarů neočekává, že bude vypadat, ale řešení mého problému nebylo jen problém s mým $PATH.

Musel jsem vytvořit adresář /var/pgsql_socket, Chown to pro sebe a nastavit unix_socket_directory V postgresql.conf (Umístěné v /usr/local/var/postgres) Do tohoto adresáře, pak použít pg_ctl Binární v /usr/local/bin Pro úspěšné spuštění správného postgresového serveru (což je místo, kde přichází $PATH - ujistěte se, že which pg_ctl Se rozhodne na /usr/local/bin/pg_ctl) , nebo to prostě explicitně nazývejte).

To by mohlo pomoci ostatním uživatelům, kteří najdou tuto otázku pomocí zmínky /var/pgsql_socket_alt.

30
Will

Věrohodné a typické vysvětlení by bylo, že psql, které přichází s homebrewem, je v /usr/local/bin/psql které se liší od toho, který by byl ve vaší $ PATH, jako /usr/bin/psql (dodáván s OS X). Můžete zkusit celou cestu:

$ /usr/local/bin/psql -U Rails -d myapp_development

Ve výstupu ps vaší otázky je také něco neobvyklého: server postgres běží pod uživatelem meltemi Unix, zatímco obecně se používá vyhrazený uživatel postgres Unix pro to.

8
Daniel Vérité

Nevím o žádném konfiguračním souboru pro klienta psql. Psql však respektuje řadu proměnných prostředí, které korelují s možnostmi příkazového řádku.

Chcete-li, aby psql automaticky používal soket podle vašeho výběru, můžete nastavit proměnnou PGHOST do adresáře obsahujícího soket. tj.

PGHOST=/var/pgsql_socket_alt
psql -d mydatabsase
4
happynix

Snaž se:

psql -U Rails -d myapp_development -h localhost

nebo

psql -U Rails -d myapp_development -h 127.0.0.1
3
Miguel

Pozdě, ale našel jsem to užitečné: http://tammersaleh.com/posts/instal-postgresql-for-Rails-3-1-on-lion

To bylo pro Lion, ale měl jsem stejné problémy jako ten v tomto vláknu po upgradu z 10.6.8 na Mountain Lion a instalaci PostgreSQL přes HomeBrew dříve, zatímco 10.6.8. Také jsem měl tajemné /var/pgsql_socket_alt upgrade složky, ale právě jsem ji odstranil a vytvořil /var/pgsql_socket jak navrhuje @wolftron. To však nebylo konečné řešení.

Pokud jsem odešel unix_socket_directory blank/commented in postgresql.conf, všechny projekty existující před upgradem by si stěžovaly, že soket v /var/pgsql_socket chyběl. Ale pokud jsem změnil conf a hard-kódované var/pgsql_socket, jakékoli nové projekty si stěžují, že soket v /tmp chyběl. Velmi frustrující ... dokud jsem znovu nenainstaloval pg gem v projektu před 10.8 (gem uninstall pg && gem install pg) a vlevo unix_socket_directory komentoval soubor conf. Po rychlém pg_ctl k restartování serveru fungovaly nové i staré projekty. Můj pgsql soket žije v /tmp nyní, fwiw.

Sidenote: pokud používáte activerecord-postgresql-adapter gem, nejprve jej odinstalujte, poté znovu nainstalujte pg a poté nainstalujte activerecord-postgresql-adapter znovu.

3
Foot

Jen jsem se právě přihlásil k dba SE, takže se nezdá, že by mohl komentovat příslušný příspěvek (co je kec!).

Nicméně jsem si byl jistý, že jsem na stejné lodi jako @thure. Ujistil jsem se, že/usr/local/bin byl dříve v mé PATH než/usr/bin, zkontroloval, které binární soubory Shell hashed s which a type atd.

Viděl jsem stejné příznaky jako @thure. Pak jsem měl zjevení; Uvědomil jsem si, že jsem přestavěl drahokam pg (používám Ruby) do Shell, jehož PATH byl nepříznivě ovlivněn Macovým path_helperem (který je spuštěn z/etc/profile a před/usr/bin před/usr/local/bin).

Odinstaloval jsem pg a přeinstaloval ho do Shell, jehož PATH byla správná. Najednou jsem se mohl připojit!

Nezapomeňte tedy překompilovat své jazykové vazby mezi lidmi a nechat je najít správnou kopii (pravděpodobně) pg_config.

2
Graham Ashton

Tady je, 2016, El Capitan je venku a Apple neustále mění věci. Postgres je nainstalován jako součást operačního systému a soubor postgres config nastavuje vlastnost unix_socket_directories v postgresql.conf soket je v /tmp/.s.PGSQL.5432. Problém se mi podařilo vyřešit následujícím způsobem:

Sudo ln -s /tmp /var/pgsql_socket

Doufám, že to někomu pomůže.

1
rdiddly

Zjistil jsem, že symlinking skutečné umístění na očekávané umístění fungovalo dobře:

Sudo ln -s /var/pgsql_socket_alt /var/pgsql_socket

v souladu s odpovědí @thure, ale jednodušší.

1
Danny Roberts

Nemohu rychle najít odkaz, kde jsem našel tento nugget, ale fungovalo to pro mě.

export PGHOST = localhost

Oh, tady je odkaz. https://stackoverflow.com/questions/13868730/socket-file-var-pgsql-socket-s-pgsql-5432-missing-in-mountain-lion-os-x-ser

1
eyemana

Vyhledejte správný soubor soketu

find / -name .s.PGSQL.5432 -ls

Z výsledku získejte cestu k souboru a použijte cestu s parametrem "-h" v příkazu psql

Takto se například připojím k databázi kalendáře a kontaktů serveru MacOS (v rámci relace ssh k serveru):

Sudo psql -U _calendar -h /private/var/run/caldavd/PostgresSocket/ -d caldav

Poté by se k připojení použil soubor soketu na cestě.

1
Olaf Seifert

Našel jsem tuto odpověď: https://stackoverflow.com/questions/10763143/in-Rails-couldnt-create-database-for-adapter-postgresql A jak jednoduché to bylo, fungovalo to mě ... běžel $bundle update a začalo to fungovat znovu.

1
Erik Trautman

Ve výchozím nastavení se zdá, že se postgres pokouší připojit přes sokety unixové domény. NIX DOMAIN SOCKET

Stalo se mi to, když jsem na doku provozoval instanci postgresu. Musíte vidět, jaké připojení váš server přijímá. Pro mě to bylo jasně TCP a ne unixový soket domény).

Přidání příznaku pro přijetí Host přesměrovalo připojení na správnou cestu a problém vyřešilo.

psql -U username -p port -h Host

PS: Unixové doménové sokety fungují na úrovni jádra a připojení nemusí procházet všemi jazzovými potřebami pro připojení TCP). Jsou velmi rychlé a efektivní, pokud se chcete připojit k vašemu vlastní stroj z jiného procesu jako součást meziprocesové komunikace.

1
Sudip Bhandari

Při pokusu o spuštění příkazu psql na příkazovém řádku jsem dostal stejnou chybu. Ukázalo se, že mé řešení bylo mnohem jednodušší. V konfiguračním souboru jsem správně nakonfiguroval naslouchací port: /etc/postgresql/9.4/main/postgres.conf . Změnil jsem port z portu = 5432 na port = 5433. Když jsem jej změnil zpět na 5432, fungovalo to podle očekávání.

Chcete-li otestovat, zda jste udělali něco podobného, ​​můžete spustit $ psql -p5433 Pro příkaz psql existuje celá řada užitečných možností, které najdete zde: http://www.postgresql.org/docs/9.4/static/app-psql.html so že si můžete vyzkoušet své zvláštní nesprávné nastavení OWN. Samozřejmě můžete jednoduše odstranit poslední sadu konfiguračních změn ze souborů * .conf a otestovat, zda jsou zdrojem vašeho problému. Myslím, že se určitě vyplatí vyzkoušet, než se začnete hádat s oprávněními k souborům a vlastnictvím. (Jen nezapomeňte /etc/init.d/postgresql restart)

Co jsem NELZE najít, byl konfigurační soubor, který nastavuje výchozí hodnoty pro příkaz CLI psql. Může se k tomu někdo vyjádřit, prosím?

Pro mě se vždy vracím ke svému prvnímu principu programování: „Obvykle jsem zdrojem dané chyby!“

0