Using postgreSQL on Ubuntu (with node.js)

In this post I'll detail how to connect to a postgres database (like Amazon Redshift) with Node.js on Ubuntu and hopefully help you avoid some of the common pitfalls I fell into a few times.

I'll go into Redshift and why we're using it another day but this guide applies even if you're using a different postgreSQL database.

To start off we are going to assume you have nodejs and npm already installed on your server.

You're going to want to start off with:

sudo apt-get install postgresql-client



This will install the postgres client on your server and allow you to connect to your target postgres database. If you want to host a postgres database directly on this server then go ahead and use:

sudo apt-get install postgresql



Now most guides will skip over this next step, assuming that you already have it, but if you do you may find that you get an error stating:

pg_config: not found



So in order to avoid this we'll run:

sudo apt-get install libpq-dev



Now you should be ready to install a postgres module for node.js to use. I personally went with node-postgres since it seemed to be the most mature and fully featured.

We'll install it via npm of course.

npm install pg



Now from inside your node.js app we'll require pg via

var pg = require('pg');



Now we'll add a connection string so that pg knows what to connect to:

var conString = "postgresql://username:password@localhost/postgres";



I've used a local host connection parameter here, if you are using Redshift you'll use the url that Amazon provides you with.



Now lets get to the good stuff, querying the database:

pg.connect(conString, function(err, client, done) {
	if(err) {    
		console.error('error fetching client from pool', err);
	} else {
		client.query(text, function(err, result) {
			done();
			if(err) {
				console.error('error running query', err);
			}
			console.log(result.rows);
		});
	}  
});

result.rows will give you an array of the values retreived

text should be replaced with a query string such as SELECT 1+1 as example (this isn't a sql tutorial)

done(); this releases our current connection back to the connection pool (wouldn't want to run out)

Using our example, result.rows[0] should return something like {example: 2}



And thats it. You should have at least a good starting point to begin playing around with connecting to postgreSQL databases from Node.js

If you run into any problems or have suggestions for something I missed here let me know in the comments.