PostgreSQL 可以与磁盘数据库一起使用吗?
Posted
技术标签:
【中文标题】PostgreSQL 可以与磁盘数据库一起使用吗?【英文标题】:Can PostgreSQL be used with an on-disk database? 【发布时间】:2009-10-26 19:23:33 【问题描述】:目前,我有一个应用程序在嵌入式模式下使用 Firebird 连接到一个相对简单的数据库,该数据库以文件形式存储在我的硬盘上。我想改用 PostgreSQL 来做同样的事情(是的,我知道这有点矫枉过正)。我知道 PostgreSQL 不能在嵌入式模式下运行,这很好 - 我可以让服务器进程保持运行,这对我来说没问题。
我正在尝试找出一个可以实现此目的的连接字符串,但没有成功。我尝试了以下变体:
jdbc:postgresql:C:\myDB.fdb jdbc:postgresql://C:\myDB.fdb jdbc:postgresql://localhost:[端口]/C:\myDB.fdb
但似乎没有任何效果。 PostgreSQL 的directions 没有包含这种情况的示例。这甚至可能吗?
【问题讨论】:
Postgres 无法将数据库存储在一个文件中。根据您的操作系统,您可以在单个文件中包含磁盘映像。继续使用 Firebird 或其他嵌入式数据库有什么问题?我也喜欢 Postgres - 但如果它不符合您的要求... 我害怕这个。由于最终用户提出的安全问题,我们正在切换,但我们将不得不寻找另一个选择。 @Chris :我认为当您可以访问数据库文件时,没有数据库是真正安全的。所以嵌入式模式并不安全。 【参考方案1】:你可以欺骗它。如果您在类 UNIX 系统上运行 PostGRESQL,那么您应该能够创建 RAMDISK 并将其用于数据库存储。这是一个相当不错的一步一步guide for RAMdisks on Linux。
不过,一般来说,我建议在 RAM 类型的应用程序中使用 SQLITE 作为 SQL db。
【讨论】:
感谢您的评论。但是,看起来 RAM 磁盘是一种表现得像磁盘的内存,而我需要一个表现得像内存的磁盘。 磁盘和内存之间的主要行为差异是内存非常快,并且每个位置的访问速度都一样快。获得像内存一样运行的磁盘的唯一方法是使用内存。换句话说,SSD 磁盘或闪存。 PostgreSQL 也可以将其数据库存储在这两者中的任何一个上。【参考方案2】:Postgres 数据库不是单个文件。数据目录中的每个表和每个索引都有一个文件,位于数据库目录中。所有文件都将使用 db/table/index 的对象 ID (OID) 命名。
JDBC url 指向数据库名称,而不是任何特定文件: jdbc:postgresql:foodb(隐含 localhost)
如果通过“表现得像内存的磁盘”,您的意思是数据库仅在程序的生命周期内存在,那么您没有理由不能在程序启动时创建数据库并在程序退出时将其删除。请注意,这只是创建数据库的 DDL,而不是通过 init-db 程序创建数据目录。您可以连接到默认的“postgres”数据库,创建您的数据库然后连接到它。
【讨论】:
我想将 Steve K 的回答标记为解决方案,但由于它是评论,因此这是次优的。【参考方案3】:Firebird 2.1 及更高版本支持全局临时表,该临时表仅在数据库连接期间存在。
语法类似于 CREATE GLOBAL TEMPORARY TABLE ... ON COMMIT PRESERVE ROWS
【讨论】:
以上是关于PostgreSQL 可以与磁盘数据库一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章