我的系统(Ubuntu Lucid)上安装了两个不同版本的 PostgreSQL:
- /var/lib/postgresql/8.4
- /var/lib/postgresql/9.0
默认情况下,当我运行 PostgreSQL 命令(例如 createdb 或 psql)时,使用 9.0 版本。
如何配置我的系统以默认使用 8.4 版本?
答案1
各种 PostgreSQL 命令行工具将默认与监听默认端口 (5432) 的服务器通信。
您可以通过查找相关服务器的文件port
中变量来确定每个服务器正在监听哪个端口。/etc/postgresql/$VERSION/main/postgresql.conf
要使命令行工具默认与其他服务器通信,您有两个选择:
首先,您可以通过编辑前面提到的配置文件来切换两个服务器正在监听的端口,然后重新启动两个服务器(您可能希望在启动之前先停止每个服务器)。
或者,您可以将PGPORT
环境变量设置为所需默认服务器的端口号。这应该会影响使用 PostgreSQL 客户端库的所有应用程序。
要列出每个数据库集群的内容,请使用psql -l -p PORT_NUMBER
。要迁移数据,请参阅“24.4. 版本间的迁移“在 PostgreSQL 文档中。
删除旧版本的 PostgreSQL 可以减少磁盘写入,从而节省笔记本电脑和 SSD 的磨损。
答案2
正如 James/Bryce 正确指出的那样,这两个版本将在不同的端口上运行。
但是命令行实用程序也会以一个版本或另一个版本运行。例如,pg_dump --version
可能会给您意想不到的结果。
您可以在名为~/.postgresqlrc
首先,您需要知道集群名称,要找到它,请运行以下命令:
$ pg_lsclusters
这将输出可用的集群,例如在我的系统上我正在运行 9.6 和 13:
Ver Cluster Port Status Owner Data directory Log file
9.6 main 5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log
13 main 5433 online postgres /var/lib/postgresql/13/main /var/log/postgresql/postgresql-13-main.log
然后创建文件~/.postgresqlrc
并输入以下内容来控制使用的默认版本:
# Version Clustername Database
13 main postgres
更改13
为您想要默认运行的版本,在这种情况下将是8.4
或9.0
。
答案3
如果您想删除一个版本,以便另一个版本成为默认版本......
# see what you've got...
pg_lsclusters
# drop v13
sudo pg_dropcluster 13 main --stop