Skip to content
brianc edited this page Mar 2, 2011 · 57 revisions

Your main interface point with the PostgreSQL server, the Client is basically a facade on top of the Connection to provide a much more user friendly, "node style" interface for doing all the lovely things you like with PostgreSQL.

Constructors

note: Client instances created via the constructor do not participate in connection pooling. To take advantage of connection pooling (recommended) please use the pg object.

new Client(string url): Client

new Client(string domainSocketFolder): Client

Creates a new, unconnected client from a url based connection string postgres://user:password@host:port/database or from the location of a domain socket folder /tmp or /var/run/postgres.

Internally the connection string is parsed and a config object is created with the same defaults as outlined below. All parts of the connection string url are optional. This is handy for use in managed hosting like Heroku.

example

    var client = new Client('postgres://brian:mypassword@localhost:5432/dev');
    var client = new Client('postgres://brian@localhost/dev'); //will use defaults
    var client = new Client(process.env.DATABASE_URL); //something like this should get you running with heroku
    var client = new Client('/tmp');  //looks for the socket file /tmp/.s.PGSQL.5432

new Client(object config) : Client

Creates a new, unconnected instance of a Client configured via supplied configuration object.

parameters

  • object config: can contain any of the following optional properties
    • string user:
      • default value: process.env.USER
      • PostgreSQL user
    • string database:
      • default value: process.env.USER
      • database to use when connecting to PostgreSQL server
    • string password:
      • default value: null
      • user's password for PostgreSQL server
    • number port:
      • default value: 5432
      • port to use when connecting to PostgreSQL server
      • will support unix domain sockets in future
      • used to initialize underlying net.Stream()
    • string host:
      • default value: null
      • host address of PostgreSQL server
      • used to initialize underlying net.Stream()

example

    var client = new Client({
      user: 'brianc',
      password: 'boom!'
      database: 'test'
      host: 'example.com'
      port: 5313
    });

Methods

 
### connect() : _null_

Initializes Client's internal Connection object & net.Stream() instance. Starts communication with PostgreSQL server including password negotiation.

note: Clients created via the pg#connect method are already connected and should not have their #connect method called.


end() : null

Immediately sends a termination message to the PostgreSQL server and closes the underlying net.Stream().

note: Clients created via the pg#connect method will be automatically disconnected or placed back into the connection pool and should not have their #end method called.


### _Simple queries_

query(string text, optional function callback) : Query

Simply: Creates a query object, queues it for execution, and returns it.

In more detail: Adds a Query to the Client's internal query queue. The query is executed as a simple query within PostgresSQL, takes no parameters, and it is parsed, bound, executed, and all rows are streamed backed to the Client in one step within the PostgreSQL server. For more detailed information you can read the PostgreSQL protocol documentation.

parameters

  • string text: the query text
  • optional function callback: optionally provided function which will be passed the error object (if the query raises an error) or the entire result set buffered into memory. note: do not provide this function for large result sets unless you're okay with loading the entire result set into memory
  • function callback(object error, object result)
    • Called only if provided
    • buffers all rows into memory before calling
      • rows only buffered if callback is provided
      • can impact memory when buffering large result sets (i.e. do not provide a callback)
    • used as a shortcut instead of subscribing to the row query event
    • if passed, query will still raise the row and end events but will no longer raise the error event
    • parameters

      • object error:
        • null if there was no error
        • if PostgreSQL encountered an error during query execution, the message will be called here
      • object result:
        • and object containing the following properties:
          • array rows:
            • an array of all rows returned from the query
            • each row is equal to one object passed to the Query#row callback

examples

simple query without callback
    var client = new Client({user: 'brianc', database: 'test'});
    client.connect();
    //query is executed once connection is established and
    //PostgreSQL server is ready for a query
    var query = client.query("SELECT name FROM users")
    query.on('row', function(row) {
      console.log(row.name);
    });
    query.on('end', client.end.bind(client)); //disconnect client manually
simple query with optional row callback
    var client = new Client({user: 'brianc', database: 'test'});
    client.on('drain', client.end.bind(client)); //disconnect client when all queries are finished
    client.connect();

    //query is executed once connection is established and
    //PostgreSQL server is ready for a query
    var query = client.query("SELECT name FROM users", function(err, result) {
      console.log(result.rows[0].name);
    })

### _Prepared statements_

query(object config, optional function callback) : Query

