消除 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 显示不存在集群,但是当我尝试createusercreatedb 或运行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 安装并重新开始的主要内容,如果未能解决你的问题,请参考以下文章

Larbin简介,及其在Ubuntu10.04下的编译安装

Larbin简介,及其在Ubuntu10.04下的编译安装

Ubuntu上的非法模式字符'Y'

ubuntu 10.04 无线办公室连网

将我的 ubuntu 服务器升级到 10.04 后如何修复我的虚拟主机设置

Ubuntu10.04桌面版,网络设置经常无法生效。有稳定的解决办法吗?