Как использовать переменную для получения другой таблицы с драйвером pgx?

Вот функция для получения французских пословиц:

func (r *proverbRepo) SelectFrByDegree(search string) (proverbs []domain.Proverb, err error) {
    rows, err := r.Db.Query(context.Background(), `SELECT ID, proverb
        FROM proverbs_fr 
        WHERE proverb % $1
        ORDER BY proverb <-> $1 DESC LIMIT 5
    `, search)
    if err != nil {
        return
    }

    for rows.Next() {
        var prov domain.Proverb
        err = rows.Scan(&prov.ID, &prov.Literal)
        if err != nil {
            return
        }
        proverbs = append(proverbs, prov)
    }
    return
}

Иногда я хочу получить другую таблицу пословиц из, скажем, таблицы proverbs_bzh. Можно ли получить другую таблицу с именем переменной?

SELECT * FROM $1

например...

1 ответ

Решение

Это не намерение связывать переменные. Его следует использовать для ввода данных при повторном использовании запроса. Если таблица неизвестна, запрос не может быть проанализирован и план выполнения повторно использован. Итак, ваш вариант - заменить строку.

Предупреждение: если имя таблицы получено из внешнего источника, убедитесь, что это правильный идентификатор (подсказка: защитить от SQL-инъекции)

Другие вопросы по тегам