Skip to content

becual/node-pg-notify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pg-notify

Configure and subscribe to Postgres Notify automatically for a given set of tables.

Param Type Default Description
client object node-postgres Client instance
configObject object Configuration object
configObject.schema string "public" Name of the schema where the tables exists.
configObject.functionName string "notify_table_change" Name of the function to use notify.
configObject.channelName string "notify_table_change_channel" Name of the channel where the function will notify.
  • pg-notify
    • [~Subscribe to all database events of a given list of tables(tables)](#module_pg-notify..Subscribe to all database events of a given list of tables) ⇒ Promise
    • [~Create the functions and triggers to configure pg-notify.(tables)](#module_pg-notify..Create the functions and triggers to configure pg-notify.) ⇒ Promise

pg-notify~Subscribe to all database events of a given list of tables(tables) ⇒ Promise

Kind: inner method of pg-notify
Returns: Promise - a promise wich resolves an NodeJS EventEmitter

Param Type Description
tables Array.<string> An array of table names to listen

Example

const { Client }  = require('pg');
 const pgNotify = require('@becual/pg-notify');

 let eventHandler = evt => {
     console.log(JSON.stringify(evt, null, 4));
 };

 (async () => {
     // Use your connection string
     const client = new Client({ connectionString: process.env.PG_CONNECTION_STRING });

     // Choose your tables to listen
     const tables = ['customer', 'order_detail'];

    try {
        // Connect client
        await client.connect();

        // By default schema is public
        const sub = await pgNotify(client, {schema: 'mySchema'}).subscribe(tables);

        // Listen for changes
        sub.on('INSERT', eventHandler);
        sub.on('UPDATE', eventHandler);
        sub.on('DELETE', eventHandler);
    }
    catch(error) {
        console.log(error.message);
        await client.end();
    }
 })();

pg-notify~Create the functions and triggers to configure pg-notify.(tables) ⇒ Promise

Kind: inner method of pg-notify
Returns: Promise - A promise that will implement the pg-notify config.

Param Type Description
tables Array.<string> The list of tables to create pg notify configuration.

Example

const { Client } = require('pg');
 const pgNotify = require('@becual/pg-notify');

 (async () => {

     const client = new Client({ connectionString: process.env.PG_CONNECTION_STRING });
     const tableList = ['customer', 'order_detail'];

     try {
         // Try to generate configuration
         await client.connect();
         await pgNotify(client, {schema: 'mySchema'}).config(tableList);
     }
     catch(error) {
         // Show errors
         console.log(error.message);
     }
     finally {
         // Close connection
         await client.end();
     }
 })();