How can I start PostgreSQL server on Mac OS X?

MacosPostgresqlHomebrew

Macos Problem Overview


Final update:

I had forgotten to run the initdb command.


By running this command

ps auxwww | grep postgres

I see that postgres is not running

> ps auxwww | grep postgres
remcat          1789   0.0  0.0  2434892    480 s000  R+   11:28PM   0:00.00 grep postgres

This raises the question:

How do I start the PostgreSQL server?

Update:

> pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
server starting
sh: /usr/local/var/postgres/server.log: No such file or directory

Update 2:

The touch was not successful, so I did this instead:

> mkdir /usr/local/var/postgres
> vi /usr/local/var/postgres/server.log
> ls /usr/local/var/postgres/
server.log

But when I try to start the Ruby on Rails server, I still see this:

> Is the server running on host "localhost" and accepting > TCP/IP connections on port 5432?

Update 3:

> pg_ctl -D /usr/local/var/postgres status
pg_ctl: no server running

Update 4:

I found that there wasn't any pg_hba.conf file (only file pg_hba.conf.sample), so I modified the sample and renamed it (to remover the .sample). Here are the contents:

 # IPv4 local connections:
 host    all             all             127.0.0.1/32           trust
 # IPv6 local connections:
 host    all             all             ::1/128                trust

But I don't understand this:

> pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
server starting
> pg_ctl -D /usr/local/var/postgres status
pg_ctl: no server running

Also:

sudo find / -name postgresql.conf
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory

Update 5:

sudo pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Password:
pg_ctl: cannot be run as root
Please log in (using, e.g., "su") as the (unprivileged) user that will own the server process.

Update 6:

This seems odd:

> egrep 'listen|port' /usr/local/var/postgres/postgresql.conf
egrep: /usr/local/var/postgres/postgresql.conf: No such file or directory

Though, I did do this:

>sudo find / -name "*postgresql.conf*"
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample
/usr/share/postgresql/postgresql.conf.sample

So I did this:

egrep 'listen|port' /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample
#listen_addresses = 'localhost'        # what IP address(es) to listen on;
#port = 5432                # (change requires restart)
                # supported by the operating system:
                #   %r = remote host and port

So I tried this:

> cp /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf
> cp /usr/share/postgresql/postgresql.conf.sample /usr/share/postgresql/postgresql.conf

I am still getting the same "Is the server running?" message.

Macos Solutions


Solution 1 - Macos

The Homebrew package manager includes launchctl plists to start automatically. For more information, run brew info postgres.

Start manually

pg_ctl -D /usr/local/var/postgres start

Stop manually

pg_ctl -D /usr/local/var/postgres stop

Start automatically

"To have launchd start postgresql now and restart at login:"

brew services start postgresql


What is the result of pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start?

What is the result of pg_ctl -D /usr/local/var/postgres status?

Are there any error messages in the server.log?

Make sure tcp localhost connections are enabled in pg_hba.conf:

# IPv4 local connections:
host    all    all    127.0.0.1/32    trust

Check the listen_addresses and port in postgresql.conf:

egrep 'listen|port' /usr/local/var/postgres/postgresql.conf

#listen_addresses = 'localhost'        # What IP address(es) to listen on;
#port = 5432                # (change requires restart)

Cleaning up

PostgreSQL was most likely installed via Homebrew, Fink, MacPorts or the EnterpriseDB installer.

Check the output of the following commands to determine which package manager it was installed with:

brew && brew list|grep postgres
fink && fink list|grep postgres
port && port installed|grep postgres

Solution 2 - Macos

If you want to manually start and stop PostgreSQL (installed via Homebrew), the easiest way is:

brew services start postgresql

and

brew services stop postgresql

If you have a specific version, make sure to suffix the version. For example:

brew services start postgresql@10

Solution 3 - Macos

I had almost the exact same issue, and you cited the initdb command as being the fix. This was also the solution for me, but I didn't see that anyone posted it here, so for those who are looking for it:

initdb /usr/local/var/postgres -E utf8

Solution 4 - Macos

If your computer was abruptly restarted


You may want to start PG server but it was not.

First, you have to delete the file /usr/local/var/postgres/postmaster.pid Then you can restart the service using one of the many other mentioned methods depending on your install.

You can verify this by looking at the logs of Postgres to see what might be going on: tail -f /usr/local/var/postgres/server.log

