70 lines
1.8 KiB
Go
70 lines
1.8 KiB
Go
package db
|
||
|
||
import (
|
||
"database/sql"
|
||
"fmt"
|
||
"log"
|
||
"os"
|
||
"time"
|
||
|
||
_ "github.com/lib/pq"
|
||
)
|
||
|
||
var PgDB *sql.DB
|
||
|
||
// ConnectPostgres → PostgreSQL veritabanına bağlanır
|
||
func ConnectPostgres() (*sql.DB, error) {
|
||
// Bağlantı stringi (istersen .env’den oku)
|
||
connStr := os.Getenv("POSTGRES_CONN")
|
||
if connStr == "" {
|
||
// fallback → sabit tanımlı bağlantı
|
||
connStr = "host= 46.224.33.150 port=5432 user=postgres password=tayitkan dbname=baggib2b sslmode=disable"
|
||
//connStr = "host=172.16.0.3 port=5432 user=postgres password=tayitkan dbname=baggib2b sslmode=disable"
|
||
}
|
||
|
||
db, err := sql.Open("postgres", connStr)
|
||
if err != nil {
|
||
return nil, fmt.Errorf("PostgreSQL bağlantı hatası: %w", err)
|
||
}
|
||
|
||
// =======================================================
|
||
// 🔹 BAĞLANTI HAVUZU (AUDIT LOG UYUMLU)
|
||
// =======================================================
|
||
db.SetMaxOpenConns(30) // audit + api paralel çalışsın
|
||
db.SetMaxIdleConns(10)
|
||
db.SetConnMaxLifetime(30 * time.Minute)
|
||
db.SetConnMaxIdleTime(5 * time.Minute) // 🔥 uzun idle audit bağlantılarını kapat
|
||
|
||
// 🔹 Test et
|
||
if err = db.Ping(); err != nil {
|
||
return nil, fmt.Errorf("PostgreSQL erişilemiyor: %w", err)
|
||
}
|
||
|
||
log.Println("✅ PostgreSQL bağlantısı başarılı!")
|
||
PgDB = db
|
||
return db, nil
|
||
|
||
}
|
||
|
||
// GetPostgresUsers → test amaçlı ilk 5 kullanıcıyı listeler
|
||
func GetPostgresUsers(db *sql.DB) error {
|
||
query := `SELECT id, code, email FROM mk_dfusr ORDER BY id LIMIT 5`
|
||
rows, err := db.Query(query)
|
||
if err != nil {
|
||
return fmt.Errorf("PostgreSQL sorgu hatası: %w", err)
|
||
}
|
||
defer rows.Close()
|
||
|
||
fmt.Println("📋 İlk 5 PostgreSQL kullanıcısı:")
|
||
for rows.Next() {
|
||
var id int
|
||
var code, email string
|
||
if err := rows.Scan(&id, &code, &email); err != nil {
|
||
return err
|
||
}
|
||
fmt.Printf(" ➜ ID: %-4d | USER: %-20s | EMAIL: %s\n", id, code, email)
|
||
}
|
||
|
||
return rows.Err()
|
||
}
|