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

bra*_*ese 3 postgresql ubuntu purge

我发现在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  
$
Run Code Online (Sandbox Code Playgroud)

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

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"?
Run Code Online (Sandbox Code Playgroud)

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

$ 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!
$ 
Run Code Online (Sandbox Code Playgroud)

我的问题:如何完全删除两个群集并设置一个新群集?我已经尝试删除,清除和重新安装postgresql,遵循以下建议:https://stackoverflow.com/a/2748644/621762.现在pg_lsclusters显示存在任何集群,但是No such file or directory当我尝试错误仍然存在createuser,createdb或运行psql.我没做什么?

Cra*_*ger 15

首先,你联系到的答案是非常不安全的 - 手工编辑/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用户ID useradd -r -u 109 postgres应允许您成功重新运行清除,然后删除用户.


pic*_*e 涅 6

这个答案并不是直接删除 postgres 实例,而是解决问题,

Error: The cluster is owned by user ...
Run Code Online (Sandbox Code Playgroud)

我在尝试启动指向通过不同容器(在不同主机上)生成的 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
Run Code Online (Sandbox Code Playgroud)