postgresql node.js

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 .