For specific version:-

 tail -f /usr/local/var/postgres@[VERSION_NUM]/server.log

Eg:

 tail -f /usr/local/var/postgres@11/server.log

Solution 5 - Macos

Another approach is using the lunchy gem (a wrapper for launchctl):

brew install postgresql
initdb /usr/local/var/postgres -E utf8
gem install lunchy

To start PostgreSQL:

lunchy start postgres

To stop PostgreSQL:

lunchy stop postgres

For further information, refer to: "How to Install PostgreSQL on a Mac With Homebrew and Lunchy"

Solution 6 - Macos

Here my two cents: I made an alias for postgres pg_ctl and put it in file .bash_profile (my PostgreSQL version is 9.2.4, and the database path is /Library/PostgreSQL/9.2/data).

alias postgres.server="sudo -u postgres pg_ctl -D /Library/PostgreSQL/9.2/data"

Launch a new terminal.

And then? You can start/stop your PostgreSQL server with this:

postgres.server start
postgres.server stop

Solution 7 - Macos

The cleanest way by far to start/stop/restart PostgreSQL if you have installed it through brew is to simply unload and/or load the launchd configuration file that comes with the installation:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

The first line will stop PostgreSQL and the second line will start it. There isn't any need to specify any data directories, etc. since everything is in that file.

Solution 8 - Macos

To start the PostgreSQL server:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

To end the PostgreSQL server:

pg_ctl -D /usr/local/var/postgres stop -s -m fast

You can also create an alias via CLI to make it easier:

alias pg-start='pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start'
alias pg-stop='pg_ctl -D /usr/local/var/postgres stop -s -m fast'

With these you can just type "pg-start" to start PostgreSQL and "pg-stop" to shut it down.

Solution 9 - Macos

For test purposes, I think PostgreSQL App is the best option!

Run an app, and the server is up and running.

Close the app, and the server goes down.

http://postgresapp.com/

Solution 10 - Macos

If you have installed using Homebrew, the below command should be enough.

brew services restart postgresql

This sometimes might not work. In that case, the below two commands should definitely work:

rm /usr/local/var/postgres/postmaster.pid

pg_ctl -D /usr/local/var/postgres start

Solution 11 - Macos

# Remove old database files (if there was any)
$ rm -rf /usr/local/var/postgres

# Install the binary
$ brew install postgresql

# init it
$ initdb /usr/local/var/postgres

# Start the PostgreSQL server
$ postgres -D /usr/local/var/postgres

# Create your database
$ createdb mydb

# Access the database
$ psql mydb
psql (9.0.1)
Type "help" for help.

Solution 12 - Macos

When you install PostgreSQL using Homebrew,

brew install postgres

at the end of the output, you will see this methods to start the server:

To have launchd start postgresql at login:
    ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
Then to load postgresql now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Or, if you don't want/need launchctl, you can just run:
    postgres -D /usr/local/var/postgres

I think this is the best way.

You can add an alias into your .profile file for convenience.

Solution 13 - Macos

I had the same problem and performed all updates from the first post. But after checking the log file,

/usr/local/var/postgres/server.log

I see the true cause:

FATAL:  data directory "/usr/local/var/postgres" has group or world access
DETAIL:  Permissions should be u=rwx (0700).

After changing permissions on this directory,

chmod 0700 /usr/local/var/postgres

the PostgreSQL server started.

Check the log file every time.

Solution 14 - Macos

For a quick disposable test database, you can run the server in the foreground.

Initialize a new PostgreSQL database in a new directory:

mkdir db
initdb db -E utf8
createdb public

Start the server in the foreground (Ctrl + C to stop the server):

postgres -d db

In another shell session, connect to the server

psql -d public

Solution 15 - Macos

Sometimes it's just the version which you are missing, and you are scratching your head unnecessarily.

If you are using a specific version of PostgreSQL, for example, PostgreSQL 10, then simply do

brew services start postgresql@10

brew services stop postgresql@10

The normal brew services start postgresql won't work without a version if you have installed it for a specific version from Homebrew.

Solution 16 - Macos

If you didn't install it with Homebrew and directly from the Mac package, this worked for me for PostgreSQL 12 when using all the default locations, variables, etc.

$ sudo su postgres
bash-3.2$ /Library/PostgreSQL/12/bin/pg_ctl -D /Library/PostgreSQL/12/data/ stop

Solution 17 - Macos

