套接字文件“/var/pgsql_Socket/. s.PGSQL.5432”在 Mountain Lion (OS X Server)中丢失

我刚刚用 OS X 服务器把我的 MacMini 服务器从 Lion 服务器升级到 Mountain Lion。我在 PostgreSQL 上遇到了与去年第一次安装 Lion Server 时相同的问题。

当我尝试执行任何类型的 PostgreSQL 终端命令时,我都会收到下面这个多年来一直存在的臭名昭著的错误消息:

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"?

我在尝试更改 _ postgres 的密码时得到了这个错误。我尝试了几个命令,但得到了同样的错误。我刚重启了我的服务器,但是不走运。我以 root 身份登录查看/var/pgsql _ socket,文件夹是空的。文件夹/var/pgsql _ socket _ alt 也是空的。

我在网上查过了。然而,几乎所有我读过的解决方案,包括 Stack Overflow,都建议删除并重新安装 PostgreSQL。我不知道,但这似乎不是一个合理的选择,因为服务器应用程序上的几个选项使用 PostgreSQL。我联系了苹果企业支持(没有达成协议) ,我被告知我的问题将由开发人员解决,这将花费695美元。

我有一个网站,现在下降,因为我不能重建它。我不知道现在该向谁求助。我会继续上网看看能不能找到点什么。然而,我希望有人可以给我一个答案快,这样我就可以重建我的数据库。

更新: 2012年12月13日15:33 GMT-6

下面是 ps auwx | grep postg 的输出:

_postgres      28123   0.0  0.1  2479696   7724   ??  Ss    3:01PM   0:00.04 /Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D /Library/Server/PostgreSQL For Server Services/Data -c listen_addresses= -c log_connections=on -c log_directory=/Library/Logs/PostgreSQL -c log_filename=PostgreSQL_Server_Services.log -c log_line_prefix=%t  -c log_lock_waits=on -c log_statement=ddl -c logging_collector=on -c unix_socket_directory=/Library/Server/PostgreSQL For Server Services/Socket -c unix_socket_group=_postgres -c unix_socket_permissions=0770
server1        28216   0.0  0.0  2432768    620 s000  R+    3:02PM   0:00.00 grep postg
_postgres      28138   0.0  0.0  2439388    752   ??  Ss    3:01PM   0:00.01 postgres: stats collector process
_postgres      28137   0.0  0.0  2479828   1968   ??  Ss    3:01PM   0:00.00 postgres: autovacuum launcher process
_postgres      28136   0.0  0.0  2479696    544   ??  Ss    3:01PM   0:00.00 postgres: wal writer process
_postgres      28135   0.0  0.0  2479696    732   ??  Ss    3:01PM   0:00.01 postgres: writer process
_postgres      28134   0.0  0.0  2479696    592   ??  Ss    3:01PM   0:00.00 postgres: checkpointer process
_postgres      28131   0.0  0.0  2439388    368   ??  Ss    3:01PM   0:00.00 postgres: logger process

更新: 2012年12月13日18:10 GMT-6

经过激烈的网络搜索,这个视频被发现。我能够让 PostgreSQL 工作并删除错误。我能够使用 pgadmin 和 phppgadmin 连接。我正要回狮子服务器,因为纯粹的挫折。现在我不需要了。

Http://www.youtube.com/watch?v=y1c7wfmmkz4

120639 次浏览

Can you check your postgresql.conf file ??

On what port your postgres is running ??

I think it is not running on port 5432.If not change it to 5432

OR on terminal use

psql -U  postgres -p YOUR_PORT_NUMBER database_name

It took me a while but I was able to get this working finally after going through the suggestions offered and additional web searches being done. I used the information in the following YouTube video created by Mactasia:

http://www.youtube.com/watch?v=y1c7WFMMkZ4

When I did this I saw the file with .lock as the extension. However I still got the error when I tried to start the Rails Server when I resumed working on my Rails application using PostgreSQL. This time I got a permission denied error. This is when I remembered that not only did I have to change listen_addresses in the plist but I also had to change unit_socket_permissions to 0777. I also logged in as root to change the permissions on the var/pgsql_socket folder where I could access it at the user level. Postgres is working fine now. I am in the process of reloading my data from my SQL backup.

What I did not understand was that when I had wiki turned on PostgreSQL was supposedly working when I did a sudo serveradmin fullstatus postgres but I still got the error. Oh well.

I was able to add the following to my .bash_profile to prevent the error:

