如何在 Cygwin 中升级 Postgres 数据库?

如何在 Cygwin 中升级 Postgres 数据库?

我更新了一些 Cygwin 包,现在无法启动 Postgres:

$ /usr/sbin/postmaster
FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 8.2, which is not compatible with this version 9.2.4.

我试过pg_upgrade但您需要指定旧二进制文件和新二进制文件。另外,pg_upgrade 表示它仅适用于 8.3。

我以为我可以使用 setup-x86.exe 来选择以前的版本,即 8.2.11-1,但是当我安装该版本时,我无法启动 Postgres:

$ /usr/sbin/postgres.exe
Bad system call (core dumped)

答案1

  1. 卸载 postgres 9
  2. 安装 postgres 8.2
  3. 安装 libpq
  4. /etc/rc.d/init.d/postgresql 启动
  5. 对每个数据库执行此操作:
    • pg_dump -f stocks.sql.gz -Z 9 -C 股票
  6. /etc/rc.d/init.d/postgresql 停止
  7. cd $PGDATA/.. # /usr/share/postgresql/..
  8. mv postgresql postgresql-8.2
  9. 安装 postgres 9、postgresql-contrib,卸载 libpq。
  10. /usr/sbin/pg_ctl.exe 初始化
  11. /usr/sbin/pg_ctl.exe启动
  12. createdb.exe # 使用你的用户名创建一个数据库
  13. gzip -dc stocks.sql.gz | psql # 许多警告 + 错误

从 9.2 升级到 9.3

  1. 阅读有关升级 Postgres 的信息: http://www.postgresql.org/docs/current/static/upgrading.html
  2. 如果有必要,请安装旧版本的 Postgres。有人维护着 Cygwin 版本的历史档案。
    1. 浏览您需要的setup.ini文件的时间戳:http://www.crouchingtigerhiddenfruitbat.org/Cygwin/timemachine.html
    2. 复制文件夹的地址(不是index.html)
    3. 运行/setup-x86.exe -X时选择-X忽略安装签名(它们未被存档)。
    4. 将地址粘贴到对话框中以选择您的下载站点。然后您将看到当时可用软件包的快照。
  3. 如果您关闭 cygserver 进行升级,请重新启动它:以管理员身份运行:cygrunsrv -S cygserver
  4. 启动旧版本的 Postgres:/usr/sbin/postmaster &或者/usr/sbin/pg_ctl start
  5. 将数据库转储到临时文件中pg_dumpall > /tmp/pg.sql
  6. 关闭 Postgres/usr/sbin/pg_ctl.exe stop
  7. 移动旧数据目录mv /usr/share/postgresql /usr/share/postgresql-9.2
  8. 正常运行安装程序并安装最新的 Postgres。确保选择您的正常下载站点。
  9. 初始化数据库/usr/sbin/pg_ctl init
  10. 启动新版本的 Postgres/usr/sbin/pg_ctl.exe start
  11. 导入旧数据库psql -d postgres -f /tmp/pg.sql

相关内容