O PostgreSQL funciona com espaços reservados numerados (
$1
, $2
, ...) nativamente em vez dos pontos de interrogação posicionais usuais. A documentação da interface Go também usa espaços reservados numerados em seus exemplos:rows, err := db.Query("SELECT name FROM users WHERE age = $1", age)
Parece que a interface Go não está traduzindo os pontos de interrogação para espaços reservados numerados da maneira que muitas interfaces fazem, então o ponto de interrogação está chegando ao banco de dados e confundindo tudo.
Você deve poder alternar para espaços reservados numerados em vez de pontos de interrogação:
row := db.QueryRow(
"SELECT name FROM users WHERE id = $1", id)