消除Ubuntu 10.04上的非工作PostgreSQL安装并重新开始

Eliminating non-working PostgreSQL installations on Ubuntu 10.04 and starting afresh

我发现在Ubuntu 10.04上有两个旧的PostgreSQL安装的残骸:

1
2
3
4
5
6
$ 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  
$

尝试执行基本功能会返回错误,例如:

1
2
3
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"?

当我尝试启动数据库服务器时会出现更多信息:

1
2
3
4
5
$ 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显示没有集群,但是当我尝试createusercreatedb或运行psql时,No such file or directory错误仍然存在。 我没做什么?


首先,你联系到的答案是非常不安全的 - 手工编辑/etc/passwd?!? dselect apt通配符会在哪里?疯狂的事情。你有问题我并不感到惊讶。

至于no such file or directory消息:在使用createdb之类的管理命令之前,需要确保有一个正在运行的PostgreSQL服务器("集群"),因为它们建立了与服务器的连接。 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

由于您已删除用户ID等,apt-get --purge步骤可能会失败。使用useradd -r -u 109 postgres重新创建postgres用户ID应该允许您成功重新运行清除,然后删除用户。