TrueDevs
@TrueDevs

Почему неправильно работает select .. group by в sql/pg golang?

Никак не могу понять, почему неправильно работает запрос к бд...

name := "filedname"
        var result []string

	query := `SELECT $1 FROM table GROUP BY $1;`

	stmt, _ := app.DB.Prepare(query)
	defer stmt.Close()

	rows, _ := stmt.Query(name)
	defer rows.Close()

	for rows.Next() {
		var res string
		rows.Scan(&res)
		result = append(result, res)
	}


проверку ошибок тут убрал намеренно, при наличии их проверок, ошибки отсутствуют.

Результат слайс строк с одним элементом [filedname] (имя поля) , хотя ожидаю я конечно слайс сгруппированных значений.

При чем если написать жестко query := `SELECT filedname FROM table GROUP BY filedname;` , то получаю ожидаемый слайс.

Кто то может подсказать, в чем дело?)
  • Вопрос задан
  • 157 просмотров
Решения вопроса 1
@eyeless_watcher
Bind-переменные могут использоваться только для передачи данных, но не для построения самого запроса. После подставления значений исходный запрос будет иметь вид `SELECT 'fieldname' from table group by 'fieldname'` (обратите внимание на кавычки вокруг `fieldname`).
Если нужно динамически строить состав запроса (колонки, group by, order by, и т.д.), от конкатенации его на стороне приложения никуда не деться. Главное не использовать в этой конкатенации пользовательский ввод (либо, если это таки нужно - предварительно проверять, что нужная колонка действительно существует и разрешена для подобного использования).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы