🐘 postgresql

PostgreSQL Database Client - Production Ready

~600 satır ~50 fonksiyon Wire Protocol

📖 Genel Bakış

PostgreSQL modülü, wire protocol üzerinden tam özellikli PostgreSQL database client sağlar. Prepared statements, transactions, connection pooling ve type-safe queries destekler.

🔑 Temel Özellikler

🚀 Hızlı Başlangıç

içe_aktar postgresql olarakpg

// Connect
değişken conn = pg.connect("host=localhost dbname=mydb user=postgres password=pass")?

// Query
değişken result = conn.query("SELECT id, name, email FROM users WHERE active = $1", [doğru])?

her row içinde result için yap
    değişken id = row.get_int("id")?
    değişken name = row.get_string("name")?
    io.println("{}: {}", id, name)
son

conn.close()

💡 Örnek: User Management System

içe_aktar postgresql olarakpg, crypto

yapı User yap
    id: sayı,
    username: yazı,
    email: yazı,
    password_hash: yazı,
    created_at: time.DateTime
son

fonksiyon db_init() -> Sonuç[pg.Connection, Hata] yap
    değişken conn = pg.connect(
        "host=localhost port=5432 dbname=users user=app password=secret"
    )?
    
    // Create tables
    conn.exec("
        CREATE TABLE IF NOT EXISTS users (
            id SERIAL PRIMARY KEY,
            username VARCHAR(50) UNIQUE NOT NULL,
            email VARCHAR(100) UNIQUE NOT NULL,
            password_hash VARCHAR(255) NOT NULL,
            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        )
    ")?
    
    dön Tamam(conn)
son

fonksiyon create_user(conn: pg.Connection, username: yazı, email: yazı, password: yazı) 
    -> Sonuç[sayı, Hata] yap
    // Hash password
    değişken hash = crypto.argon2_hash(password)?
    
    // Insert with prepared statement
    değişken result = conn.query_one("
        INSERT INTO users (username, email, password_hash)
        VALUES ($1, $2, $3)
        RETURNING id
    ", [username, email, hash])?
    
    dön result.get_int("id")
son

fonksiyon get_user_by_username(conn: pg.Connection, username: yazı) 
    -> Sonuç[İsteğe_Bağlı[User], Hata] yap
    değişken result = conn.query_one("
        SELECT id, username, email, password_hash, created_at
        FROM users WHERE username = $1
    ", [username])
    
    eşle result yap
        Tamam(row) => dön Tamam(Bazı(User yap
            id: row.get_int("id")?,
            username: row.get_string("username")?,
            email: row.get_string("email")?,
            password_hash: row.get_string("password_hash")?,
            created_at: row.get_timestamp("created_at")?
        son)),
        Hata(_) => dön Tamam(Hiçbir)
    son
son

fonksiyon authenticate(conn: pg.Connection, username: yazı, password: yazı) 
    -> Sonuç[mantıksal, Hata] yap
    değişken user = get_user_by_username(conn, username)?
    
    eğer user.is_none() ise yap
        dön Tamam(yanlış)
    son
    
    değişken u = user.unwrap()
    dön Tamam(crypto.argon2_verify(password, u.password_hash)?)
son

fonksiyon ana() yap
    değişken conn = db_init()?
    
    // Create user
    değişken user_id = create_user(conn, "alice", "alice@example.com", "secret123")?
    io.println("Created user: {}", user_id)
    
    // Authenticate
    eğer authenticate(conn, "alice", "secret123")? ise yap
        io.println("✓ Authentication successful")
    değilse yap
        io.println("✗ Authentication failed")
    son
    
    conn.close()
son

💼 Transaction Management

// Begin transaction
conn.begin()?

dene yap
    conn.exec("INSERT INTO accounts (user_id, balance) VALUES ($1, $2)", [1, 1000])?
    conn.exec("INSERT INTO transactions (account_id, amount) VALUES ($1, $2)", [1, 100])?
    conn.exec("UPDATE accounts SET balance = balance - $1 WHERE id = $2", [100, 1])?
    
    conn.commit()?
    io.println("Transaction completed")
yakala e yap
    conn.rollback()?
    io.eprintln("Transaction failed: {}", e)
son

🔗 İlgili Modüller

← Tüm Modüller