Mi trovo a cercare di creare un database postgres, quindi ho installato Postgres e avviato un server con initdb /usr/local/pgsql/data
, quindi ho avviato quell'istanza con postgres -D /usr/local/pgsql/data
ora come posso interagire con questo tramite il nodo ? Ad esempio, quale sarebbe il connectionstring
o come sono in grado di scoprire di cosa si tratta.Come effettuare la connessione a Postgres via Node.js
risposta
Ecco un esempio che ho usato per connettere node.js al mio database Postgres.
L'interfaccia in node.js che ho usato può essere trovato qui 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();
});
Giusto per aggiungere una diversa opzione di - io uso Node-DBI di connettersi a PG, ma anche per la capacità di parlare a MySQL e sqlite. Node-DBI include anche funzionalità per costruire un'istruzione select, che è utile per fare cose dinamiche al volo.
campione rapido (utilizzando le informazioni di configurazione memorizzate in un altro file):
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;
Ehi, mlaccetti, ho un problema simile cercando di connetterti ed eseguire test su un database SQLite3. Sto seguendo un tutorial con le istruzioni per utilizzare DBWrapper, motivo per cui ti sto contattando. La mia domanda è qui: http://stackoverflow.com/q/35803874/1735836 – Patricia
Node-DBI è da tempo abbandonato e non più supportato. –
Un approccio semplice: pg-promise, se conosci con la promessa che è;)
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;
});
Vedere anche: How to correctly declare your database module.
Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. – arulmr
In un mondo ideale - sì, e tuttavia, la risposta accettata qui, come puoi vedere sopra - solo il link anche. Come in questo caso, sarebbe troppo per fare un riassunto dalle informazioni fornite dal collegamento, e considerando che entrambi i link sono dati ai repository pubblici di GitHub, le probabilità che si esauriscano non sono altro che le possibilità che StackOverflow diventi guasto . –
Forse basta fornire un semplice esempio di utilizzo per qualcosa di molto semplice, che dovrebbe occupare solo poche righe ma sarebbe sufficiente per non renderlo solo link. –
Una soluzione può essere utilizzando pool
dei clienti come la seguente:
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);
});
si possono vedere più dettagli su this resource.
- 1. Connessione a Redshift via SSL usando R
- 2. Come effettuare una richiesta Chunked via nginx
- 3. Aumentare la connessione massima a node.js/socket.io
- 4. Connessione WiFi via android
- 5. Cassandra/Eclipse - Impossibile effettuare la connessione
- 6. JDBC- postgres, connessione rifiutata
- 7. PoolTimeoutException durante la connessione a Cassandra via Astyanax
- 8. node.js non disponibile via ssh
- 9. fibre node.js con pg/postgres
- 10. Librerie per la connessione di node.js a odbc su Windows?
- 11. Connessione a Cloudant CouchDB con Node.js?
- 12. node.js + Postgres gestione delle transazioni di database
- 13. impossibile effettuare la connessione tra 2 dispositivi Android bluetooth
- 14. La connessione Postgres è stata chiusa errore in Spring Boot
- 15. Connessione a Postgres tramite database_url e Unix Socket in Rails
- 16. Come verificare se la connessione MongoDB è attiva in Node.js
- 17. Come effettuare una connessione multipla dall'endpoint di origine in jsplumb
- 18. nginx/node.js/postgres è un'architettura molto scalabile?
- 19. Connessione rifiutata con Go + Postgres su Heroku
- 20. Node.js MySQL - Errore: connessione ECONNREFUSED
- 21. Hibernate lento per l'acquisizione della connessione Postgres
- 22. Heroku Postgres: questa connessione è stata chiusa
- 23. Come ottengo la chiave primaria (s) di una tabella da Postgres via plpgsql?
- 24. Connessione JDBC Postgres in Eclipse Help
- 25. Connessione del database Postgres da MySQL Workbench
- 26. node.js attendere la risposta
- 27. Connetti pyodbc a Postgres
- 28. Come classificare la query postgres
- 29. Come funziona la connessione PHP a Firebase?
- 30. Mocking Postgres per i test unitari con Sinon.js in Node.js
Questo è il tipo di esempio che mi piace vedere. Chiaro e comprensivo di codice sufficiente. Grazie JustBob. – Stradas
Cosa hai aggiunto nel tuo pg_hba.conf per consentire le connessioni da node.js? Grazie –
host tutto 0.0.0.0/0 md5 Questa voce sarà se ricordo di aver lasciato correttamente qualsiasi IP. Tieni presente che questo non è specifico del nodo, ma specifico di PostgreSQL. Anche in postgresql.conf ho listen_addresses = '*'. Per le impostazioni di produzione, leggi i documenti per assicurarti di non aprire buchi ovunque. Lo uso nella mia configurazione di sviluppo, quindi sto bene per consentire a qualsiasi macchina di connettersi. – Kuberchaun