Crate lmrc_postgres

Crate lmrc_postgres 

Source
Expand description

§PostgreSQL Manager

A comprehensive library for managing PostgreSQL installations on remote servers via SSH.

§Features

  • Builder Pattern API: Fluent, type-safe configuration
  • Idempotent Operations: Safe to run multiple times
  • Diff Detection: Track configuration changes
  • Full Lifecycle: Install, configure, update, and uninstall
  • SSH-based: Uses ssh-manager for secure remote operations
  • Error Handling: Comprehensive error types with context

§Quick Start

use lmrc_postgres::{PostgresConfig, PostgresManager};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Build PostgreSQL configuration
    let config = PostgresConfig::builder()
        .version("15")
        .database_name("myapp")
        .username("myuser")
        .password("secure_password")
        .listen_addresses("0.0.0.0/0")
        .port(5432)
        .max_connections(100)
        .shared_buffers("256MB")
        .build()?;

    // Create manager and connect
    let manager = PostgresManager::builder()
        .config(config)
        .server_ip("192.168.1.100")
        .ssh_user("root")
        .build()?;

    // Install and configure PostgreSQL
    manager.install().await?;
    manager.configure().await?;

    // Test the connection
    manager.test_connection().await?;

    Ok(())
}

§Examples

§Install with custom configuration

let config = PostgresConfig::builder()
    .version("15")
    .database_name("production_db")
    .username("app_user")
    .password("strong_password")
    .listen_addresses("10.0.0.0/8")
    .port(5432)
    .max_connections(200)
    .shared_buffers("512MB")
    .effective_cache_size("2GB")
    .build()?;

let manager = PostgresManager::builder()
    .config(config)
    .server_ip("10.0.1.50")
    .ssh_user("admin")
    .build()?;

manager.setup().await?;

§Detect configuration changes

let diff = manager.diff().await?;

if diff.has_changes() {
    println!("Configuration changes detected:");
    for change in diff.changes() {
        println!("  - {}", change);
    }

    // Apply changes
    manager.apply_diff(&diff).await?;
}

Re-exports§

pub use adapter::PostgresAdapter;
pub use backup::ConfigBackup;
pub use backup::PgHbaDiff;
pub use backup::PgHbaRule;
pub use backup::backup_config;
pub use backup::cleanup_old_backups;
pub use backup::diff_pg_hba_rules;
pub use backup::list_backups;
pub use backup::parse_pg_hba_rules;
pub use backup::read_pg_hba;
pub use backup::restore_backup;
pub use backup::rollback_config;
pub use config::PostgresConfig;
pub use config::PostgresConfigBuilder;
pub use diff::ConfigChange;
pub use diff::ConfigDiff;
pub use error::Error;
pub use error::Result;
pub use install::InstallationStep;
pub use install::Platform;
pub use install::SystemInfo;
pub use install::SystemRequirements;
pub use install::check_requirements;
pub use install::check_version_available;
pub use install::detect_platform;
pub use install::get_system_info;
pub use install::upgrade;
pub use install::verify_installation;
pub use manager::PostgresManager;
pub use manager::PostgresManagerBuilder;
pub use user_db_management::DatabaseInfo;
pub use user_db_management::Privilege;
pub use user_db_management::UserInfo;
pub use user_db_management::create_database_with_options;
pub use user_db_management::create_role;
pub use user_db_management::create_user_with_options;
pub use user_db_management::database_exists;
pub use user_db_management::drop_database;
pub use user_db_management::drop_user;
pub use user_db_management::grant_privileges;
pub use user_db_management::grant_role;
pub use user_db_management::list_databases;
pub use user_db_management::list_users;
pub use user_db_management::revoke_privileges;
pub use user_db_management::revoke_role;
pub use user_db_management::update_user_password;
pub use user_db_management::user_exists;
pub use validation::WorkloadType;
pub use validation::auto_tune;
pub use validation::check_conflicting_settings;
pub use validation::parse_memory_size;
pub use validation::validate_cidr;
pub use validation::validate_comprehensive;
pub use validation::validate_listen_addresses;
pub use validation::validate_memory_size;
pub use validation::validate_resource_limits;

Modules§

adapter
PostgreSQL Adapter
backup
Configuration backup and rollback functionality
config
PostgreSQL configuration with builder pattern
diff
Configuration diff detection
error
Error types for PostgreSQL Manager
install
Advanced installation features
manager
PostgreSQL Manager with builder pattern
operations
Idempotent PostgreSQL operations
user_db_management
User and Database Management
validation
Configuration validation utilities

Structs§

CommandOutput
The output of an executed SSH command.
SshClient
An SSH client for executing remote commands.

Enums§

AuthMethod
Authentication methods for SSH connections.