Variation on this answer: https://stackoverflow.com/a/13103603/2394728

initdb `brew --prefix`/var/postgres/data -E utf8`` &&  pg_ctl -D /usr/local/var/postgres/data -l logfile start

Solution 18 - Macos

PostgreSQL is integrated in Server.app available through the App Store in Mac OS X v10.8 (Mountain Lion). That means that it is already configured, and you only need to launch it, and then create users and databases.

Tip: Do not start with defining $PGDATA and so on. Take file locations as is.

You would have this file: /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist

To start:

sudo serveradmin start postgres

Process started with arguments:

/Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D /Library/Server/PostgreSQL/Data -c listen_addresses=127.0.0.1,::1 -c log_connections=on -c log_directory=/Library/Logs/PostgreSQL -c log_filename=PostgreSQL.log -c log_line_prefix=%t -c log_lock_waits=on -c log_statement=ddl -c logging_collector=on -c unix_socket_directory=/private/var/pgsql_socket -c unix_socket_group=_postgres -c unix_socket_permissions=0770

You can sudo:

sudo -u _postgres psql template1

Or connect:

psql -h localhost -U _postgres postgres

You can find the data directory, version, running status and so forth with

sudo serveradmin fullstatus postgres

Solution 19 - Macos

For development purposes, one of the simplest ways is to install Postgres.app from the official site. It can be started/stopped from Applications folder or using the following commands in terminal:

# Start
open -a Postgres

# Stop
killall Postgres
killall postgres

Solution 20 - Macos

This worked for me (macOS v10.13 (High Sierra)):

sudo -u postgres /Library/PostgreSQL/9.6/bin/pg_ctl start -D /Library/PostgreSQL/9.6/data

Or first

cd /Library/PostgreSQL/9.6/bin/

Solution 21 - Macos

If you installed PostgreSQL using the EnterpriseDB installer, then what Kenial suggested is the way to go:

sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data start
sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data stop

Solution 22 - Macos

For MacPorts, just use the load/unload command and the port name of the running server:

sudo port load postgresql96-server
- or -
sudo port unload postgresql96-server

so you don't have to remember where the /Library/LaunchDaemons/org.macports.postgresql96.plist file is located.

Solution 23 - Macos

If you didn't install the Postgres server with Homebrew or installed using .dmg file, try this:

$ sudo su postgres
bash-3.2$ /Library/PostgreSQL/13/bin/pg_ctl -D /Library/PostgreSQL/13/data/ stop

Solution 24 - Macos

$ brew upgrade postgres

fixed it for me.

That, of course, will upgrade your PostgreSQL version and update/install any dependencies.

Warning: Do this knowing that your PostgreSQL version will likely change. For me, that wasn't a big deal.

Solution 25 - Macos

None of the previous answers fixed the issue for me, despite getting the same error messages.

I was able to get my instance back up and running by deleting the existing postmaster.pid file which was locked and was not allowing connections.

Solution 26 - Macos

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres

https://hub.docker.com/_/postgres

Solution 27 - Macos

Homebrew is the way!!

To start the service:

brew services start postgresql

To list it:

brew services list | grep postgres

To stop the service:

brew services stop postgresql

Solution 28 - Macos

After doing brew services restart postgresql.

It works best to: brew services stop postgresql brew postgresql-upgrade-database brew services start postgresql

Then type: psql

it now runs this was after the error: psql: error: 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"?

The upgrade may be optional depending on the other dependencies your running.

Which means that rather than Restart using brew for in on mac os, Stop completely postgres and then start postgres and connect to your psql databaseName.

Hope this was useful.

Solution 29 - Macos

having installed Postgres with homebrew that is what I do to start postgres and keep it in foreground to see the logs:

/opt/homebrew/opt/postgresql/bin/postgres -D /opt/homebrew/var/postgres

Solution 30 - Macos

For Mac OS X, I really like LaunchRocket for this and other background services I used in development.

This site has nice instructions on installation.

This gives you a nice screen in your System Preferences that allows you to launch, reboot, root, and launch at login.

Solution 31 - Macos

This worked for me every time, inspired by Craig Ringer:

brew install proctools
sudo pkill -u postgres

proctools includes pkill. If you don't have Homebrew: https://brew.sh/

Solution 32 - Macos

For completeness sake: Check whether you're inside a Tmux or Screen instance. Starting won't work from there.

From: Error while trying to start PostgreSQL installed via Homebrew: “Operation not permitted”

