2009-10-26 90 views
0

目前,我有一个应用程序,使用嵌入模式下的Firebird连接到一个相对简单的数据库存储为我的硬盘上的文件。我想切换到使用PostgreSQL来做同样的事情(是的,我知道这太过分了)。我知道PostgreSQL不能在嵌入式模式下运行,这很好 - 我可以让服务器进程运行,这对我来说没问题。PostgreSQL可以与磁盘数据库一起使用吗?

我想找出一个连接字符串,将实现这一点,但一直不成功。我已经试过以下变化:

JDBC:PostgreSQL的:C:\ myDB.fdb
JDBC:在PostgreSQL:// C:\ myDB.fdb
JDBC:在PostgreSQL://本地主机:[端口] /C:\myDB.fdb

但似乎没有任何工作。 PostgreSQL的directions不包括这种情况下的一个例子。这甚至有可能吗?

+2

Postgres将无法数据库存储在一个文件中。根据您的操作系统,您可以在单个文件中包含磁盘映像。 继续使用Firebird或其他嵌入式数据库会出现什么问题?我也喜欢Postgres - 但如果它不符合你的要求... – 2009-10-26 20:15:11

+0

我很害怕这个。由于终端用户提出的安全问题,我们正在切换,但我们必须找到另一种选择。 – Chris 2009-10-26 21:47:55

+0

@Chris:我认为当你可以访问数据库文件时,没有数据库真的是安全的。所以嵌入式模式不安全。 – 2009-10-26 22:13:35

回答

0

Postgres数据库不是一个文件。数据库目录内的每个表和数据目录中的每个索引都会有一个文件。所有文件将使用db/table/index的对象ID(OID)命名。

的JDBC的URL指向数据库名称,而不是任何特定的文件: JDBC:在PostgreSQL:foodb(本地主机是暗示)

如果“磁盘行为就像记忆”,你的意思是该数据库只存在在程序的整个生命周期中,没有理由不能在程序启动时创建数据库,并在程序退出时将其删除。请注意,这只是用于创建数据库的DDL,并不是通过init-db程序创建数据目录。你可以连接到默认的'postgres'数据库,创建你的数据库然后连接到它。

+0

我想将Steve K的答案标记为解决方案,但既然是评论,那么这是第二好的。 – Chris 2009-10-26 21:55:40

1

你可以欺骗它。如果您在类UNIX系统上运行PostGRESQL,那么您应该能够创建RAMDISK并将其用于数据库存储。这是一个很好的步骤guide for RAMdisks on Linux

一般来说,我会建议在RAM类型的应用程序中使用SQLITE作为SQL数据库。

+0

感谢您的评论。但是,RAM磁盘看起来像磁盘,但我需要一个磁盘,其行为与内存相似。 – Chris 2009-10-26 19:37:33

+0

磁盘和内存之间的主要行为差异是内存非常快,并且每个位置的访问速度都很快。获得与内存行为相似的磁盘的唯一方法是使用内存。换句话说,SSD盘或闪存。 PostgreSQL也可以将数据库存储在这两者中的任何一个上。 – 2009-10-26 20:08:13

0

Firebird 2.1以上版本支持全局临时表,它们只存在于数据库连接期间。

语法去像CREATE GLOBAL TEMPORARY TABLE ... ON COMMIT PRESERVE ROWS

相关问题