query(string queryText, array values, optional function callback): Query

Creates a (optionally named) query object, queues it for execution, and returns it.

If either name or values is provided within the config object the query will be executed as a prepared statement. Otherwise, it will behave in the same manner as a simple query.

parameters

  • object config: can contain any of the following optional properties
    • string text:
      • The text of the query
      • example: select name from user where email = $1
    • string name:
      • The name of the prepared statement
      • Can be used to reference the same statement again later and is used internally to cache and skip the preparation step
    • array values:
  • optional function callback: callback function
    • function callback(object error, object result)
      • Called only if provided
      • buffers all rows into memory before calling
        • rows only buffered if callback is provided
        • can impact memory when buffering large result sets (i.e. do not provide a callback)
      • used as a shortcut instead of subscribing to the row query event
      • if passed, query will still raise the row and end events but will no longer raise the error event
      • parameters

        • object error:
          • null if there was no error
          • if PostgreSQL encountered an error during query execution, the message will be called here
        • object result:
          • and object containing the following properties:
            • array rows:
              • an array of all rows returned from the query
              • each row is equal to one object passed to the Query#row callback

examples

prepared statement with config object
    var client = new Client({user: 'brianc', database: 'test'});
    client.on('drain', client.end.bind(client)); //disconnect client when all queries are finished
    client.connect();

    var query = client.query({
      text: 'SELECT name FROM users WHERE email = $1',
      values: ['[email protected]']
    });

    query.on('row', function(row) {
      //do something w/ yer row data
      assert.equal('brianc', row.name);
    });
prepared statement using string/array initialization
 
    var client = new Client({user: 'brianc', database: 'test'});
    client.on('drain', client.end.bind(client)); //disconnect client when all queries are finished
    client.connect();

     var again = client.query("SELECT name FROM users WHERE email = $1", ['[email protected]']);

    again.on('row', function(row) {
      //do something else
      assert.equal('brianc', row.name);
    });
prepared statement with optional callback supplied
    
    var client = new Client({user: 'brianc', database: 'test'});
    client.on('drain', client.end.bind(client)); //disconnect client when all queries are finished
    client.connect();

    //object config method
    var queryConfig = {
      text: 'SELECT name FROM users WHERE email = $1',
      values: ['[email protected]']
    };
    client.query(queryConfig, function(err, result) {
      assert.equal('brianc', result.rows[0]);
    });

    //text/params method
    client.query('SELECT name FROM users WHERE email = $1', ['[email protected]'], function(err, result) {
      assert.equal('brianc', result.rows[0].name);
    });

The proceeding examples used an 'unamed' prepared statement. PostgreSQL server caches prepared statements by name on a per client basis. If a name is supplied for the statement all following executions of the query can refer to it by name and the PostgreSQL server instance can skip the preparation step.

named prepared statement reuse
    var client = new Client({user: 'brianc', database: 'test'});
    client.on('drain', client.end.bind(client)); //disconnect client when all queries are finished
    client.connect();

    var first = client.query({
      text: "SELECT email FROM users WHERE name = $1",
      values: ['brianc'],
      name: 'email from name'
    });
    first.on('row', function(row) {
      assert.equal("[email protected]", row.email);
    });

    var second = client.query({
      name: 'email from name',
      values: ['brianc']
    });
    second.on('row', function(row) {
      assert.equal("[email protected]", row.email);
    });

    //can still supply a callback method
    var third = client.query({name: 'email from name', values: ['brianc']}, function(err, result) {
      assert.equal('[email protected]', result.rows[0].email);
    });

Events

### drain :

Raised when the internal query queue has been emptied and all queued queries have been executed. Useful for disconnecting the client after running an undetermined number of queries.

example
    var client = new Client({user: 'brianc', database: 'postgres'});
    client.connect();
    var users = client.query("select * from user");
    var superdoods = client.query("select * from superman");
    client.on('drain', client.end.bind(client));
    //carry on doing whatever it was you wanted with the query results once they return
    users.on('row', function(row){ ...... });

### error : _object_ error

Raised when the client recieves an error message from PostgreSQL or when the underlying stream raises an error. The single parameter passed to the listener will be the error message or error object.

example
    var client = new Client({user: 'not a valid user name', database: 'postgres'});
    client.connect();
    client.on('error', function(error) {
      console.log(error);
    });                    
Clone this wiki locally