Role-Based Guides

WhoDB for Database Administrators

WhoDB for Database Administrators

As a database administrator, you manage complex database infrastructure supporting multiple applications and teams. WhoDB provides DBA-specific capabilities for schema exploration, multi-database management, data integrity verification, and administrative maintenance tasks.

DBA Administration Capabilities

Schema Management

Explore, understand, and document database schemas across your infrastructure

Multi-Database Access

Manage multiple database instances, environments, and replica servers

Data Integrity

Verify data consistency, check constraints, and identify orphaned records

Maintenance Tasks

Execute administrative queries and maintenance operations

Multi-Database Management

Managing Multiple Connection Profiles

Cross-Database Schema Comparison

Schema Exploration & Documentation

Understanding Your Database Structure

Visualizing Schema Topology

Data Integrity & Verification

Integrity Checking Queries

Data Quality Audits

Administrative Maintenance Tasks

Schema Modification Verification

Before and after schema changes, verify your modifications:

sql

-- Verify new column was added correctly
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = 'orders'
ORDER BY ordinal_position;

-- Check index creation
SELECT indexname, indexdef
FROM pg_indexes
WHERE tablename = 'orders';

-- Verify constraint creation
SELECT constraint_name, constraint_type
FROM information_schema.table_constraints
WHERE table_name = 'orders';

Statistics & Performance Monitoring

Monitor database performance over time:

sql

-- Monitor slow queries
SELECT
  query,
  calls,
  total_time,
  mean_time,
  max_time
FROM pg_stat_statements
WHERE mean_time > 100
ORDER BY mean_time DESC
LIMIT 20;

-- Check table bloat (dead tuples)
SELECT
  schemaname,
  tablename,
  ROUND(dead_tuples::float / live_tuples * 100, 2) as dead_percent
FROM pg_stat_user_tables
WHERE live_tuples > 0
  AND ROUND(dead_tuples::float / live_tuples * 100, 2) > 10
ORDER BY dead_percent DESC;

Regular monitoring helps you maintain optimal database performance.

Cleanup & Maintenance

Execute administrative cleanup tasks safely:

sql

-- Delete old archive records (with backup first)
DELETE FROM audit_logs
WHERE created_at < NOW() - INTERVAL '2 years'
AND archived = true;

-- Mark records for deletion rather than immediate delete
UPDATE orders
SET is_deleted = true, deleted_at = NOW()
WHERE created_at < NOW() - INTERVAL '5 years'
  AND status = 'cancelled';

DBA Best Practices

Document Everything

Maintain documentation of your schema, constraints, relationships, and standard procedures.

Use Read-Only Access

Configure production connections as read-only to prevent accidents.

Regular Integrity Checks

Schedule routine data integrity verifications to catch issues early.

Version Control Schemas

Track schema changes and have a rollback plan for each modification.

Monitor Performance

Regularly check slow queries, indexes, and table statistics.

Test First

Test all queries and procedures on development/staging before production.

Query Repository for DBAs

Common DBA Queries

Database Health Check

sql

-- Overall database health summary
SELECT
  datname,
  numbackends as active_connections,
  xact_commit as transactions_committed,
  xact_rollback as transactions_rolled_back,
  tup_returned as tuples_read,
  tup_fetched as tuples_fetched,
  tup_inserted as tuples_inserted,
  tup_updated as tuples_updated,
  tup_deleted as tuples_deleted
FROM pg_stat_database
WHERE datname NOT IN ('template0', 'template1', 'postgres');

Missing Indexes on Foreign Keys

sql

-- Identify foreign keys without corresponding indexes
SELECT
  tc.table_name,
  kcu.column_name,
  'MISSING INDEX' as status
FROM information_schema.table_constraints tc
JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name
WHERE tc.constraint_type = 'FOREIGN KEY'
  AND NOT EXISTS (
    SELECT 1 FROM information_schema.statistics s
    WHERE s.table_name = tc.table_name
    AND s.column_name = kcu.column_name
  );

Connection Analysis

sql

-- Who is connected and what are they doing?
SELECT
  usename,
  application_name,
  state,
  query,
  state_change,
  query_start
FROM pg_stat_activity
WHERE datname = current_database()
  AND usename != 'postgres'
ORDER BY query_start DESC;

Troubleshooting Common DBA Issues

Next Steps

Enhance your DBA capabilities:

Database Exploration

Master schema exploration and documentation

Query Writing

Learn advanced SQL for administrative tasks

Data Export

Export schema documentation and reports

Where Conditions

Master filtering for targeted administrative queries