Skip to content

Instantly share code, notes, and snippets.

@abtris
Created January 9, 2017 19:13
Show Gist options
  • Save abtris/3eb89a5b8862ee0819f23649420beb55 to your computer and use it in GitHub Desktop.
Save abtris/3eb89a5b8862ee0819f23649420beb55 to your computer and use it in GitHub Desktop.
Connect to Postgres/Redshift over Socks proxy.
var pg = require('pg'),
url = require('url'),
SocksConnection = require('socksjs');
var db = url.parse(process.env.REDSHIFT_CONN_STRING),
dbAuth = db.auth,
dbUsername = dbAuth.split(':')[0],
dbPassword = dbAuth.split(':')[1],
dbName = db.pathname.replace('/', '');
var proxy = url.parse(process.env.QUOTAGUARDSTATIC_URL),
auth = proxy.auth,
username = auth.split(':')[0],
pass = auth.split(':')[1];
var sock_options = {
host: proxy.hostname,
port: 1080,
user: username,
pass: pass
};
var remote_options = {
host: db.hostname,
port: db.port
};
var sockConn = new SocksConnection(remote_options, sock_options);
var config = {
user: dbUsername,
database: dbName,
password: dbPassword,
stream: sockConn
};
var client = new pg.Client(config);
// connect to our database
client.connect(function (err) {
if (err) throw err;
// execute a query on our database
client.query('SELECT $1::text as name', ['john doe'], function (err, result) {
if (err) throw err;
// just print the result to the console
console.log(result.rows[0]); // outputs: { name: 'apiary' }
// disconnect the client
client.end(function (err) {
if (err) throw err;
});
});
});
@abtris
Copy link
Author

abtris commented Jan 11, 2021

Example with with pg ~6.x not sure if this should be useful for anyone in these days.

@mashaalmemon
Copy link

@abtris Are you able to get a working example with the latest pg client up and running, up?

@abtris
Copy link
Author

abtris commented Jan 20, 2021

No, I don't have access to AWS Redshift anymore.

@vgkids
Copy link

vgkids commented Feb 26, 2023

I was getting an error, TypeError: this.stream.setNoDelay is not a function using pg at version ~8.x, and was able to resolve using npm install [email protected]. That's the last version of pg before a major update to streaming: https://github.com/brianc/node-postgres/blob/master/CHANGELOG.md#pg7170

@abhijitprusty
Copy link

How do we achieve this with the latest version of pg npm package ?

@dabrowne
Copy link

I have posted a working solution for pg@8 here: brianc/node-postgres#1035 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment