Postgresql 在Windows上将Postgres从32位版本升级到64位版本

Postgresql 在Windows上将Postgres从32位版本升级到64位版本,postgresql,upgrade,32bit-64bit,Postgresql,Upgrade,32bit 64bit,我找不到具体的步骤如何正确地做到这一点。当我进行简单升级时,我得到一个错误: Exception in thread "main" org.postgresql.util.PSQLException: ERROR: expected "]" to end datum, but got "80}"; length = 4 org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102

我找不到具体的步骤如何正确地做到这一点。当我进行简单升级时,我得到一个错误:

Exception in thread "main" org.postgresql.util.PSQLException: ERROR: expected "]" to end datum, but got "80}"; length = 4
org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102)
org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835)
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500)
org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374)
org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)

一般程序是:

  • 使用32位版本的
    pg_dump
    转储数据库副本,使用
    pg_dumpall--globals only
    转储用户角色等
  • 关闭并有选择地卸载32位版本-但实际上不需要删除数据库目录
  • 安装64位版本并启动它
  • 使用
    psql
    还原全局转储,然后还原数据库转储
(事实上,需要澄清的是,如果64位版本也是比您升级的32位版本更新的PostgreSQL版本,那么您应该先安装较新版本,然后使用较新版本的
pg_dump
转储较旧版本的数据库。仅当版本相同且您刚刚转换为64位时,上述规定才适用。)-位)


另一件需要注意的事情是,从32位升级到64位通常没有什么意义。PostgreSQL使用每进程模型,这意味着每个进程都可以使用(2GB-共享_缓冲区)RAM用于在32位Windows上工作。对于大多数任务来说,这通常是足够的,因为即使在有大量RAM的系统上,您也可以将共享缓冲区保留得相当小,并将剩余的RAM用作操作系统磁盘缓存。只有当您需要大量的
work\u mem
来处理非常大的单个查询时,这才是一个问题。

您到底在做什么ean通过“简单升级”。描述您所做的。另外:PostgreSQL版本?什么windows版本?一般过程是:使用32位版本的
pg_dump
转储数据库副本和
pg_dumpall--globals only
来转储用户角色等。关闭并可选地卸载32位版本-但无需实际删除数据库目录。安装64位版本,启动它,用
psql
还原globals转储,然后还原数据库转储。这正是我所需要的。我认为升级就像运行64位安装程序一样简单,无需进行任何备份。32位和64位版本的PostgreSQL具有不同的文件格式,就像PostgreSQL在不同的平台和操作系统上具有不同的文件格式一样。尽管数据移动性令人沮丧,但这是一个重要的性能mance优化和代码简化。这就是为什么你不能只安装64位版本并让它工作的原因-因为文件格式不同,它有不同的默认datadir以避免冲突。只是在这里遇到了相同的问题。感谢你的解释,我只是卸载了64位PQSL并安装了32位。再次尝试相同的方法在…作品:)只是觉得值得一提;我刚刚使用了PGv10 32位安装中的pg_转储,转储到-c“bak”文件,在同一台服务器上安装了PGv11 64位,并使用64位安装的pg_还原来移动数据。完全没有打嗝。@Krummelz这是因为您使用了
pg_dump
pg_restore
,所以您进行了逻辑转储/还原。只有在您尝试直接针对32位postgres的数据目录启动64位postgres或使用物理备份/还原(如
pg_basebackup
)时,才会出现问题。此外,您所做的只有在32位和64位版本和平共存的情况下才能起作用,而由于服务名称冲突,它们在Windows上通常不会这样做。