我开始关注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.