Skip to content

PostgreSQL Examples

Production examples with PostgreSQL.

Basic Connection

typescript
import { PostgresAdapter } from 'tonl-mcp-bridge';

const db = new PostgresAdapter({
  host: process.env.DB_HOST || 'localhost',
  port: 5432,
  database: 'myapp',
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD
});

await db.connect();

const result = await db.queryWithStats(
  'SELECT * FROM users WHERE active = true',
  'users'
);

console.log(`Retrieved ${result.rowCount} users`);
console.log(`Saved ${result.stats.savingsPercent}% tokens`);

await db.disconnect();

Production Setup

typescript
import { PostgresAdapter } from 'tonl-mcp-bridge';

const db = new PostgresAdapter({
  host: process.env.POSTGRES_HOST,
  port: parseInt(process.env.POSTGRES_PORT || '5432'),
  database: process.env.POSTGRES_DB,
  user: process.env.POSTGRES_USER,
  password: process.env.POSTGRES_PASSWORD,
  max: 20,                    // Connection pool size
  idleTimeoutMillis: 30000,   // Close idle connections
  connectionTimeoutMillis: 2000
});

await db.connect();

// Verify connection
if (db.isConnected()) {
  console.log('Database connected');
}

Parameterized Queries

Prevent SQL injection:

typescript
const userId = 123;
const status = 'pending';

const result = await db.queryWithStats(
  'SELECT * FROM orders WHERE user_id = $1 AND status = $2',
  'orders',
  { model: 'gpt-5' }
);

console.log(result.tonl);

Batch Operations

Execute multiple queries efficiently:

typescript
const results = await db.batchQueryWithStats([
  {
    sql: 'SELECT * FROM users WHERE created_at > NOW() - INTERVAL \'7 days\'',
    name: 'recent_users'
  },
  {
    sql: 'SELECT * FROM orders WHERE status = \'pending\'',
    name: 'pending_orders'
  },
  {
    sql: 'SELECT * FROM products WHERE stock < 10',
    name: 'low_stock'
  }
]);

console.log(`Total queries: ${results.aggregate.totalQueries}`);
console.log(`Total rows: ${results.aggregate.totalRows}`);
console.log(`Total saved: ${results.aggregate.savedTokens} tokens`);

results.results.forEach((r, i) => {
  console.log(`Query ${i + 1}: ${r.rowCount} rows, ${r.stats?.savingsPercent}% saved`);
});

Query Analysis

Pre-execution cost analysis:

typescript
const sql = `
  SELECT u.*, COUNT(o.id) as order_count
  FROM users u
  LEFT JOIN orders o ON u.id = o.user_id
  WHERE u.created_at > $1
  GROUP BY u.id
`;

const analysis = await db.analyzeQuery(sql, 'users');

console.log(`Estimated rows: ${analysis.estimatedRows}`);
console.log(`Potential savings: ${analysis.potentialSavingsPercent}%`);
console.log(`Cost per call: ${analysis.costImpact}`);
console.log(`Recommendation: ${analysis.recommendation}`);

if (analysis.recommendation === 'use-tonl') {
  const result = await db.queryToTonl(sql, 'users');
}

Schema Monitoring

Track production schema changes:

typescript
// Daily schema check
async function checkSchema() {
  const db = new PostgresAdapter(config);
  await db.connect();
  
  const tables = ['users', 'orders', 'products'];
  
  for (const table of tables) {
    const drift = await db.detectSchemaDrift(table);
    
    if (drift.hasChanged) {
      console.log(`[${table}] Schema changed`);
      console.log(`  New columns: ${drift.newColumns}`);
      console.log(`  Removed: ${drift.removedColumns}`);
      console.log(`  Impact: ${drift.savingsImpact}%`);
      
      if (Math.abs(drift.savingsImpact) > 10) {
        await sendAlert({
          table,
          impact: drift.savingsImpact,
          recommendation: drift.recommendation
        });
      }
      
      await db.updateSchemaBaseline(table);
    }
  }
  
  await db.disconnect();
}

// Run daily
setInterval(checkSchema, 24 * 60 * 60 * 1000);

RAG System Integration

typescript
import { PostgresAdapter } from 'tonl-mcp-bridge';
import OpenAI from 'openai';

const openai = new OpenAI();
const db = new PostgresAdapter(config);

async function ragQuery(question: string) {
  await db.connect();
  
  // Search relevant documents
  const result = await db.queryWithStats(
    `SELECT id, content, metadata
     FROM documents
     WHERE content ILIKE $1
     ORDER BY relevance DESC
     LIMIT 5`,
    'documents',
    { model: 'gpt-5' }
  );
  
  console.log(`Retrieved ${result.rowCount} documents`);
  console.log(`Saved ${result.stats.savedTokens} tokens`);
  
  // Use TONL context in prompt
  const completion = await openai.chat.completions.create({
    model: 'gpt-4',
    messages: [
      {
        role: 'system',
        content: 'Answer based on this context:\n' + result.tonl
      },
      {
        role: 'user',
        content: question
      }
    ]
  });
  
  await db.disconnect();
  return completion.choices[0].message.content;
}

Transaction Management

typescript
const db = new PostgresAdapter(config);
await db.connect();

try {
  await db.query('BEGIN');
  
  await db.query(
    'UPDATE accounts SET balance = balance - $1 WHERE id = $2',
    [100, 1]
  );
  
  await db.query(
    'UPDATE accounts SET balance = balance + $1 WHERE id = $2',
    [100, 2]
  );
  
  await db.query(
    'INSERT INTO transactions (from_account, to_account, amount) VALUES ($1, $2, $3)',
    [1, 2, 100]
  );
  
  await db.query('COMMIT');
  console.log('Transaction completed');
} catch (error) {
  await db.query('ROLLBACK');
  console.error('Transaction failed:', error);
}

await db.disconnect();

Pagination

Handle large result sets:

typescript
const pageSize = 100;
let offset = 0;

while (true) {
  const result = await db.queryWithStats(
    `SELECT * FROM logs
     ORDER BY created_at DESC
     LIMIT $1 OFFSET $2`,
    'logs',
    { model: 'gpt-5' }
  );
  
  if (result.rowCount === 0) break;
  
  console.log(`Page ${offset / pageSize + 1}: ${result.rowCount} rows`);
  console.log(`Saved: ${result.stats.savingsPercent}%`);
  
  offset += pageSize;
}

Error Handling

typescript
import { DatabaseError } from 'tonl-mcp-bridge';

try {
  await db.connect();
  const result = await db.query('SELECT * FROM users');
} catch (error) {
  if (error instanceof DatabaseError) {
    console.error('Database error:', error.message);
    console.error('Query:', error.query);
    
    if (error.originalError) {
      console.error('Original:', error.originalError);
    }
  } else {
    console.error('Unexpected error:', error);
  }
} finally {
  await db.disconnect();
}

Connection Pooling

typescript
// Shared connection pool
const db = new PostgresAdapter({
  ...config,
  max: 50,  // 50 connections
  idleTimeoutMillis: 30000,
  connectionTimeoutMillis: 2000
});

await db.connect();

// Concurrent requests use pool
await Promise.all([
  db.query('SELECT * FROM users'),
  db.query('SELECT * FROM orders'),
  db.query('SELECT * FROM products')
]);

await db.disconnect();

MIT Licensed | v1.0.0