PostgreSQL działa z ponumerowanymi symbolami zastępczymi ($1
, $2
, ...) natywnie zamiast zwykłych pozycyjnych znaków zapytania. Dokumentacja interfejsu Go również używa w przykładach ponumerowanych symboli zastępczych:
rows, err := db.Query("SELECT name FROM users WHERE age = $1", age)
Wygląda na to, że interfejs Go nie tłumaczy znaków zapytania na ponumerowane symbole zastępcze w sposób, w jaki robi to wiele interfejsów, więc znak zapytania dociera do bazy danych i wszystko myli.
Powinieneś być w stanie przełączyć się na ponumerowane symbole zastępcze zamiast znaków zapytania:
row := db.QueryRow(
"SELECT name FROM users WHERE id = $1", id)