消除 Ubuntu 10.04 上的非工作 PostgreSQL 安装并重新开始
Posted
技术标签:
【中文标题】消除 Ubuntu 10.04 上的非工作 PostgreSQL 安装并重新开始【英文标题】:Eliminating non-working PostgreSQL installations on Ubuntu 10.04 and starting afresh 【发布时间】:2012-08-06 04:00:53 【问题描述】:我发现我在 Ubuntu 10.04 上有两个旧 PostgreSQL 安装的残骸:
$ pg_lsclustersVersion Cluster Port Status Owner Data directory Log file
Use of uninitialized value in printf at /usr/bin/pg_lsclusters line 38.
8.4 main 5432 down /var/lib/postgresql/8.4/main /var/log/postgresql/postgresql-8.4-main.log
Use of uninitialized value in printf at /usr/bin/pg_lsclusters line 38.
9.1 main 5433 down /var/lib/postgresql/9.1/main /var/log/postgresql/postgresql-9.1-main.log
$
尝试执行基本功能会返回错误,例如:
createuser: could not connect to database postgres: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
当我尝试启动数据库服务器时会出现更多信息:
$ sudo /etc/init.d/postgresql start
* Starting PostgreSQL 9.1 database server
* Error: The cluster is owned by user id 109 which does not exist any more
...fail!
$
我的问题:如何完全删除两个集群并设置一个新集群?我已经尝试删除、清除和重新安装postgresql
,遵循此处的建议:https://***.com/a/2748644/621762。现在pg_lsclusters
显示不存在集群,但是当我尝试createuser
、createdb
或运行psql
时,No such file or directory
错误仍然存在。我做错了什么?
【问题讨论】:
听起来您正在尝试使用来自 backports.org 的 PostgreSQL 9.1 构建,因为 Ubuntu 10.04 没有 PostgreSQL 9.1。对吗? @CraigRinger:我使用了 ppa.launchpad.net/pitti/postgresql/ubuntu 的软件包。 【参考方案1】:首先,您链接的那个答案非常不安全 - 手动编辑 /etc/passwd
?!? dselect
apt
通配符在哪里?疯狂的事情。我对您遇到问题并不感到惊讶。
至于no such file or directory
消息:您需要确保您有一个正在运行的PostgreSQL 服务器(“集群”),然后才能使用createdb
等管理命令,因为它们会连接到服务器。 No such file or directory
消息告诉您服务器不存在或未运行。
这是发生了什么:
Ubuntu 使用pg_wrapper
管理多个并发 PostgreSQL 实例。您遇到的问题确实与 pg_wrapper
有关。
理想情况下,您应该使用pg_dropcluster
来摆脱不需要的集群。不幸的是,听从了不好的建议,听起来你的系统有点混乱,PostgreSQL 软件包安装了一半并且有点混乱。您需要修复安装,或完全清除它。
我会把它清理干净。我建议:
确认pg_lsclusters
没有列出数据库集群
apt-get --purge remove postgresql\*
- 这是重要的
删除/etc/postgresql/
删除/etc/postgresql-common
删除/var/lib/postgresql
userdel -r postgres
groupdel postgres
apt-get install postgresql-common postgresql-9.1 postgresql-contrib-9.1 postgresql-doc-9.1
apt-get --purge
步骤可能会失败,因为您删除了用户 ID 等。使用 useradd -r -u 109 postgres
重新创建 postgres
用户 ID 应该允许您成功重新运行清除,然后删除之后的用户。
【讨论】:
我发现我没有做的一件事是apt-get --purge remove postgresql\*
。相反,我只是选择性地删除了(使用--purge
)我主动安装的各个 postgresql 包。我想我没有注意到其他依赖项。感谢您的明确解释。
@brannerchinese 很高兴它成功了。将来,您可以使用pg_dropcluster
删除集群以避免混淆pg_wrapper
。
我对我的用户做了一些无意义的事情,所以重新创建用户(以及组)帮助我彻底清理了一切。【参考方案2】:
这个答案不是直接关于删除 postgres 实例,而是关于解决问题,
Error: The cluster is owned by user ...
我在尝试启动指向通过不同容器(在不同主机上)生成的 postgres 数据目录的 docker 容器时遇到此错误。
该错误与目录所有权直接相关。就我而言,系统无法在当前环境中找到某些 postgres 目录所拥有的用户。通过将这些目录重新拥有给正确的用户可以解决问题。以下是一个示例映射(对我有用):
chown -R postgres:postgres /var/lib/postgresql
chown -R postgres:postgres /etc/postgresql
chown -R postgres:postgres /var/log/postgresql
chown -R postgres:postgres /var/run/postgresql
【讨论】:
以上是关于消除 Ubuntu 10.04 上的非工作 PostgreSQL 安装并重新开始的主要内容,如果未能解决你的问题,请参考以下文章