我想我已经安装了多个postgresql服务器,我如何识别和删除“额外”的?

我似乎在某种程度上在我的机器上安装了一些postgresql。 我不确定这是否是一个错误,或者如果Ubuntu出于某种奇怪的原因重复了进攻并将其保留在别处。 我在/ etc中有一个postgresql目录

一个在/ usr / lib中

和/ opt中的一个

我现在很困惑。 我怎么去删除额外的那个,哪个是额外的? 我还需要确保在我的rails env中的“pg”gem指向正确的posgresql db服务器。
对我的问题的任何想法将是巨大的。

对于灌输的含义,可能会有一些困惑。 /etc/postgresql/文件夹是您的群集的configuration文件夹。 /var/lib/postgresql/文件夹用于数据。 每个版本的程序二进制文件通常位于/usr/lib/postgresql/中的独立文件夹中。 我真的不知道关于/opt/postgresql因为我没有我的。 但是/opt是“可选的”二进制文件,所以可能你的安装在这里而不是/usr/lib/postgresql/

总之,我认为你可能只有一个安装文件在多个位置。

如果你想看看你已经安装了什么,这可能会有所帮助:

如何构buildpostgresql:

为了使事情更清楚postgres的结构如下:

  • 一个版本的字面意思是指哪个版本的postgresql程序二进制文件。 每个安装的版本可能会在该版本下安装一个群集。 如果没有,那么该版本是有效的hibernate,因为它没有数据或运行服务器关联。

  • 在每个版本下,许多集群都有。 您可以将群集视为正在运行的prostgres服务器(进程)。 每个集群都必须有自己的端口/套接字文件供客户端连接。 每个集群将由单个版本进行pipe理。

  • 每个集群内部将有多个数据库。 当客户端连接时,select要连接的数据库。 它可以要求更改连接到哪个数据库而不打开新的会话,但它只能连接到一个。

你有什么安装?

要找出哪些版本安装,你可以看看dpkgapt 。 您应该能够使用aptdpkg卸载版本,但是在检查每个版本下面有哪些集群之前,请务必不要这样做。

要找出你有哪些集群,使用命令pg_lsclusters 。 当我打电话给我时,你会得到一些不同的东西:

 Version Cluster Port Status Owner Data directory Log file 9.1 main 5432 online <unknown> /var/lib/postgres/data/9.1/main /var/log/postgresql/postgresql-9.1-main.log 

请注意“状态”列。 如果一个集群不在线,那么它只是在磁盘上的数据,并没有做任何事情。 如果它在线,那么它正在运行。

你如何合并群集?

您可以使用pg_dumpall命令将内容从一个群集复制到另一个群集,以生成备份并使用psql将其导入到要保留的群集。 它值得在开始之前保留所有内容的备份。

如何删除不再使用的群集?

  • 使用pg_lsclusters获取有关这些集群的详细信息,并记下这些集群的数据目录和日志文件。

  • 使用pg_ctlcluster <version> <cluster> stop停止集群。

  • 删除数据文件夹和可选的日志文件。

  • 最后删除数据和configuration。 数据文件夹应该是/var/lib/postgres/data/<version>/<cluster>但检查pg_lsclusters的输出以确保这一点。 群集的configuration:所有群集都将拥有自己的configuration文件夹
    /etc/postgresql/<version>/<cluser>/

如果你从来没有要求过,为什么你会得到多个集群呢?

通常你必须特别要求创build一个集群来获得一个新集群。 唯一的例外是当你升级一个集群时,它将有效地创build一个新集群,并保留原来的集群。

您可以使用dpkg -S来查看给定目录属于哪个包。 这可以让你看看目录是否属于不同的包。