如何在Mac OS X上启动PostgreSQL服务器?

Ram*_*amy 942 postgresql macos homebrew

最终更新:

我忘记了执行initdb命令.

</ FINAL UPDATE>

通过运行此命令

ps auxwww | grep postgres
Run Code Online (Sandbox Code Playgroud)

我看到postgres没有运行

> ps auxwww | grep postgres
remcat          1789   0.0  0.0  2434892    480 s000  R+   11:28PM   0:00.00 grep postgres
Run Code Online (Sandbox Code Playgroud)

这提出了一个问题:如何启动postgresql服务器?

更新:

>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
Run Code Online (Sandbox Code Playgroud)

更新2:

触摸不成功所以我这样做了:

> mkdir /usr/local/var/postgres
> vi /usr/local/var/postgres/server.log
> ls /usr/local/var/postgres/          
server.log
Run Code Online (Sandbox Code Playgroud)

但是当我尝试启动rails服务器时,我仍然看到:

Is the server running on host "localhost" and accepting
TCP/IP connections on port 5432?
Run Code Online (Sandbox Code Playgroud)

更新3:

> pg_ctl -D /usr/local/var/postgres status
pg_ctl: no server running
Run Code Online (Sandbox Code Playgroud)

更新4:

我发现没有pg_hba.conf(只有pg_hba.conf.sample)所以我修改了样本并将其重命名(以移除.sample).以下是内容:

 # IPv4 local connections:
 host    all             all             127.0.0.1/32           trust
 # IPv6 local connections:
 host    all             all             ::1/128                trust
Run Code Online (Sandbox Code Playgroud)

但我不明白这个:

> 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
Run Code Online (Sandbox Code Playgroud)

也:

sudo find / -name postgresql.conf
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
Run Code Online (Sandbox Code Playgroud)

更新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.
Run Code Online (Sandbox Code Playgroud)

更新6:

这看起来很奇怪:

> egrep 'listen|port' /usr/local/var/postgres/postgresql.conf
egrep: /usr/local/var/postgres/postgresql.conf: No such file or directory
Run Code Online (Sandbox Code Playgroud)

不过,我这样做了:

>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
Run Code Online (Sandbox Code Playgroud)

所以我这样做了:

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
Run Code Online (Sandbox Code Playgroud)

所以我试过这个:

> 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 
Run Code Online (Sandbox Code Playgroud)

仍然是相同的"服务器正在运行吗?" 信息.

jam*_*man 1753

自制包管理器包括launchctl的Plist自动启动.欲了解更多信息运行brew info postgres.

手动启动:

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

手动停止:

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

自动启动:

"要立即启动postgresql并在登录时重新启动:"

brew services start postgresql


结果是pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start什么?

结果是pg_ctl -D /usr/local/var/postgres status什么?

server.log中是否有任何错误消息?

确保在pg_hba.conf中启用了tcp localhost连接:

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
Run Code Online (Sandbox Code Playgroud)

检查postgresql.conf中的listen_addresses和port:

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

#listen_addresses = 'localhost'     # what IP address(es) to listen on;
#port = 5432                # (change requires restart)
Run Code Online (Sandbox Code Playgroud)

打扫干净

Postgres最有可能通过Homebrew,Fink,MacPortsEnterpriseDB安装程序安装.

检查以下命令的输出以确定安装它的软件包管理器:

brew && brew list|grep postgres
fink && fink list|grep postgres
port && port installed|grep postgres
Run Code Online (Sandbox Code Playgroud)

  • 这是一个多么复杂的命令,只是为了启动和停止程序 (23认同)
  • 为什么这一切都是必要的?你为什么不能以你开始节点的方式开始postgres? (9认同)
  • 这仍然有效,但有点过时了.下面的回答是'brew services start postgresql`,它是一个更新,更简单的答案. (2认同)

小智 338

如果你想手动启动和停止postgresql(通过自制软件安装),最简单的方法是:

brew services start postgresql
Run Code Online (Sandbox Code Playgroud)

brew services stop postgresql
Run Code Online (Sandbox Code Playgroud)

  • 我希望我能早点了解'brew services` ......这是唯一能为我工作的解决方案.<3谢谢! (6认同)
  • `brew tap gapple/services`将使brew服务命令再次运行 (4认同)
  • 看起来像'brew tap homebrew/services`仍在运行https://github.com/Homebrew/homebrew-services (3认同)
  • 这成功****'initdb`成功运行后.否则它会默默地失败(但似乎已经工作了,服务在`brew services list`中显示为*started*. (3认同)
  • 我需要运行 `brew services restart postgresql`,因为用 pg_ctl 或 `brew services start` 启动数据库说“另一台服务器可能正在运行”,并在 pg_ctl 挂起时停止数据库。 (2认同)
  • 重要提示 - 这将导致 postgres 始终在计算机启动时启动。如果你想随心所欲地启动 postgres,请使用 pg_ctl (2认同)

