如何让Postgres服务器创建并关闭?

时间:2014-01-14 06:41:42

标签: postgresql

我有一个运行Postgres服务器的实例,我已经从命令开始:

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

运行命令createdb test会提示我输入两次密码,然后我收到此错误:

createdb: could not connect to database template1: FATAL:  password authentication failed for user "joey" 

此外,当我尝试使用

停止服务器时
pg_ctl -D /usr/local/var/postgres/data stop -m smart

我收到此错误消息:

pg_ctl: PID file "/usr/local/var/postgres/data/postmaster.pid" does not exist
Is server running?

我有什么遗漏或忘记初始化/安装吗?我使用these instructions进行安装。

我检查了this answerthis answer,这两个都没有解决我的问题。

1 个答案:

答案 0 :(得分:0)

从您在评论中添加的日志文件中,看起来好像在计算机上运行了另一个postgresql实例(或者可能是使用与postgresql相同的端口的其他东西):

LOG:  could not bind IPv6 socket: Address already in use
HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
LOG:  could not bind IPv4 socket: Address already in use
HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
LOG:  could not bind IPv6 socket: Address already in use
HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
WARNING:  could not create listen socket for "localhost"
FATAL:  could not create any TCP/IP sockets

这使数据库从启动开始停止。

要查看可能的进程,可以使用lsof:

$ sudo lsof | grep -i listen
...
postmaste 19732  postgres    3u     IPv6            1194355       0t0        TCP localhost:postgres (LISTEN)
postmaste 19732  postgres    4u     IPv4            1194356       0t0        TCP localhost:postgres (LISTEN)
...

在上面的示例中,从Linux主机中,您可以看到名为postmaster的进程(它在打印输出中被截断)侦听localhost:postgres,这意味着localhost地址端口5432(lsof正在将端口5432转换为' postgres'通过文件/ etc / services包含众所周知的端口号和相应服务之间的映射。)

createdb提示输入密码这一事实意味着它正在某个地方连接数据库,尽管我无法发现你发送的ps打印输出。

问题的另一部分是为什么createdb无法连接到您的数据库(或您的计算机上运行的任何数据库)。如果它是一个新创建的数据库集群,那么除了默认的'postgres'用户之外,它不会定义任何用户。您必须向此用户发出命令:

createdb -U postgres test

如果没有-U选项,它将尝试使用您当前的登录用户进行连接,该用户在数据库中不存在。

也可能需要您作为postgres用户进行身份验证。 postgresql数据目录中的文件pg_hba.conf控制着需要哪种身份验证。

一般来说,postgresql文档非常好;我建议你仔细阅读Server Setup and Operation部分,看看你是否有一个有效的配置。