如果可能的话如何嵌入 PostgreSQL?
-
09-06-2019 - |
解决方案
除非您对代码进行重大重写,否则不可能“嵌入”运行 Postgres。要么将其作为单独的进程运行,要么使用其他东西。SQLite 是一个很好的选择。但还有其他的。MySQL 有一个嵌入式版本。请参阅 http://mysql.com/oem/. 。还有几种 java 选择,Mac 也有可以编写的 Core Data。天啊,你甚至可以使用 FoxPro。您使用什么操作系统以及您需要数据库提供哪些服务?
其他提示
您无法嵌入它,也不应该尝试。
对于嵌入,您应该使用 sqlite 正如你提到的或 火鸟关系数据库管理系统.
在后台进程中运行 postgresql。
在应用程序中启动一个单独的线程,该线程将通过使用一些随机空闲端口将其绑定到本地主机或使用套接字(Windows 支持套接字吗?)以本地模式启动 postgresql 服务器。这应该相当简单,比如:
系统(“C:\Program Files\MyApplication\pgsql\postgres.exe -D C:\Documents and Settings\User\Local Settings\MyApplication\database -h 127.0.0.1 -p 12345”);
然后连接到 127.0.0.1:12345。
当你的应用程序退出时,你总是可以向你的线程发送一个SIGTERM,然后等待几秒钟让postgresql退出(即加入线程)。
附:您还可以使用 pg_ctl 要控制“嵌入式”数据库,即使没有线程,只需在启动应用程序时执行“pg_ctl start”(使用适当的选项),在退出应用程序时执行“pg_ctl stop”即可。
您不能将其嵌入为进程内类型的东西,如 sqlite 等,但您可以使用 Inno setup 轻松将其嵌入到您的应用程序设置中 http://www.innosetup.org. 。搜索他们的邮件列表存档,你会发现有人为你完成了大部分工作,你所要做的就是获取压缩的发行版,当用户安装你的应用程序时,你可以轻松地安装 postgresql。然后,您可以使用 pg_hba.conf 文件将服务器限制为仅限本地主机。不是真正的嵌入式数据库,但它可以工作。
PostgreSQL 旨在作为独立服务器运行;如果您足够努力且足够长时间地破解它,则可能可以嵌入它,但在单独的进程中按预期运行它会容易得多。
HSQLDB (http://hsqldb.org/) 是另一个易于嵌入的数据库。需要 Java,但对于 Java 应用程序来说是一个优秀且常用的选择。
有人在 Mac OS X 上尝试过:
http://pagesperso-orange.fr/bruno.gaufier/xhtml/prod_postgresql.xhtml
http://www.macosxguru.net/article.php?story=20041119135924825
(当然 sqlite 也将是我选择的嵌入式数据库)