【问题标题】:Upgrade Postgresql 8.3 database file to 8.4将 Postgresql 8.3 数据库文件升级到 8.4
【发布时间】:2011-04-06 21:08:33
【问题描述】:

我将 Ubuntu 8.04 升级到 Ubuntu 10.04。不幸的是,升级过程还将 Postgres 8.3 安装更新为 Postgres 8.4 安装。我的感觉是虽然数据库引擎二进制文件已经更新,但数据库本身并没有迁移,因此8.4无法加载它。 由于 8.3 数据格式与 8.4 格式不兼容,更改 postgresql.conf 是不够的,我也不能在我的 8.4 安装中使用 pg_dump

我需要一种方法将我以前的基础从 8.3 升级到 8.4,无法访问 8.3 引擎,只有 8.4。

有什么线索吗?

【问题讨论】:

    标签: postgresql ubuntu upgrade


    【解决方案1】:

    Debian 以及 Ubuntu 中的 postgres 软件包有一种非常明确的方式来从一个 Postgres 版本升级到另一个版本。该过程记录在 /usr/share/doc/postgresql-common/README.Debian 中,如下所示:

    Default clusters and upgrading
    ------------------------------
    When installing a postgresql-X.Y package from scratch, a default
    cluster 'main' will automatically be created. This operation is
    equivalent to doing 'pg_createcluster X.Y main --start'.
    
    Due to this default cluster, an immediate attempt to upgrade an
    earlier 'main' cluster to a new version will fail and you need to
    remove the newer default cluster first. E. g., if you have
    postgresql-8.2 installed and want to upgrade to 8.3, you first install
    postgresql-8.3:
    
      apt-get install postgresql-8.3
    
    Then drop the default 8.3 cluster:
    
      pg_dropcluster 8.3 main --stop
    
    And then upgrade the 8.2 cluster to 8.3:
    
      pg_upgradecluster 8.2 main
    

    执行此操作的最佳时间是升级到已删除您当前运行的 Postgresql 版本的 Ubuntu 版本之前,即在本例中,而在 Ubuntu 版本上可以同时安装 Postgres 8.3 和 Postgres 8.4。就我而言,我从轻松到业力,将 8.3 升级到 8.4,然后从业力到清醒。

    如上所述的升级过程非常顺利。 *pg_upgradecluster* 命令将停止旧版本,迁移数据,然后在与旧版本相同的端口上启动新版本,最后在新端口上启动旧版本。

    如果您在迁移到缺少 postgres 8.3 的 Ubuntu 版本之前没有迁移 8.3 postgres 数据,迁移仍然很简单。首先将 karmic ubuntu 存储库添加到 /etc/apt/sources.list

    deb http://archive.ubuntu.com/ubuntu/ karmic main restricted universe
    

    安装 postgresql-8.3:

    apt-get update && apt-get install postgresql-8.3
    

    删除您的 8.4 集群。 警告:如果您有任何数据,这将删除您的 postgresql 8.4 安装中的数据。但是,如果您只是因为需要将 8.3 升级到 8.4 而这样做,那么您的 8.4 集群中将没有数据。

    pg_dropcluster 8.4 main --stop
    

    然后将8.3集群升级到8.4:

      pg_upgradecluster 8.3 main
    

    最后,删除 postgresql-8.3 软件包,并从 /etc/apt/sources.list 中删除 jaunty-line,然后再次运行 apt-get update

    像往常一样,在执行上述任何操作之前备份您的 postgres 目录总是一个好主意。

    【讨论】:

      【解决方案2】:

      您必须在临时位置从源安装 PostgreSQL 8.3,将旧数据复制到那里,启动 Pg,使用 pd_dumpall 转储它的数据,然后将此数据导入新的 Postgres。

      不安装 Pg 8.3 是不可能的。

      【讨论】:

      • 这就像一个魅力!我使用 --enable-integer-datetimes 和 --without-readline 从源代码编译它。只有这样我才能pg_dumpall。谢谢!
      【解决方案3】:

      确保在尝试任何操作之前备份所有内容。

      有一个pg_migrator 项目,我认为它会为你做到这一点,但我不确定它是否需要 8.3 应用程序或源代码。

      【讨论】:

      • 是的,我认为需要一些东西(来源我们的二进制文件),不记得是哪一个。此外,它的设置看起来比 8.3 的编译/启动更复杂。无论如何感谢您的帮助!
      猜你喜欢
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      相关资源
      最近更新 更多