我的机器上似乎安装了几个 postgresql。我不确定这是不是个错误,或者 Ubuntu 出于某种奇怪的原因复制了目录并将它们保存在其他地方。
我有一个 postgresql 目录/etc
一个/usr/lib
一个/opt
我现在真的非常困惑。
我该如何删除多余的?
哪些是多余的?
我还需要确保我的 rails 环境中的“pg”gem 指向正确的 posgresql db 服务器。
任何有关我的问题的想法都将非常重要。
答案1
人们对于“安装”的含义可能会产生一些困惑。
- 该
/etc/postgresql/
文件夹是您的集群的配置文件夹。 - 该
/var/lib/postgresql/
文件夹用于存放数据。 - 每个版本的程序二进制文件通常位于单独的文件夹中
/usr/lib/postgresql/
。
我真的不知道,/opt/postgresql
因为我的电脑上没有这个。但是/opt
是“可选”二进制文件,所以您的安装可能在这里,而不是/usr/lib/postgresql/
。
简而言之,我认为您可能只有一个安装,但在多个位置有文件。
如果你想查看已安装的内容,这可能会有所帮助:
postgresql 的结构如下:
为了使事情更清楚一点,postgres 的结构如下:
版本字面意思是 postgresql 程序二进制文件的版本。每个已安装的版本可能都安装了该版本下的集群。如果没有,则该版本实际上处于休眠状态,因为它没有关联的数据或正在运行的服务器。
每个版本下可能存在多个集群。您可以将集群视为正在运行的 prostgres 服务器(进程)。每个集群必须有自己的端口/套接字文件,供客户端连接。每个集群将由一个版本管理。
每个集群内都会有多个数据库。客户端连接时会选择一个数据库进行连接。它可以在不打开新会话的情况下请求更改所连接的数据库,但只能连接到一个数据库。
你安装了什么?
要了解安装了哪些版本,您可以查看dpkg
和apt
。您应该能够使用apt
和卸载版本dpkg
,但请务必小心,在检查每个版本下的集群之前不要这样做。
要找出您拥有的集群,请使用命令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
停止集群。删除数据文件夹和可选的日志文件。
最后删除数据和配置。数据文件夹应该是,
/var/lib/postgres/data/<version>/<cluster>
但请检查的输出以pg_lsclusters
确保这一点。集群的配置:所有集群在中都有自己的配置文件夹
/etc/postgresql/<version>/<cluser>/
。
如果您从未要求过,为什么您会得到多个集群?
通常,您必须专门请求创建集群才能获得新集群。唯一的例外是当您升级集群时,它将有效地创建一个新集群,而旧集群则保留在原处。
答案2
您可以使用 dpkg -S 查看给定目录属于哪个包。这将让您查看目录是否属于不同的包。