![如何在 Cygwin 中升级 Postgres 数据库?](https://linux22.com/image/803638/%E5%A6%82%E4%BD%95%E5%9C%A8%20Cygwin%20%E4%B8%AD%E5%8D%87%E7%BA%A7%20Postgres%20%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%9F.png)
我更新了一些 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
- 卸载 postgres 9
- 安装 postgres 8.2
- 安装 libpq
- /etc/rc.d/init.d/postgresql 启动
- 对每个数据库执行此操作:
- pg_dump -f stocks.sql.gz -Z 9 -C 股票
- /etc/rc.d/init.d/postgresql 停止
- cd $PGDATA/.. # /usr/share/postgresql/..
- mv postgresql postgresql-8.2
- 安装 postgres 9、postgresql-contrib,卸载 libpq。
- /usr/sbin/pg_ctl.exe 初始化
- /usr/sbin/pg_ctl.exe启动
- createdb.exe # 使用你的用户名创建一个数据库
- gzip -dc stocks.sql.gz | psql # 许多警告 + 错误
从 9.2 升级到 9.3
- 阅读有关升级 Postgres 的信息: http://www.postgresql.org/docs/current/static/upgrading.html
- 如果有必要,请安装旧版本的 Postgres。有人维护着 Cygwin 版本的历史档案。
- 浏览您需要的setup.ini文件的时间戳:http://www.crouchingtigerhiddenfruitbat.org/Cygwin/timemachine.html
- 复制文件夹的地址(不是index.html)
- 运行
/setup-x86.exe -X
时选择-X
忽略安装签名(它们未被存档)。 - 将地址粘贴到对话框中以选择您的下载站点。然后您将看到当时可用软件包的快照。
- 如果您关闭 cygserver 进行升级,请重新启动它:以管理员身份运行:
cygrunsrv -S cygserver
- 启动旧版本的 Postgres:
/usr/sbin/postmaster &
或者/usr/sbin/pg_ctl start
- 将数据库转储到临时文件中
pg_dumpall > /tmp/pg.sql
- 关闭 Postgres
/usr/sbin/pg_ctl.exe stop
- 移动旧数据目录
mv /usr/share/postgresql /usr/share/postgresql-9.2
- 正常运行安装程序并安装最新的 Postgres。确保选择您的正常下载站点。
- 初始化数据库
/usr/sbin/pg_ctl init
- 启动新版本的 Postgres
/usr/sbin/pg_ctl.exe start
- 导入旧数据库
psql -d postgres -f /tmp/pg.sql