我发现自己试图创建一个postgres数据库,所以我安装了postgres并启动了一个服务器initdb /usr/local/pgsql/data
,然后我开始使用postgres -D /usr/local/pgsql/data
这个实例,我现在该如何与这个节点交互?例如,connectionstring
是什么,或者我怎么能够找出它是什么。如何通过Node.js连接到Postgres
回答
以下是我用来将node.js连接到Postgres数据库的示例。
在node.js中,我使用的可以在这里找到https://github.com/brianc/node-postgres
var pg = require('pg');
var conString = "postgres://YourUserName:[email protected]:5432/YourDatabase";
var client = new pg.Client(conString);
client.connect();
//queries are queued and executed one after another once the connection becomes available
var x = 1000;
while (x > 0) {
client.query("INSERT INTO junk(name, a_number) values('Ted',12)");
client.query("INSERT INTO junk(name, a_number) values($1, $2)", ['John', x]);
x = x - 1;
}
var query = client.query("SELECT * FROM junk");
//fired after last row is emitted
query.on('row', function(row) {
console.log(row);
});
query.on('end', function() {
client.end();
});
//queries can be executed either via text/parameter values passed as individual arguments
//or by passing an options object containing text, (optional) parameter values, and (optional) query name
client.query({
name: 'insert beatle',
text: "INSERT INTO beatles(name, height, birthday) values($1, $2, $3)",
values: ['George', 70, new Date(1946, 02, 14)]
});
//subsequent queries with the same name will be executed without re-parsing the query plan by postgres
client.query({
name: 'insert beatle',
values: ['Paul', 63, new Date(1945, 04, 03)]
});
var query = client.query("SELECT * FROM beatles WHERE name = $1", ['john']);
//can stream row results back 1 at a time
query.on('row', function(row) {
console.log(row);
console.log("Beatle name: %s", row.name); //Beatle name: John
console.log("Beatle birth year: %d", row.birthday.getYear()); //dates are returned as javascript dates
console.log("Beatle height: %d' %d\"", Math.floor(row.height/12), row.height % 12); //integers are returned as javascript ints
});
//fired after last row is emitted
query.on('end', function() {
client.end();
});
只需添加不同的选项的界面 - 我用Node-DBI连接到PG,而且由于与MySQL通信的能力和sqlite。 Node-DBI还包含构建select语句的功能,这对于动态地执行动态内容非常方便。
快速样品(使用存储在另一个文件中的配置信息):
var DBWrapper = require('node-dbi').DBWrapper;
var config = require('./config');
var dbConnectionConfig = { host:config.db.host, user:config.db.username, password:config.db.password, database:config.db.database };
var dbWrapper = new DBWrapper('pg', dbConnectionConfig);
dbWrapper.connect();
dbWrapper.fetchAll(sql_query, null, function (err, result) {
if (!err) {
console.log("Data came back from the DB.");
} else {
console.log("DB returned an error: %s", err);
}
dbWrapper.close(function (close_err) {
if (close_err) {
console.log("Error while disconnecting: %s", close_err);
}
});
});
config.js:
var config = {
db:{
host:"plop",
database:"musicbrainz",
username:"musicbrainz",
password:"musicbrainz"
},
}
module.exports = config;
嘿,mlaccetti,我有一个类似的问题,试图连接和运行SQLite3数据库的测试。我正在通过一个教程来说明如何使用DBWrapper,这就是为什么我要向你伸出援助之手。我的问题在这里:http://stackoverflow.com/q/35803874/1735836 – Patricia 2016-03-04 18:55:25
节点DBI早已被抛弃,不再支持。 – 2016-12-02 13:31:31
一个简单的方法:pg-promise,如果你熟悉的承诺是;)
var pgp = require('pg-promise')(/*options*/);
var cn = {
host: 'localhost', // server name or IP address;
port: 5432,
database: 'myDatabase',
user: 'myUser',
password: 'myPassword'
};
// alternative:
// var cn = 'postgres://username:[email protected]:port/database';
var db = pgp(cn); // database instance;
// select and return user name from id:
db.one('SELECT name FROM users WHERE id = $1', 123)
.then(user => {
console.log(user.name); // print user name;
})
.catch(error => {
console.log(error); // print the error;
});
虽然这个链接可能回答这个问题,但最好在这里包含答案的重要部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – arulmr 2015-04-04 05:01:51
在一个理想的世界 - 是的,但是,在这里接受的答案,正如你可以看到上面 - 只是链接也。和那里一样,从链接提供的信息中提取摘要太多了,并且考虑到这两个链接都提供给GitHub的公共库,它们死去的机会不会超过StackOverflow死机的机会。 – 2015-04-04 05:09:51
也许只是提供了一个简单的例子,它用于非常基本的东西,它应该只占用几行,但足以使其仅用于链接。 – 2015-04-04 11:12:12
一种解决方案可以使用客户端的pool
类似如下:
const pg = require('pg');
var config = {
user: 'foo',
database: 'my_db',
password: 'secret',
host: 'localhost',
port: 5432,
max: 10, // max number of clients in the pool
idleTimeoutMillis: 30000
};
pool.on('error', function (err, client) {
console.error('idle client error', err.message, err.stack);
});
pool.query('SELECT $1::int AS number', ['2'], function(err, res) {
if(err) {
return console.error('error running query', err);
}
console.log('number:', res.rows[0].number);
});
你可以看到this resource更多细节。
- 1. 如何通过docker-compose网络连接到postgres?
- 2. 如何通过两个终端连接到postgres?
- 3. 通过连接表查询Rails 4 Postgres
- 4. 通过网络挂接连接谷歌主页到Node.js的
- 5. 如何连接到heroku postgres数据库?
- 6. 如何将postgres连接到xcode
- 7. 如何通过代理连接到IRC?
- 8. 如何通过TwitterVB连接到Twitter?
- 9. 如何通过C连接到SQL?
- 10. 如何通过Delphi 7连接到JIRA?
- 11. 如何通过JenkinsMobi连接到CloudBees CI
- 12. 如何连接到通过CLI
- 13. postgres连接超过max_connections?
- 14. 无法通过pgAdmin连接到Docker容器上的Postgres
- 15. 如何使用php通过打开的ssh隧道连接到postgres数据库?
- 16. 如何使用node.js连接到dashdb httpRequest
- 17. 如何从Node.js连接到nethack?
- 18. 连接到Postgres数据库使用的是Node.js
- 19. 通过Node.js上的XMPP连接到Google Talk
- 20. 连接到远程SSH服务器(通过Node.js/html5控制台)
- 21. 如何通过客户端的node.js/socket.io连接到tcp服务器?
- 22. 如何通过客户端的node.js/socket.io连接到tcp服务器
- 23. 如何通过SSL通过PHP连接到Amazon MySQL RDS实例
- 24. 如何通过logstash输出插件通过JDBC连接到cockroachDB?
- 25. 将Excel 2016连接到Postgres
- 26. 将pyodbc连接到Postgres
- 27. 连接到postgres数据库
- 28. 转到Postgres的连接SSL
- 29. 无法连接到Postgres的
现在,这是我喜欢看到的例子的类型。清楚并包含足够的代码。感谢JustBob。 – Stradas 2012-05-21 13:47:13
你在pg_hba.conf中添加了什么来允许来自node.js的连接?谢谢 – 2012-10-09 17:47:56
主机全部全部0.0.0.0/0 md5如果我没有记错的话,这个条目会让任何IP连接。请记住,这不是特定于节点的,但是特定于PostgreSQL。在postgresql.conf中我也有listen_addresses ='*'。对于生产设置,请阅读文档以确保您不会在任何地方打开孔。我在我的开发设置中使用这个,所以我很好,允许任何机器连接。 – Kuberchaun 2012-10-09 18:08:09