可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
After I did brew update and brew upgrade, my postgres got some problem. I tried to uninstall postgres and install again, but it didn't work as well.
This is the error message.(I also got this error message when I try to do rake db:migrate)
$ psql psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
How can I solve it?
Mac version: Mountain lion.
homebrew version: 0.9.3
postgres version: psql (PostgreSQL) 9.2.1
And this is what I did.
12:30 ~/D/works$ brew uninstall postgresql Uninstalling /usr/local/Cellar/postgresql/9.2.1... 12:31 ~/D/works$ brew uninstall postgresql Uninstalling /usr/local/Cellar/postgresql/9.1.4... 12:31 ~/D/works$ psql --version bash: /usr/local/bin/psql: No such file or directory 12:33 ~/D/works$ brew install postgresql ==> Downloading http://ftp.postgresql.org/pub/source/v9.2.1/postgresql-9.2.1.tar.bz2 Already downloaded: /Library/Caches/Homebrew/postgresql-9.2.1.tar.bz2 ...... ...... ==> Summary /usr/local/Cellar/postgresql/9.2.1: 2814 files, 38M, built in 2.7 minutes 12:37 ~/D/works$ initdb /usr/local/var/postgres -E utf8 The files belonging to this database system will be owned by user "laigary". This user must also own the server process. The database cluster will be initialized with locale "en_US.UTF-8". The default text search configuration will be set to "english". initdb: directory "/usr/local/var/postgres" exists but is not empty If you want to create a new database system, either remove or empty the directory "/usr/local/var/postgres" or run initdb with an argument other than "/usr/local/var/postgres". 12:39 ~/D/works$ mkdir -p ~/Library/LaunchAgents 12:39 ~/D/works$ cp /usr/local/Cellar/postgresql/9.2.1/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/ 12:39 ~/D/works$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist homebrew.mxcl.postgresql: Already loaded 12:39 ~/D/works$ pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start server starting 12:39 ~/D/works$ env ARCHFLAGS="-arch x86_64" gem install pg Building native extensions. This could take a while... Successfully installed pg-0.14.1 1 gem installed 12:42 ~/D/works$ psql --version psql (PostgreSQL) 9.2.1 12:42 ~/D/works$ psql psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Now, after I reinstalled howbrew,when I use $ psql
, It doesn't show any error message.
But I run rake db:migrate
in my rails app, it shows:
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"? /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:1213:in `initialize' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:1213:in `new' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:1213:in `connect' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:329:in `initialize' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `new' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `postgresql_connection' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:309:in `new_connection' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:319:in `checkout_new_connection' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:241:in `block (2 levels) in checkout' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:236:in `loop' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:236:in `block in checkout' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:233:in `checkout' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:96:in `block in connection' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:95:in `connection' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:404:in `retrieve_connection' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_specification.rb:170:in `retrieve_connection' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_specification.rb:144:in `connection' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/railties/databases.rake:107:in `rescue in create_database' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/railties/databases.rake:51:in `create_database' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/railties/databases.rake:40:in `block (3 levels) in <top (required)>' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/railties/databases.rake:40:in `each' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/railties/databases.rake:40:in `block (2 levels) in <top (required)>' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:205:in `call' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:205:in `block in execute' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:200:in `each' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:200:in `execute' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:158:in `block in invoke_with_call_chain' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:151:in `invoke_with_call_chain' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:144:in `invoke' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:116:in `invoke_task' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:94:in `block (2 levels) in top_level' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:94:in `each' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:94:in `block in top_level' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:88:in `top_level' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:66:in `block in run' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling' /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:63:in `run' /usr/local/bin/rake:32:in `<main>' Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"riy_development", "pool"=>5, "username"=>nil, "password"=>nil}
Finally I find the solution.
$ sudo mkdir /var/pgsql_socket/ $ sudo ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/
This solution is little tricky, but it works. Hope anyone have a better solution
Update
This works for me as well.
rm /usr/local/var/postgres/postmaster.pid
回答1:
Had a similar problem; a pid file was blocking postgres from starting up. To fix it:
rm /usr/local/var/postgres/postmaster.pid
and then all is well.
回答2:
This can sometimes be an issue with a postgres upgrade.
In my case, it happened when upgrading from 9.3 to 9.4.
See http://www.postgresql.org/docs/9.4/static/upgrading.html
OS X/Homebrew:
Try running postgres -D /usr/local/var/postgres
-- it will give you a much more verbose output if postgres fails to start.
In my case, running rm -rf /usr/local/var/postgres && initdb /usr/local/var/postgres -E utf8
removed my old databases and then reinitialized the postgres db schema.
Thanks to https://github.com/Homebrew/homebrew/issues/35240 for that solution.
After regenerating my databases (with rake db:create
) everything worked fine again.
回答3:
Found a solution that worked for me here:
https://dba.stackexchange.com/questions/75214/psql-could-not-connect-to-server-no-such-file-or-directory
You basically run the following command to manually start the server:
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
回答4:
On Yosemite, if the pid file is blocking Postgres from starting and you have a launchctl
daemon trying (and failing) to load the database daemons, then you'll need to unload the the plist file:
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Then remove the pid file
$ rm /usr/local/var/postgres/postmaster.pid
Then reload the launchctl
daemon
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
回答5:
For anyone reading this and using Postgres.app, you may need host: localhost
in your database.yml. http://postgresapp.com/documentation#toc_3
回答6:
If installing and uninstalling postgres with brew doesn't work for you, look at the logs of your postgresql installation or:
postgres -D /usr/local/var/postgres
if you see this kind of output:
LOG: skipping missing configuration file "/usr/local/var/postgres/postgresql.auto.conf" FATAL: database files are incompatible with server DETAIL: The data directory was initialized by PostgreSQL version 9.4, which is not compatible with this version 9.6.1.
Then try the following:
rm -rf /usr/local/var/postgres && initdb /usr/local/var/postgres -E utf8
Then start the server:
pg_ctl -D /usr/local/var/postgres -l logfile start
Source
回答7:
Check that the socket file exists.
$ ls -l /tmp/.s.PGSQL.5432 srwxrwxrwx 1 you wheel 0 Nov 16 09:22 /tmp/.s.PGSQL.5432
If it doesn't then check your postgresql.conf for unix_socket_directory change.
$ grep unix_socket /usr/local/var/postgres/postgresql.conf #unix_socket_directory = '' # (change requires restart) #unix_socket_group = '' # (change requires restart) #unix_socket_permissions = 0777 # begin with 0 to use octal notation
回答8:
brew services start postgres
worked for me!
回答9:
This happened to me when I upgraded from 9.3.4 to 9.5 as the databases are incompatible without upgrading.
I used pg_upgrade as follows:
Stop postgres
$ brew services stop postgresql
Upgrade the databases:
$ pg_upgrade \ -d /usr/local/var/postgres \ -D /usr/local/var/postgres9.5 \ -b /usr/local/Cellar/postgresql/9.3.4/bin/ \ -B /usr/local/Cellar/postgresql/9.5.0/bin/ \ -v
Archive the old databases:
$ mv /usr/local/var/postgres /usr/local/var/postgres9.3.save $ mv /usr/local/var/postgres9.5 /usr/local/var/postgres
Restart postgres:
$ brew services start postgresql
Updated Gems (for rails / active record) :
$ gem uninstall pg $ gem uninstall activerecord-postgresql-adapter $ bundle install
回答10:
Upgrading the database works for me
brew postgresql-upgrade-database
回答11:
This is actually what you are supposed to do:
you should instead look at /usr/local/var/postgres/postmaster.pid
and then look at the first line of the file - this is the bad PID
Run
ps aux | grep <PID>
for example:
ps aux | grep 12345
then do
kill <PID>
for example
kill 12345
Assuming it's still running
https://superuser.com/questions/553045/fatal-lock-file-postmaster-pid-already-exists
do not listen to the accepted answer it is bad and will corrupt your data!!!
回答12:
Changing postresql or database.yml config settings, changing $PATH, or creating symlinks were all unnecessary for me. All I needed to do was gem uninstall pg
and then bundle
(or gem install pg
).
The issue was that the pg gem had been installed before homebrew postgres, so was picking up the settings from the version of postgres that comes with MacOS. Reinstalling it (and thus rebuilding the native extension) fixed the problem.
回答13:
Psql option
-h hostname --host=hostname
: Specifies the host name of the machine on which the server is running. If the value begins with a slash, it is used as the directory for the Unix-domain socket.
$ grep "port\|unix_socket" /etc/postgresql/9.1/main/postgresql.conf port = 5433 # (change requires restart) unix_socket_directory = '/var/run/postgresql' # (change requires resta $ netstat -nalp | grep postgres unix 2 [ ACC ] STREAM LISTENING 106753 4349/postgres /tmp/.s.PGSQL.5432 unix 2 [ ACC ] STREAM LISTENING 10377 1031/postgres /var/run/postgresql/.s.PGSQL.5433
Run psql with -host Option
$ psql -p 5433 -h /var/run/postgresql
No need to make a soft link
回答14:
FWIW this happened to me today, but what happened was that I was running Ubuntu updates at the time, which were likely updating Postgres. Once the update completed, I was able to connect without a hitch.
For completeness' sake, I was trying to retrieve records from the database from a Rails console:
development (main):0 > a = MyModel.find 73694 PG::ConnectionBad: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
回答15:
It is because a previous server a still running, try closing everything down and re-running your application.
回答16:
The most fool proof way around this is to do
brew reinstall postgresql
This will keep your user permission etc all intact and everything is reset to new. Works all the time !
回答17:
If postgres was installed using homebrew, you can fix this by running:
brew link postgres
回答18:
I ran into this issue after trying to restore/drop/create a db while other processes were accessing them. MacOSX/Homebrew fix was:
- close all other accessing processes
rails server
, rails console
, guard
, etc... - load/unload using the commands found in
brew info postgres
- run restore/drop/create from before
回答19:
I got this same error. Turns out postgres just wasn't running at all (it is usually always running in the background, but for whatever reason it wasn't today).
If this is the case, just type postgres
in the command line of your project directory
回答20:
After a tremendous amount of back and forth, it really came down to the pg
gem version I was using. On mavericks, pg
version 0.15.1
would not connect to port 5432 but version 0.17.1
works just fine - very odd.
回答21:
It looks like your psql doesn't run. You should run it before connect. You can do that using Postgres.app for Mac OS only. (Download and install this app http://postgresapp.com) Open the app, and you have a PostgreSQL server ready and awaiting new connections. Close the app, and the server shuts down. You also can find this info here http://www.postgresql.org/download/macosx/. Hope this will help you.
回答22:
For me it was an apache upgrade that caused the problem. I could still run psql in console or call db directly from kdevelop. Also it worked to add "host=localhost" to connection string.
BUT the real problem was that apache had changed to private tmp.
Solution: Update /usr/lib/systemd/system/apache2.service and change PrivateTmp=true to PrivateTmp=false.
I am working on OpenSuse OS, but I guess that something similar could happen on Mac.
回答23:
Came across this issue too on MacOS Sierra and when we ran pg_ctl as described above we then had the following error pg_ctl: no database directory specified and environment variable PGDATA unset
. So we followed the steps here which solved our issue, namely:
mkdir ~/.postgres
initdb ~/.postgres
pg_ctl -D ~/.postgres start
回答24:
For those who use this command and doesn't work or the file is not there and are using Ruby on Rails
rm /usr/local/var/postgres/postmaster.pid
Or any other command and just keep on failing.
I solved this problem uninstalling with Brew. I had to uninstall with brew 2 times, because at the first uninstall there will remain another version of postgresql, with the second uninstall the process will be completed.
Install postgresql with Brew
Then drop, create and migrate the data bases of the project
(Don't forget to start the postgresql server)
回答25:
I got same issue because I'm using a wrong Postgres's username in code. I logged into postgres psql -d postgres
and enter \du
to take role name and correct Postgres's username.
So when you guys face this issue, you guys need to make sure you're using correct Postgres username, password, hostname and database...
Hope this will help anyone
回答26:
"local" is for Unix domain socket connections only
local all all password
IPv4 local connections:
host all all 127.0.0.1/32 password
IPv6 local connections:
host all all ::1/128 password
Sometimes a simple mistake can give us a headache. I hope this help and sorry if my english is no good at all.
回答27:
The Cause
Lion comes with a version of postgres already installed and uses those binaries by default. In general you can get around this by using the full path to the homebrew postgres binaries but there may be still issues with other programs.
The Solution
curl http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh | sh
Via
http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/
回答28:
Just two steps to run the database after the Installation (Before that ensure your logged as postgres
user)
Installed-Dirs/bin/postmaster -D Installed-Dirs/pgsql/data
For an example:
[postgres@localhost bin]$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
Step-2 : Run psql from the Installed path (To check where you installed '#which postgres' will use to find out the installed location)
[postgres@localhost bin]$ psql
回答29:
I used the Bitnami stack and installed as non-root user psql. On using psql I did receive the mentioned error.
Turns out, there are 2 versions of psql
- a root level psql prepackaged in the linux distro. This points to /usr/bin/psql
- a non-root level psql installed by the Bitnami stack. This points to /bitnami/postgresql/postgresql/bin/psql
You might want to change the alias of the psql, so that it points to the non-root user.
alias psql='/bitnami/postgresql/postgresql/bin/psql'
The above worked for me on doing psql -U postgres
回答30:
The data directory contains an old postmaster.pid file / The data directory contains an unreadable postmaster.pid file PostgreSQL puts a file named postmaster.pid in the data directory to store the process id of the PostgreSQL server process. If PostgreSQL crashes, this file can contain an old pid that confuses PostgreSQL. You can fix this issue by deleting the postmaster.pid file. However, you must make sure that PostgreSQL is really not running. Open Activity Monitor and make sure that there are no processes named ‘postgres’ or ‘postmaster’.
If you delete the postmaster.pid file while PostgreSQL is running, bad things will happen.
Source: https://postgresapp.com/documentation/troubleshooting.html