小智 178

我几乎完全相同的问题,你引用initdb命令作为修​​复.这也是我的解决方案,但我没有看到有人在这里发布,所以对于那些正在寻找它的人:

initdb /usr/local/var/postgres -E utf8
Run Code Online (Sandbox Code Playgroud)

  • 这对我也有用,initdb告诉我,我已经完成了配置,所以我删除了整个目录:"rm -rf/usr/local/var/postgres"再次运行你的命令,我的服务器现在启动并运行,非常感谢先生! (16认同)
  • 是的,我必须运行`rm -rf/usr/local/var/postgres`然后这对我有效 (5认同)
  • 这对我也有用.在initdb之前,我还必须chown postgres目录(在你的comp_ usr/local/var/postgres`上`chown _your用户名),然后是initdb.之后,服务器会在您重新启动时自动启动(如果您遵循Homebrew的说明)或手动启动`pg_ctl -D/usr/local/var/postgres -l /usr/local/var/postgres/server.log start`. (2认同)
  • 在`initdb`之后(包括必要时删除旧目录),`brew services start postgresql`可以工作 (2认同)

raf*_*ela 87

如果您的计算机突然重新启动

首先,您必须删除该文件/usr/local/var/postgres/postmaster.pid然后您可以使用许多其他提到的方法之一重新启动服务,具体取决于您的安装.

您可以通过查看Postgres的日志来验证这一点,看看可能会发生什么: tail -f /usr/local/var/postgres/server.log

  • 您可以检查`tail -f/usr/local/var/postgres/server.log`以查看是否应该删除该文件.参考https://coderwall.com/p/zf-fww/postgres-on-osx-with-homebrew-not-running-after-osx-crash (2认同)
  • 哇...只有这对我有用!你能更详细地解释一下为什么我们要在突然重新启动计算机时删除`postmaster.pid`吗? (2认同)

pis*_*ruk 81

另一种方法是使用lunchy gem(launchctl的包装器):

brew install postgresql
initdb /usr/local/var/postgres -E utf8
gem install lunchy
Run Code Online (Sandbox Code Playgroud)

开始postgres:

lunchy start postgres
Run Code Online (Sandbox Code Playgroud)

停止postgres:

lunchy stop postgres
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅:" 如何使用Homebrew和Lunchy在Mac上安装PostgreSQL "


Ken*_*ial 70

这里我的2美分:我为postgres pg_ctl创建了一个别名并将其放在.bash_profile中(我的postgresql版本是9.2.4,数据库路径是/Library/PostgreSQL/9.2/data).

alias postgres.server="sudo -u postgres pg_ctl -D /Library/PostgreSQL/9.2/data"
Run Code Online (Sandbox Code Playgroud)

推出新终端.

然后?您可以使用以下命令启动/停止postgresql服务器:

postgres.server start
postgres.server stop
Run Code Online (Sandbox Code Playgroud)

  • 我一直得到"请登录(使用,例如,"su")作为将拥有服务器进程的(非特权)用户." 当只运行sudo时.+1 (3认同)

Mar*_*son 33

到目前为止,启动/停止/重新启动postgres 的最brew简洁方法是简单地卸载和/或加载安装附带的launchd配置文件:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Run Code Online (Sandbox Code Playgroud)

第一行将停止postgres,第二行将启动它.无需指定任何数据目录等,因为一切都在该文件中.

  • Homebrew本身有这些命令的简单包装器,例如:`brew services start postgres`(和stop).最后扔一个`-v`你可以看到它在做什么. (4认同)

Tod*_*odd 27

要启动postgresql服务器:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Run Code Online (Sandbox Code Playgroud)

结束postgresql服务器:

pg_ctl -D /usr/local/var/postgres stop -s -m fast
Run Code Online (Sandbox Code Playgroud)

您还可以通过CLI创建别名以简化:

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'
Run Code Online (Sandbox Code Playgroud)

有了这些,你可以输入"pg-start"来启动Postgres,然后输入"pg-stop"来关闭它.

  • 我收到错误pg_ctl:目录“ / usr / local / var / postgres”不是数据库集群目录,该如何解决? (3认同)

Cry*_*eão 22

出于测试目的,我认为PostgreSQL App是最好的选择!

运行应用程序,服务器已启动并正在运行.关闭应用程序,服务器关闭.

http://postgresapp.com/


zee*_*zee 14

# 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.
Run Code Online (Sandbox Code Playgroud)


use*_*921 14

有时这只是您缺少的版本,而您不必要地摸不着头脑。

