gpt4 book ai didi

node.js - node-postgres 创建数据库

转载 作者:IT老高 更新时间:2023-10-28 22:08:14 25 4
gpt4 key购买 nike

我正在使用 node-postgres ,在我的应用程序开始时,我想检查数据库是否存在。所以我的工作流程思路如下:

  1. 检查myDb是否存在
  2. 如果存在,则创建表
  3. 如果没有,则先创建数据库,然后创建表

正如您所见,这是一个非常简单的过程,但是,驱动程序实现需要有一个数据库名称 postgres://username:password@host/database 才能连接,这意味着您需要首先连接到数据库。

所以我现在要做的是在开始时连接到 postgres 数据库,进行查询以创建数据库,如果已经存在异常则捕获异常,然后关闭我的连接并连接到新创建的数据库,然后创建表。代码如下:

var conStringPri = 'postgres://' + username + ':' + password + '@' + host + 
'/postgres';
var conStringPost = 'postgres://' + username + ':' + password + '@' + host +
'/' + dbName;

pg.connect(conStringPri, function(err, client, done) { // connect to postgres db
if (err)
console.log('Error while connecting: ' + err);
client.query('CREATE DATABASE ' + dbName, function(err) { // create user's db
if (err)
console.log('ignoring the error'); // ignore if the db is there
client.end(); // close the connection

// create a new connection to the new db
pg.connect(conStringPost, function(err, clientOrg, done) {
// create the table
clientOrg.query('CREATE TABLE IF NOT EXISTS ' + tableName + ' ' +
'(...some sql...)';
});
});
});

如您所见,我打开和关闭了两次连接,这种方式对我来说似乎是错误的。如果您提出更好的方法,我会很高兴,或者解释一下您是如何做到的。

最佳答案

As you see it is a really easy process, however, the driver implementation requires to have a database name postgres://username:password@host/database to be connected, which means you need to connect to a database first.

这不是因为驱动程序的实现,而是 PostgreSQL 本身。任何其他语言或驱动程序都一样。

客户端需要连接到数据库才能执行任何操作,包括CREATE DATABASE。除了 postgres 数据库,template1 也经常用于此目的。

然后,由于您必须连接到新创建的数据库才能在其中创建对象,因此无法避免打开另一个连接。

简而言之,你正在做的事情无法简化,它已经是最优的了。

关于node.js - node-postgres 创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20813154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com