🐘 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
- Full SQL support (SELECT, INSERT, UPDATE, DELETE)
- Prepared statements with parameters
- Transactions (BEGIN, COMMIT, ROLLBACK)
- Connection pooling
- Type conversion (int, bigint, float, bool, text, bytea)
- NULL handling
- Result set iteration
- Async queries (planned)
🚀 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
sqlite- SQLite databaseredis- Redis cachecrypto- Password hashing