是否可以将单个PostgreSQL数据库存储在单个文件/目录中,而不是将所有内容都存储在单个中央数据存储库中



一般来说,我是软件开发的新手。我的技能最好用中级来形容。我已经做了很多编程,但我还没有掌握任何特定的语言。我还有很多学习要做,以学习所有必要的技能。

我想开发一个桌面会计应用程序,如PeachTree或QuickBooks。所有数据都托管在本地计算机上,不需要web服务器。在某个时候,我可能希望能够在网络上托管本地服务器,并通过其他计算机上的客户端访问该应用程序。此外,不需要让多个用户同时访问同一数据库。这两种情况在未来都可能改变,但我现在没有必要解决(我不相信)。

几年前,我使用Microsoft Access构建了一个带有拆分数据库设计的会计应用程序(不确定这是否会被视为一个应用程序)。整个数据库包含在两个文件中:mydb和mydb_be(前端和后端)。我已经很多年没有使用过其他会计应用程序了,但据我回忆,数据存储在一个文件或一个目录中,但肯定不是像Postgres(可能还有很多/所有其他应用程序)那样,嵌套在数据库程序默认文件结构和数据目录中的中央存储库中,名称像"16254"而不是"MyBiz"。

在我的MS Access应用程序中,我可以使用典型的操作系统命令(如剪切/粘贴/删除和拖放)移动、复制和删除mydb。没有什么可出口或可进口的。我记得,商业应用程序也是如此。

我可能有15个不同的数据库,每个数据库用于不同的实体。我可能想更改我的";会计;目录或复制到usb驱动器并将其移动到另一台计算机,在那里打开它,或者备份到外部驱动器。每个实体的目录可能包含数据库文件以外的文件或文件夹(例如税务目录),并且它们都需要保存在一起。我不能指望我的目标用户(可能10岁以上)执行这样的数据库管理任务。除其他外,该应用程序旨在教孩子们如何做会计,而不是数据库管理。

所以,问题是,有没有一种方法可以将单个Postgres数据库以打包的方式存储在不同的位置,将单个数据库的所有必要数据存储在单个文件(如MS Access)或单个目录中,这样我就可以移动文件并从应用程序中打开它们?换句话说,单击打开文件可以导航到~/maccounting/entity1/entity1db.file或/entity2/entity2.file,或者可能是一个目录而不是文件。也许我的文件扩展名是"kac",所以我会双击一个扩展名为.kac的文件来启动应用程序。

我计划使用PostgreSQL和Python来开发一个交互式控制台应用程序。一旦我证明了这个概念,我将开发GUI。

很明显,有很多概念我还没有学会。我觉得在深入了解我的申请之前,我需要了解这一点。

编辑 如果没有,我还应该调查什么(谢谢Adrian Klaver)?我应该搜索什么关键词或研究什么概念?

谢谢你的帮助。

是否可以将单个PostgreSQL数据库存储在单个文件中

否。Postgres被设计成一个功能强大、可靠的企业集中式数据库服务器。Postgres从未打算捆绑在桌面应用程序中。

嵌入式数据库

您正在寻找的是一个嵌入式数据库

H2数据库引擎就是这样一个产品。H2是一个关系数据库,由SQL驱动。与Postgres兼容是它的目标之一。内置纯Java,因此可以在多种主机操作系统上运行。H2可以在嵌入式模式下运行,仅由您的应用程序访问,也可以在服务器模式下运行以同时接受来自各种应用程序的连接。

一条评论提到了SQLite。虽然该产品是一个嵌入式数据库,但要注意它确实是"lite"。它的创建者打算让该产品从简单的文件升级,而不是作为强大的数据库引擎的竞争对手…引用:"SQLite不是PostgreSQL的替代品。SQLite是fopen()的替代品"(来源)。虽然许多人已经用SQLite成功地完成了许多项目,但要求SQLite支持完整的会计包可能要求太高了。如果你正在考虑这款产品,请仔细研究。

Cloud

另一条途径是使用云。许多公司已经开始提供数据库即服务。通常被称为"托管数据库",因为出于明显的安全原因,以及服务公司处理备份、故障切换、软件更新等,您没有完全的超级用户访问权限。供应商包括Digital Ocean、Heroku、Amazon AWS、Microsoft Azure等。

Postgres和MySQL是常见的产品,有些提供Microsoft SQL Server或Oracle。

如果你可以合理地期望用户在使用你的产品时有互联网连接,这可能是可行的。但我不太愿意推荐这条路线。虽然互联网连接不需要有很大的吞吐量,但互联网连接确实需要可靠。但"可靠"one_answers"互联网连接"并不经常齐头并进。

在使用DBaaS时,您必须对数据库进行编码,使其在网络访问中断时非常健壮。当然你应该一直这样做。但在实践中,我们大多数人在这方面都会松懈,尤其是如果我们可以依靠非常可靠的连接。例如,当数据库服务器是同一台机器的本地服务器时,或者当数据库服务器连接到服务器机房附近的应用程序服务器时。

另一个问题是,让不同的客户共享一个数据库服务器会引发多租户问题。


关于堆栈溢出的进一步讨论真的偏离了主题。我建议使用两个姊妹站点,数据库管理员堆栈交换软件建议堆栈交换

最新更新