【发布时间】:2014-10-05 19:35:05
【问题描述】:
我想创建一个使用关系数据库的桌面应用程序(例如 postgres - 假设我最好的情况是在此应用程序中使用 postgres)。
我希望用户不知道数据库。目前,我必须将 postgres 安装到我的本地计算机中并让我的应用程序与之通信。
我正在使用 Go。
我怎样才能避免这种情况?
【问题讨论】:
标签: database postgresql go
我想创建一个使用关系数据库的桌面应用程序(例如 postgres - 假设我最好的情况是在此应用程序中使用 postgres)。
我希望用户不知道数据库。目前,我必须将 postgres 安装到我的本地计算机中并让我的应用程序与之通信。
我正在使用 Go。
我怎样才能避免这种情况?
【问题讨论】:
标签: database postgresql go
您正在寻找一个嵌入式数据库。
This isn't an ideal job for PostgreSQL,但you can use it that way with a bit of care。
请不要捆绑安装程序并在无人看管的情况下运行它。以后去安装 PostgreSQL 的用户会很困惑,当他们看到它已经在他们的计算机上时,他们不知道为什么,是谁安装了它,或者密码是什么。
取而代之的是initdb 在您应用的%APPDATA% 或%PROGRAMDATA% 中(对于多用户共享)中的一个新数据目录。设置自定义端口(不要使用默认的 5432)。使用pg_ctl register 创建一个新服务,以NETWORKSERVICE 运行,或者使用pg_ctl 按需启动/停止。这样一来,您就不会妨碍任何现有的 PostgreSQL 安装或新安装,并且拥有一个专用 PostgreSQL 专供您的应用使用。
尽管如此,请为用户提供一个选项,而不是为现有的 PostgreSQL 提供连接字符串。如果应用在您不希望它们的情况下坚持使用它们自己的嵌入副本,那会很痛苦。
不过,通常最好使用 SQLite、H2、Derby、Firebird 或其他嵌入式数据库之一。
【讨论】:
短版,你真的不能,最好的办法是使用SQLite 或类似的。
长版本,好吧,如果你真的想要,你可以为你的数据库创建多个无人参与的安装程序,针对你想要的每个平台,将它嵌入到你的应用程序中,并在第一次运行时安装它。
现在这很丑,大多数用户(包括我自己)根本不会使用它。
您总是可以提及您的软件依赖于 X 和 Y,并提供有关如何手动安装依赖项的信息。
【讨论】: