在同一台Ubuntu服务器上运行PostgreSQL的多个版本

我在同一台服务器上运行PostgreSQL 8.4和9.0(Ubuntu Lucid)。

我通过apt-get(8.4使用默认的软件包源,而从https://launchpad.net/~pitti/+archive/postgresql添加了ppa)来安装它们。

当我从命令行运行一个类似“createdb”的命令或启动“psql”shell时,我的系统默认使用PostgreSQL 8.4。

那么,如何强制这些命令使用PostgreSQL 9.0而不是8.4呢?

假设Ubuntu和Debian一样,那么你的两个PostGreSQL实例将运行在不同的端口上。

您可以轻松地检查configuration文件以查看哪个版本在哪个端口上:

$ grep -H '^port' /etc/postgresql/*/main/postgresql.conf /etc/postgresql/8.4/main/postgresql.conf:port = 5432 /etc/postgresql/8.3/main/postgresql.conf:port = 5433 

大多数PostGreSQL命令都使用“-p ####”或“–port = ####”选项,因此可以使用它来select所需的版本。

使用--cluster选项例如(假设两个集群都被命名为默认主):

 psql --cluster 8.4/main psql --cluster 9.0/main 

通用模式是:

 --cluster version/name # for local connections --cluster version/host:port # for TCP/IP connections 

要列出所有已安装的群集(名称,端口,状态,数据目录等),请使用pg_lsclusters命令。

检查man pg_wrapper获取更多信息。

您可以使用dpkg -L <packagename>来查看特定软件包拥有的文件。 使用postgresql 9软件包运行它,并查看该版本的createdb命令的存储位置。

大多数postgresql命令将通过端口或path适当select数据库来工作跨版本,但是这当然不适用于启动脚本和创build命令。