postgresql - Cómo hacer una conexión a Postgres vía Node.js
(4)
Aquí hay un ejemplo que utilicé para conectar node.js a mi base de datos de Postgres.
La interfaz en node.js que utilicé se puede encontrar aquí https://github.com/brianc/node-postgres
var pg = require(''pg'');
var conString = "postgres://YourUserName:YourPassword@localhost: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();
});
Me encuentro tratando de crear una base de datos postgres, así que instalé postgres y comencé un servidor con initdb /usr/local/pgsql/data
, luego comencé esa instancia con postgres -D /usr/local/pgsql/data
ahora ¿cómo puedo interactuar con esto a través del nodo? Por ejemplo, ¿qué sería la connectionstring
, o cómo puedo averiguar qué es?
Solo para agregar una opción diferente: uso Node-DBI para conectarme a PG, pero también debido a la posibilidad de hablar con MySQL y sqlite. Node-DBI también incluye funcionalidad para crear una instrucción select, que es útil para hacer cosas dinámicas sobre la marcha.
Muestra rápida (usando la información de configuración almacenada en otro archivo):
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;
Un enfoque simple: pg-promise , si está familiarizado con las promesas que es;)
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:password@host: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;
});
Consulte también: Cómo declarar correctamente su módulo de base de datos .
Una solución puede ser usar pool
de clientes como los siguientes:
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);
});
Puede ver más detalles sobre https://github.com/brianc/node-postgres .