export PGHOST=localhost

This works because:

If you omit the host name, psql will connect via a Unix-domain socket to a server on the local host, or via TCP/IP to localhost on machines that don't have Unix-domain sockets.

Your OS supports Unix domain sockets, but PostgreSQL's Unix socket that psql needs either doesn't exist or is in a different location than it expects.

Specifying a hostname explicitly as localhost forces psql to use TCP/IP. Setting an environment variable PGHOST is one of the ways to achieve that. It's documented in psql's manual.

I was able to solve by simply filling in 127.0.0.1 for the PostgreSQL host address rather than leaving it blank. (Django Example)

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'database_name',
'USER': 'database_user',
'PASSWORD': 'pass',
'HOST': '127.0.0.1',
'PORT': '',
}
}

I had this problem with Django.

Fix it by explicitly setting your hostname to "localhost".

Try paste in console this:

$ mkdir /var/pgsql_socket/


$ ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/

Open 'postgresql.conf' in you favourite editor. Look for the variable 'unix_socket_directories', it will most likely look like this:

unix_socket_directories = '/private/tmp/'

Change the line to this:

unix_socket_directories = '/var/pgsql_socket/'

Note if you want the socket files in more than one directory comma separate them.

File permissions are restrictive on the Postgres db owned by the Mac OS. These permissions are reset after reboot, or restart of Postgres: e.g. serveradmin start postgres.

So, temporarily reset the permissions or ownership:

sudo chmod o+rwx /var/pgsql_socket/.s.PGSQL.5432
sudo chown "webUser"  /var/pgsql_socket/.s.PGSQL.5432

Permissions resetting is not secure, so install a version of the db that you own for a solution.

If you have the above problem but you have upgraded from Yosemite, then a different approach is needed as the upgrade solution can destroy some files. More details are at `pg_tblspc` missing after installation of latest version of OS X (Yosemite or El Capitan).

As mentioned by others in the comments, a really simple solution to this issue is to declare the database 'host' within the database configuration. Adding this answer just to make it a little more clear for anyone reading this.

In a Ruby on Rails app for example, edit /config/database.yml:

development:
adapter: postgresql
encoding: unicode
database: database_name
pool: 5
host: localhost

Note: the last line added to specify the host. Prior to updating to Yosemite I never needed to specify the host in this way.

Hope this helps someone.

Cheers

A much more simple solution (thanks to http://daniel.fone.net.nz/blog/2014/12/01/fixing-connection-errors-after-upgrading-postgres/) . I had upgraded to postgres 9.4. In my case, all I needed to do (after a day of googling and not succeeding)

gem uninstall pg
gem uninstall activerecord-postgresql-adapter
bundle install

Restart webrick, and done!

apt-get install postgres-xc-client
apt-get install postgres-xc

First remove the installed postgres:

sudo apt-get purge postgr*
sudo apt-get autoremove

Then install 'synaptic':

sudo apt-get install synaptic
sudo apt-get update

Then install Postgres

sudo apt-get install postgresql postgresql-contrib

i make in word by doing this:

dpkg-reconfigure locales

and choose your preferred locales

pg_createcluster 9.5 main --start

(9.5 is my version of postgresql)

/etc/init.d/postgresql start

and then it word!

sudo su - postgres
psql
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"?

I kept on getting the above error and none of the above solutions worked for me. Finally the following solution solved my problem on Mac OS X

Install postgres using brew

brew install postgres

Install brew services

brew tap homebrew/services

To start postgres as a background service

brew services start postgresql

To stop postgres manually

brew services stop postgresql

We can also use brew services to restart Postgres

brew services restart postgresql

Check for the status of the database:

service postgresql status

If the database is not running, start the db:

sudo service postgresql start

I just created a new cluster and that worked for me, I was using (PostgreSQL) 9.3.20:

sudo pg_createcluster 9.3 main --start

check the postgres server is running with following code

sudo service postgresql status

if the postgres server is inactive, write the following command.

sudo service postgresql start

I got this error after my computer froze and rebooted on its own. The solution for me was not found on this page, rather on another very highly rated SO question with the same error psql: could not connect to server: No such file or directory (Mac OS X). The answer: just delete this file /usr/local/var/postgres/postmaster.pid, then brew services restart postgresql did the trick. Heed the warning on the linked answer about killing postgres processes before doing this else you could corrupt your db permanently.

For RubyOnRails app add localhost If you use custom Postgresql version

# config/database.yml
default: &default
host: localhost