使用pg-promise和PostgreSQL(9.5),是否可以“CREATE DATABASE ...”?

5
问题是:
1) Can pg-promise be used to create a new database (schemas, et. al.)?

使用Node.js包'pg-promise',我似乎无法弄清楚是否可以创建新数据库。我可以连接到现有的数据库,没有任何问题。但是,当我没有指定数据库名称运行时,就会出现错误:
这是我正在尝试的内容:
host = host || '127.0.0.1'
port = port || '5432'

const pgp = require('pg-promise')(pgpInitOptions)

// database connection details
const pgConnectionOptions = {
  host: host,
  port: port,
  user: user,
  password: pass
}

// database instance
const localDB = pgp(pgConnectionOptions)

let escapedDbName = dbName.replace(/\"/g, '""');
let sql = 'CREATE DATABASE "' + escapedDbName + '"';

localDB
.any(sql)
.then((results) => {
  console.log('creation of database successful', results)
})
.catch((error) => {
  console.error('creation of database failed', error)
})

然后,我遇到了这个错误:

creation of database failed
Error: database "jeff" does not exist

"jeff" 是我的 Ubuntu 登录名。

您提供的凭据有误。您必须使用有效的数据库帐户,即安装PostgreSQL服务器时使用的管理用户和密码,该用户将具有创建新数据库的访问权限。然后它应该可以正常工作。 - vitaly-t
对不起,我应该提到它们作为变量传递。 - Hawkeye64
1个回答

9
首先,您需要使用具有创建新数据库权限的管理员帐户连接到现有数据库。
然后,您可以通过常规查询创建新数据库...
const pgp = require('pg-promise')(/* initialization options */);

const db = pgp({
    database: 'any-existing-db',
    port: 5432,
    user: 'postgres', // any admin user
    password: 'admin-password'
});
    
await db.none('CREATE DATABASE $1:name', ['my_database']);

我在本地运行这样的代码,效果很好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接