我有一个运行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 answer和this answer,这两个都没有解决我的问题。
答案 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部分,看看你是否有一个有效的配置。