PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak obsługiwać otwieranie/zamykanie połączenia Db w aplikacji Go?

Otwarcie połączenia db za każdym razem, gdy jest potrzebne, jest marnowaniem zasobów i jest powolne.

Zamiast tego powinieneś utworzyć sql.DB raz, kiedy aplikacja zostanie uruchomiona (lub na pierwsze żądanie) i albo przekaż ją tam, gdzie jest potrzebna (np. jako parametr funkcji lub przez jakiś kontekst), albo po prostu ustaw ją jako zmienną globalną, aby każdy miał do niej dostęp. Bezpiecznie jest dzwonić z wielu gorutyn.

Cytując z dokumentacji sql.Open() :

Zwrócony DB jest bezpieczny do współbieżnego używania przez wiele gorutyn i utrzymuje własną pulę bezczynnych połączeń. Dlatego funkcję Open należy wywołać tylko raz. Rzadko jest konieczne zamknięcie bazy danych.

Możesz użyć pakietu init() funkcja do inicjalizacji:

var db *sql.DB

func init() {
    var err error
    db, err = sql.Open("yourdriver", "yourDs")
    if err != nil {
        log.Fatal("Invalid DB config:", err)
    }
}

Należy zauważyć, że sql.Open() może nie utworzyć rzeczywistego połączenia z bazą danych, może po prostu zweryfikować swoje argumenty. Aby sprawdzić, czy rzeczywiście możesz połączyć się z bazą danych, użyj DB.Ping() , np.:

func init() {
    var err error
    db, err = sql.Open("yourdriver", "yourDs")
    if err != nil {
        log.Fatal("Invalid DB config:", err)
    }
    if err = db.Ping(); err != nil {
        log.Fatal("DB unreachable:", err)
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jeśli liczba PostgreSQL(*) jest zawsze wolna, jak stronicować złożone zapytania?

  2. nie można utworzyć rozszerzenia bez roli administratora

  3. Jak ustawić parametr String[] na zapytanie natywne?

  4. Rola nie istnieje i nie można utworzyć bazy danych podczas korzystania z PostgreSQL

  5. Czy mogę automatycznie utworzyć tabelę w PostgreSQL z pliku csv z nagłówkami?