4

我发现我在 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 ://stackoverflow.com/a/2748644/621762 。现在pg_lsclusters显示不存在集群,但是No such file or directory当我尝试或运行createuser时错误仍然存​​在。我做错了什么?createdbpsql

4

2 回答 2

17

首先,您链接的那个答案非常不安全-手动编辑/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 等。重新创建postgres用户 IDuseradd -r -u 109 postgres应该允许您成功重新运行清除,然后删除用户。

于 2012-08-09T00:48:54.860 回答
4

这个答案不是直接关于删除 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
于 2020-01-02T21:46:34.097 回答