(Debian 9) 为什么我的本地机器上运行着一个 postgresql 服务器?

(Debian 9) 为什么我的本地机器上运行着一个 postgresql 服务器?

我开始关注https://www.postgresql.org/docs/9.6/runtime.html用于设置本地 postgresql 服务器以进行测试和开发。我发现我已经postgresql安装了该软件包,postgres用户已经存在,并且似乎已经有一个 postgresql 服务器正在监听127.0.0.1:5432.

这很奇怪,因为虽然我以前使用过该psql命令连接到远程 postgresql 数据库,但我不记得曾经设置过本地 postgresql 数据库。

我尝试连接到数据库,psql -h 127.0.0.1 -p 5432但系统提示我输入密码。输入空白密码无效。我还尝试成为postgres的用户su postgres,但再次提示输入密码。

我不知道服务器数据目录的位置。创建数据库集群建议使用/usr/local/pgsql/data,但/usr/local/pgsql在我尝试设置本地服务器时创建它之前并不存在。

我的最终问题是:

  • 为什么我的本地机器上运行着一个 postgresql 服务器?

一些相关问题是:

  • 如何找到服务器的数据目录? (希望它包含日志。)
  • 如何确定postgres用户的创建时间?
  • 如何恢复数据库和用户的密码postgres
  • 或者,我可以在不恢复数据库密码的情况下查看数据库的内容吗?

答案1

听起来你好像apt-get install postgresql在某个时候跑过。在这种情况下,您可能拥有 Debian 的默认 PostgreSQL 设置。有关于此的一些信息是可以在 Debian wiki 上找到有些是在/usr/share/doc/postgresql-common/README.Debian.gz.

Debian 设置支持多个“集群”(运行 PostgreSQL 实例,以及多个不同版本的 PostgreSQL)。要找出您的计算机上有哪些,请运行pg_lsclusters

$ pg_lsclusters 
Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

身份验证的默认设置(检查/etc/postgresql/«version»/«cluster-name»/pg_hba.conf- 可能/etc/postgresql/9.6/main/pg_hba.conf)是本地用户使用“ident”身份验证,即通过检查哪个用户正在运行,以他们的 Unix 用户名进行身份验证,无需密码提示psql。因此,要进入数据库,这应该可行:

$ sudo -u postgres psql template1

你的命令不起作用,因为你强制它使用 TCP 连接而不是本地 Unix 套接字(你仍然可以使用该-p选项,但这-p 5432是默认选项,所以我省略了它)。默认身份验证仅适用于 Unix 套接字。

PS:Debian PostgreSQL 设置非常好。我个人使用它,并且建议坚持使用它,而不是尝试删除它并安装上游软件包,除非您确实必须这样做(例如,为了获取特定版本的 PostgreSQL)。

答案2

如果有东西在端口 5432 上运行,并不意味着它是 postgres。它可以是任何东西。 postgresql 是否正在运行以及为什么正在运行?天知道。您之前安装的某些应用程序可能需要它。

运行(以 root 或 sudo 身份):netstat -tlnp并查找端口 5432。如​​果您在PID/Program name选项卡上看到类似这样的内容,1361/postgres则很可能是 postgresql。

用户是什么时候postgres创建的?当postgres安装时。查看 APT 历史文件,也许您能够找到确切的文件以进一步调查并获取日期时间。

for i in $(ls /var/log/apt/history.log*); do echo $i && zcat $i | grep --color postgresql; done

如何重置 postgres 密码:关联

编辑:您很可能需要:sudo -u postgres psql.

相关内容