\n

如果您使用的是特定版本的 PostgreSQL,例如 PostgreSQL\xc2\xa010,则只需执行以下操作

\n
brew services start postgresql@10\n\nbrew services stop postgresql@10\n
Run Code Online (Sandbox Code Playgroud)\n

如果您已从Homebrew安装了特定版本的普通brew services start postgresql版本,则在没有版本的情况下,普通版本将无法工作。

\n


小智 10

如果您使用 Homebrew 安装,则以下命令应该足够了。

brew services restart postgresql
Run Code Online (Sandbox Code Playgroud)

这有时可能不起作用。在这种情况下,以下两个命令肯定可以工作:

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

pg_ctl -D /usr/local/var/postgres start
Run Code Online (Sandbox Code Playgroud)


jka*_*zka 9

当您使用自制软件安装postgresql时:

brew install postgres
Run Code Online (Sandbox Code Playgroud)

在输出结束时,您将看到此方法启动服务器:

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
Run Code Online (Sandbox Code Playgroud)

我认为这是最好的方法.

为方便起见,您可以在.profile中添加别名.


k10*_*107 7

对于快速的一次性测试数据库,您可以在前台运行服务器.

在新目录中初始化一个新的postgres数据库

mkdir db
initdb db -E utf8
createdb public
Run Code Online (Sandbox Code Playgroud)

在前台启动服务器(ctrl-C停止服务器)

postgres -d db
Run Code Online (Sandbox Code Playgroud)

在另一个shell会话中,连接到服务器

psql -d public
Run Code Online (Sandbox Code Playgroud)


Roo*_*osh 7

我有同样的问题,并从第一篇文章执行所有更新.但检查日志文件后:

/usr/local/var/postgres/server.log
Run Code Online (Sandbox Code Playgroud)

我看到了真正的原因:

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

在此目录上更改权限后

chmod 0700 /usr/local/var/postgres
Run Code Online (Sandbox Code Playgroud)

postgres服务器已启动.

每次检查日志文件.


小智 6

如果您没有使用Homebrew直接从 Mac 软件包安装它,那么当使用所有默认位置、变量等时,这对我来说适用于 PostgreSQL 12。

$ sudo su postgres
bash-3.2$ /Library/PostgreSQL/12/bin/pg_ctl -D /Library/PostgreSQL/12/data/ stop
Run Code Online (Sandbox Code Playgroud)


bba*_*iee 5

PostgreSQL 集成在Server.app中,可通过Mac\xc2\xa0OS\xc2\xa0X\xc2\xa0v10.8 (Mountain Lion)中的App\xc2\xa0Store获取。这意味着它已经配置完毕,您只需启动它,然后创建用户和数据库。

\n

提示:不要从定义 $PGDATA 等开始。按原样保留文件位置。

\n

您将拥有以下文件:\n /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist

\n

开始:

\n
sudo serveradmin start postgres\n
Run Code Online (Sandbox Code Playgroud)\n

进程以参数开始:

\n

/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 -clogging_collector=on -c unix_socket_directory=/private/var/pgsql_socket -c unix_socket_group=_postgres -c unix_socket_permissions=0770

\n

你可以sudo:

\n
sudo -u _postgres psql template1\n
Run Code Online (Sandbox Code Playgroud)\n

或者连接:

\n
psql -h localhost -U _postgres postgres\n
Run Code Online (Sandbox Code Playgroud)\n

您可以通过以下命令找到数据目录、版本、运行状态等

\n
sudo serveradmin fullstatus postgres\n
Run Code Online (Sandbox Code Playgroud)\n


小智 5

出于开发目的,最简单的方法之一是从官方网站安装 Postgres.app 。可以从应用程序文件夹启动/停止它或在终端中使用以下命令:

# Start
open -a Postgres

# Stop
killall Postgres
killall postgres
Run Code Online (Sandbox Code Playgroud)

  • “killall”可能不是停止数据库的最佳方法。 (19认同)

小智 5

这个答案的变化: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
Run Code Online (Sandbox Code Playgroud)


小智 5

这对我有用(macOS v10.13(High Sierra)):

sudo -u postgres /Library/PostgreSQL/9.6/bin/pg_ctl start -D /Library/PostgreSQL/9.6/data
Run Code Online (Sandbox Code Playgroud)

或者先

cd /Library/PostgreSQL/9.6/bin/
Run Code Online (Sandbox Code Playgroud)


DIN*_*LIT 5

  • 使用brew:安装postgresql brew install postgresql,您可以使用“@”符号指定版本:brew install postgresql@14
  • 启动 postgresql:brew services start postgresql或特定版本brew services start postgresql@14
  • 停止 PostgreSQL:brew services stop postgresql