在 Windows 7 的应用程序安装程序中捆绑 PostgreSQL
Posted
技术标签:
【中文标题】在 Windows 7 的应用程序安装程序中捆绑 PostgreSQL【英文标题】:Bundling PostgreSQL in an app installer for Windows 7 【发布时间】:2013-05-19 18:19:26 【问题描述】:我正在使用 postgreSQL 7.4.2 作为数据库的独立 JAVA 应用程序。该应用程序在 Windows 7 中无法运行。postgreSQL 服务器使用 cygwin 运行。编写 shell 脚本从源代码安装 postgreSQL,在应用程序安装期间设置服务器和创建数据库(当前应用程序在 Windows XP 上运行)
我们决定更新到 9.4.2 版本的 postgreSQL。但是手册中写着“不推荐使用cygwin环境运行postgreSQL服务器”。
我的问题是:如果不推荐 cygwin,那么从源代码安装 postgreSQL、设置服务器并在 Windows 7 上安装应用程序期间创建数据库的替代环境是什么。
我是一名 JAVA 开发人员,而不是数据库专家。但我被要求进行此迁移。请帮我把事情做好。
【问题讨论】:
【参考方案1】:在 Windows 上,最好的办法是捆绑预构建 PostgreSQL 版本的 .zip 二进制文件。这为您提供了与安装程序中分发的相同的预测试二进制文件,并使更新到新的单点版本就像停止服务器、替换二进制文件和启动服务器一样简单。
您可以从 EnterpriseDB 获取预构建的库存 PostgreSQL 二进制文件。
如果您坚持从源代码构建,请使用 PostgreSQL 手册 here 中记录的本机 Microsoft Visual C++ 工具链。获取必备库非常痛苦,因此我编写了一些工具来帮助解决这个问题;你可以find the pg_build_win tool here。我强烈建议您使用预构建的二进制文件而不是构建自己的二进制文件,除非您有非常令人信服的理由;该工具主要用于自动化集成测试和开发。
请不要在 Cygwin 上使用 PostgreSQL。它没有经过很好的测试或得到很好的支持,如果仍然关心它的几个用户停止维护它,它可能会在未来的版本中消失。如果出于某种原因您不能/不会使用 MSVC,您可以使用基于 gcc 的 MinGW 工具链来构建原生 Windows 二进制文件。
如果您的程序在 Cygwin 下运行并且尚未移植到本机 Windows 下运行(您可能应该开始这样做),您可以安全地编译并使用 Cygwin 下的libpq
连接到原生 Windows PostgreSQL 构建。
(顺便说一句,它是“Java”而不是“JAVA”;它不是首字母缩写词)。
【讨论】:
感谢您的建议。 我尝试使用脚本创建数据库。我收到以下错误:C:\Program Files\cygwin\bin\bash.exe (6096): *** could't allocate cygwin heap, Win32 error 0, base 0x690000, top 0x69E000, reserve_size 57344, allocsize 57344, page_const 4096 1 [main] bash 888 sync_with_child: child 6096(0x1D8) 在初始化之前死亡,状态码为 0x1 21479 [main] bash 888 sync_with_child: *** child state waiting for longjmp ./install_database.sh: fork: 资源暂时不可用。这说明什么??? @user2416545 由于“使用脚本”绝对没有告诉我任何信息,我无法猜测。也许您应该发布一个包含所有适当详细信息的新问题?无论如何,再一次,我真的不推荐使用 Cygwin for PostgreSQL 而你是。 我将停止使用 cygwin。我在这里有一个疑问:如果我使用预构建的二进制文件,我是否能够使用 .bat 文件中的二进制文件(即 initdb、postgres、pg_dump)来设置服务器和数据库创建。如果这是可能的,那么我认为不需要 cygwin。 @user2416545 是的,当然。他们采用相同的参数等,只是不需要在 Cygwin 下运行。如果您的应用程序依赖于 Cygwin,您甚至可以从 Cygwin shell 调用它们。唯一的限制是 Cygwin 二进制文件不能链接到本机libpq
;但是,您仍然可以将 cygwin libpq
与本机 Windows PostgreSQL 一起使用。以上是关于在 Windows 7 的应用程序安装程序中捆绑 PostgreSQL的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 10 上运行 dot net 3.5 应用程序
cx_freeze include_msvcr 不捆绑 windows VC2015 运行时