PostgreSQL, často jednoduše označovaný jako Postgres, je výkonný objektově relační databázový systém s otevřeným zdrojovým kódem. S více než 30 lety aktivního vývoje si získal silnou reputaci pro svou robustnost, pokročilé funkce a zásadní shodu se standardy.
Je navržen tak, aby zvládl rozsáhlou pracovní zátěž, od jednotlivých strojů po datové sklady nebo webové služby s mnoha souběžnými uživateli. Poskytuje transakční integritu a trvanlivost a podporuje různé pokročilé datové typy a výkonný, flexibilní jazyk pro manipulaci s daty.
Tento tutoriál nás naučí, jak nakonfigurovat a propojit server PostgreSQL s aplikací Go.
Požadavky:
Přejít na programovací jazyk – Zajistí, že je na vašem počítači nainstalován kompilátor Go.
PostgreSQL databáze – Musíte mít také nainstalovaný PostgreSQL. Můžete jej nainstalovat přímo do počítače nebo použít kontejner Docker pro jednodušší nastavení.
Vývojové nástroje – Integrované vývojové prostředí (IDE), které podporuje Go jako Visual Studio Code, GoLand atd.
Základní znalost SQL a Go – Abyste mohli pracovat s databází PostgreSQL, musíte rozumět SQL a různým dotazům, které musíte provést. Potřebujete také základní znalost jazyka Go.
Po splnění daných požadavků můžeme přistoupit k následujícím krokům.
Nastavení projektu
Začněme nastavením naší projektové adresářové struktury. Vytvořte hlavní adresář, kam potřebujete uložit zdrojový kód projektu.
$ mkdir golang_postgresPřejděte do adresáře a inicializujte nový modul Go.
$ CD golang_postgres && přejděte do modu init mainNainstalujte požadované ovladače
Abychom mohli komunikovat s databází PostgreSQL, potřebujeme ovladač PostgreSQL pro programovací jazyk Go.
V tomto tutoriálu používáme ovladač pq, který nabízí širokou škálu funkcí pro práci s databází PostgreSQL.
Můžete jej nainstalovat spuštěním následujícího příkazu:
přejděte na github.com / lib / pqVytvořte databázi
Dalším krokem je vytvoření nové PostgreSQL databáze. Opět to můžeme udělat v prostředí PostgreSQL.
$ psql -V postgresTento příkaz vás vyzve k zadání hesla postgresu. Po přihlášení spusťte příkaz „create database“ pro inicializaci nové databáze:
postgres=# vytvořit databázi golang;VYTVOŘIT DATABÁZI
Daný příkaz vytvoří novou databázi s názvem „golang“. Neváhejte nahradit název databáze vámi požadovaným názvem.
Úspěšně vytvořenou databázi pak můžete ověřit připojením k ní.
postgres=# \c golang;Nyní jste připojeni k databázi 'golang' jako uživatel 'postgres'.
Dále nastavte tabulku, kam chcete data uložit. Pro tento tutoriál vytvoříme jednoduchou tabulku, která ukládá informace o relaci.
CREATE TABLE db_clients (id SÉRIOVÝ PRIMÁRNÍ KLÍČ,
jméno VARCHAR(100) NOT NULL,
session_time TIMESTAMP NOT NULL,
počet_dotazů INT DEFAULT 0,
active_state BOOLEAN DEFAULT FALSE
);
Daný dotaz by měl vytvořit novou tabulku nazvanou „db_clients“, která uchovává informace o klientech přihlášených na daný databázový server.
Propojte aplikaci Go s PostgreSQL
Jakmile nastavíme databázi a databázovou tabulku, můžeme pokračovat a naučit se, jak propojit naši aplikaci Go se serverem PostgreSQL.
Začněte vytvořením souboru „main.go“ v kořenovém adresáři vašeho projektu:
$ dotek main.goDále upravte soubor pomocí textového editoru podle vašeho výběru:
$ protože main.goDo souboru „main.go“ přidejte zdrojový kód, jak je znázorněno v následujícím:
hlavní balíčekimport (
'databáze/sql'
'fmt'
'log'
_ 'github.com/lib/pq'
)
func main ( ) {
connStr := 'postgres://postgres:password@localhost/golang?sslmode=disable'
db, err := sql.Otevřít ( 'postgres' , connStr )
-li chybovat ! = nula {
log.Osudný ( chybovat )
}
-li err = db.Ping ( ) ; chybovat ! = nula {
log.Osudný ( chybovat )
}
fmt.Println ( 'Připojeno k databázi' )
}
V předchozím kódu začneme importem požadovaných modulů. Poté definujeme hlavní funkci. Nakonec v hlavní funkci definujeme připojovací řetězec, který nám umožňuje specifikovat cílového hostitele, uživatele databáze, heslo databáze a skutečnou cílovou databázi.
Modul podporuje následující parametry v připojovacím řetězci:
- dbname – Název databáze, ke které se chcete připojit.
- uživatel – uživatel, který se má přihlásit.
- heslo – heslo uživatele.
- hostitel – hostitel, ke kterému se chcete připojit. Hodnoty začínající „/“ jsou pro sokety domény Unix (výchozí je localhost).
- port – Port, na který se má navázat (výchozí hodnota je 5432).
- sslmode – Zda se má či nemá používat SSL (výchozí nastavení je požadováno; toto není výchozí nastavení pro libpq).
- fallback_application_name – název_aplikace, ke kterému se lze vrátit, pokud není zadán.
- connect_timeout – Maximální čekání na připojení v sekundách. Nula nebo neuvedeno znamená čekat donekonečna.
- sslcert – umístění souboru cert. Soubor musí obsahovat data kódovaná PEM.
- sslkey – umístění souboru klíče. Soubor musí obsahovat data kódovaná PEM.
- sslrootcert – Umístění souboru kořenového certifikátu. Soubor musí obsahovat data kódovaná PEM.
Podle potřeby můžete nakonfigurovat vlastnosti cílového připojení. Chcete-li nakonfigurovat SSL a přijímané parametry SSLMode, podívejte se na náš tutoriál https://linuxhint.com/postgres-sslmode .
Jakmile budete spokojeni s vlastnostmi připojení, můžete spustit předchozí kód a otestovat, zda je připojení navázáno.
běž spustit .\main.goPo připojení byste měli získat následující výstup:
Připojeno k databáziPostgreSQL Vložit data do tabulky
Dalším krokem je vložení ukázkových dat do tabulky, kterou jsme vytvořili dříve. Můžeme to udělat tak, že definujeme vkládací dotazy jako řetězcový literál a pak použijeme funkci db.Exec() ke spuštění cílového dotazu.
Kód je následující:
---insertStatement := `INSERT INTO db_clients (název, čas_relace, počet_dotazů, aktivní_stav)
HODNOTY
('psql', '2023-05-26 10:15:00', 10, true),
('datagrip', '2023-05-26 09:30:00', 5, true),
('dbeaver', '2023-05-26 11:00:00', 20, pravda),
('workbench', '2023-05-26 14:45:00', 15, false),
('remote', '2023-05-26 13:20:00', 8, true);`
_, err = db.Exec(insertStatement)
if err != nula {
log.Fatal(chyba)
}
Pokud spustíte předchozí kód, měl by vložit zadané záznamy do cílové tabulky.
Data dotazů PostgreSQL
K dotazu na řádky z tabulky můžeme definovat příkaz select jako řetězec a použít db.Query() k jeho spuštění. Řádky tabulky můžeme iterovat pomocí funkce Next() a vytisknout je, jak je znázorněno v následujícím:
řádky, err := db.Query ( 'SELECT * FROM db_clients' )-li chybovat ! = nula {
log.Osudný ( chybovat )
}
odložit řádky.Zavřít ( )
pro řádky.Další ( ) {
byl id int
řetězec názvu var
var sessionTime time.Time
var numberOfQueries int
var activeState bool
err := řádky.Skenovat ( & id , & název, & sessionTime, & numberOfQueries, & aktivní stav )
-li chybovat ! = nula {
log.Osudný ( chybovat )
}
fmt.Printf ( 'ID: %d, Název: %s, Čas relace: %s, Počet dotazů: %d, Aktivní stav: %t \n ' , id , jméno, sessionTime, numberOfQueries, activeState )
}
-li err = řádky.Err ( ) ; chybovat ! = nula {
log.Osudný ( chybovat )
}
Jakmile spustíme předchozí kód, měl by vytisknout všechny řádky z tabulky db_clients, jak je znázorněno v následujícím příkladu výstupu:
Tady to máš!
Závěr
Zkoumali jsme, jak můžeme použít balíček pq k připojení a dotazování databáze PostgreSQL pomocí Golang.