2013-05-11 57 views
2

我建立在Visual Studio 2012的应用程序,这是我想在每次运行检查,如果一定Postgres数据库存在与时间如果没有则创建一个,将指定表等创建PostgreSQL数据库编程

我在谷歌环顾四周没有运气。我希望数据库能够以编程方式在我的应用程序中创建,但是如果有人知道是否以及如何使用安装程序向导来做到这一点,那也不错。该应用程序旨在仅在Windows上运行,但在所有机器上均无例外情况。

+0

我不相信这应该是closevoted和大多数的名称是不相似的,所以我会说他们来自[标签:visual-studio]标签。追随者。提名重新开放,虽然老实说,这与视觉工作室没有任何关系,所以我删除了标签。 – 2013-05-12 23:54:21

+0

是的,谢谢你的所作所为。我不确定我了解“closevoted”是什么,因为我对stackoverflow论坛很陌生。但是,以任何方式感谢您的贡献! :) – 2013-05-13 14:36:43

回答

4

不管的工具和编程语言中使用,你会想使用这个方法是一样的:

  1. 在你的程序,在启动过程中连接到template1postgres数据库that're总是在PostgreSQL安装中可用并发出SELECT 1 FROM pg_database WHERE datname = ?,并且第一个参数传递所需的数据库名称。

  2. 检查返回的结果集。如果一行被返回,那么数据库就存在了,你就完成了,不需要进一步的操作。如果没有返回行,则数据库不存在,则需要创建它,所以:

  3. 问题与任何所需的选项CREATE DATABASE mydatabasename;OWNERENCODING等每手动创建数据库自身。新的数据库将是空的。

  4. 通过连接到新的数据库在应用程序和发送SQL序列填充数据库命令,直接从您的应用程序,或通过在外壳调用psql命令来读取一个sql脚本文件并发送至数据库。我通常宁愿直接在我的应用程序中运行SQL。

如果您不是要创建的数据库中安装这主要是取决于你和你的安装程序,但作为PostgreSQL的后CREATE DATABASE通话开始,然后喂psql一个srcipt它通常会是简单。

+0

非常感谢!我会尝试这是非常有帮助和清楚的! – 2013-05-12 13:13:34

+0

@GeorgeElementSotiriou很高兴为您提供帮助。 PostgreSQL是一个用于嵌入应用程序的OK数据库,但请*使您的应用程序将PostgreSQL的副本安装在非默认端口(即:不是5432),服务帐户和数据库位置,以便它不与任何PostgreSQL用户冲突可能会自行安装。你的安装程序应该创建自己的服务,或者你的应用程序应该使用'pg_ctl'来根据需要启动/停止PostgreSQL。 – 2013-05-12 23:56:20

+0

在我的情况下(使用Postgres 9.3的perl)我必须在创建数据库之前以用户'postgres'连接到数据库'postgres'。 – 2014-09-18 12:50:52