This solved it for me.

Solution 33 - Macos

There is some edge case that maybe will be helpful for someone:

There is an option that you will have postgres.pid filled with some PID. If you restart your machine, and before PostgreSQL will be back again, some other process will take that PID.

If that will happen, both the pg_ctl status and brew service are asked about the PostgreSQL status, will tell you that it is up.

Just do ps aux | grep <yourPID> and check if it is really PostgreSQL.

Solution 34 - Macos

I was facing the same problem. I tried all of these solutions, but none worked.

I finally managed to get it working by changing the PostgreSQL HOST in Django settings from localhost to 127.0.0.1.

Solution 35 - Macos

There are two primary components to PostgreSQL: the database server and a client.

There is an included client via the CLI, or like me, you might be used to tools like phpMyAdmin, so it requires a separate GUI client.

For example, on macOS: install Postgres.app which is ~65 MB from: https://postgresapp.com/

Then follow these instructions:

  • install and initialise the server with the button on the right.
  • update your $PATH using terminal: sudo mkdir -p /etc/paths.d && echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp
  • and finally, install the pgAdmin GUI which is about ~100 MB from: https://www.pgadmin.org/download/pgadmin-4-macos/

Solution 36 - Macos

Here is an easy and always forking solution (mac os):

(WARNING: IT WILL DELETE ALL YOUR DATABASES)

  1. Stop the postgres service:

    brew services stop postgres

  2. Delete all files in "postgres" directory:

    rm -rf /usr/local/var/postgres/*

  3. Initialize the new database system:

    initdb /usr/local/var/postgres -E utf8

  4. Start postgres:

    pg_ctl -D /usr/local/var/postgres -l server.log start

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRamyView Question on Stackoverflow
Solution 1 - MacosJames AllmanView Answer on Stackoverflow
Solution 2 - MacosmalopezcruzView Answer on Stackoverflow
Solution 3 - MacosYanView Answer on Stackoverflow
Solution 4 - MacosrafaelportelaView Answer on Stackoverflow
Solution 5 - MacosPikachuView Answer on Stackoverflow
Solution 6 - MacosKenialView Answer on Stackoverflow
Solution 7 - MacosMarkus Amalthea MagnusonView Answer on Stackoverflow
Solution 8 - MacosToddView Answer on Stackoverflow
Solution 9 - MacosCrystian LeãoView Answer on Stackoverflow
Solution 10 - Macosshanu kheraView Answer on Stackoverflow
Solution 11 - Macosz atefView Answer on Stackoverflow
Solution 12 - MacosTenaciousRaptorView Answer on Stackoverflow
Solution 13 - MacosRooshView Answer on Stackoverflow
Solution 14 - Macosk107View Answer on Stackoverflow
Solution 15 - Macosuser1735921View Answer on Stackoverflow
Solution 16 - MacosJ_F4CView Answer on Stackoverflow
Solution 17 - MacossubstancejoyView Answer on Stackoverflow
Solution 18 - MacosbbaassssiieeView Answer on Stackoverflow
Solution 19 - MacosMelnostaView Answer on Stackoverflow
Solution 20 - MacosDmitry EvgrafoovView Answer on Stackoverflow
Solution 21 - MacoshithackerView Answer on Stackoverflow
Solution 22 - MacosSteveView Answer on Stackoverflow
Solution 23 - Macosbaby maneesha SunkaraView Answer on Stackoverflow
Solution 24 - MacosthedanottoView Answer on Stackoverflow
Solution 25 - MacosSwedendriftView Answer on Stackoverflow
Solution 26 - Macosdewijones92View Answer on Stackoverflow
Solution 27 - MacosRaj VermaView Answer on Stackoverflow
Solution 28 - MacosPaul SView Answer on Stackoverflow
Solution 29 - MacosKevin AmiranoffView Answer on Stackoverflow
Solution 30 - MacostheUtherSideView Answer on Stackoverflow
Solution 31 - MacosPunnerudView Answer on Stackoverflow
Solution 32 - MacosFr4nc3sc0NLView Answer on Stackoverflow
Solution 33 - MacosAdam PiotrowskiView Answer on Stackoverflow
Solution 34 - MacosTazeemView Answer on Stackoverflow
Solution 35 - MacosScott PhillipsView Answer on Stackoverflow
Solution 36 - Macossn0rkView Answer on Stackoverflow