To run queries, obtain a pog.Connection (typically via pog.named_connection using the pool name).
Use the following pattern to execute a query:
- Define your SQL string with
$n placeholders for parameters. - Define a
row_decoder using gleam/dynamic/decode to map database columns to Gleam types. - Chain
pog.query, pog.parameter, and pog.returning before calling pog.execute(db).
import pog
import gleam/dynamic/decode
pub fn run(db: pog.Connection) {
let sql_query = "
select
name, age, colour, friends
from
cats
where
id = $1"
let row_decoder = {
use name <- decode.field(0, decode.string)
use age <- decode.field(1, decode.int)
use colour <- decode.field(2, decode.string)
use friends <- decode.field(3, decode.list(decode.string))
decode.success(#(name, age, colour, friends))
}
let assert Ok(data) =
pog.query(sql_query)
|> pog.parameter(pog.int(1))
|> pog.returning(row_decoder)
|> pog.execute(db)
// data contains the decoded results
}