2014-09-02 3 views
0

Я пытаюсь создать подготовленный оператор при использовании библиотеки sqlx Golang. Я хочу, чтобы имя таблицы быть bindVarPostgres sqlx подготовленный оператор с именем таблицы bindvar

stmt, err := stmtTx.Preparex("SELECT * FROM $1 WHERE question_id=$2;") 

Однако это дает мне ошибку синтаксиса вокруг /$1/. Могу ли я использовать привязку var для имени таблицы?

ответ

0

Могу ли я использовать привязку var для имени таблицы?

Нет, source of quote.

Аргументы могут быть использованы только в качестве значений данных, а не в качестве идентификаторов. Так, например, это разумно:

INSERT INTO mytable VALUES ($1); 

, но это не будет работать:

INSERT INTO $1 VALUES (42); 

Но вы можете использовать fmt.Sprintf для имени таблицы, если вы хотите, но оставьте $ 1, $ 2,. .. для значений данных.

+0

Но это 'fmt.Sprintf' понимать идентификатор в кавычках правила? Должна быть функция в интерфейсе базы данных специально для правильного цитирования идентификаторов. –

+0

@muistooshort Нет, только для имени таблицы. –

+0

Я думаю, вы неправильно поняли. Идентификаторы (такие как имена таблиц и столбцов) имеют правила цитирования и экранирования, отличные от правил для, скажем, строк. В интерфейсе базы данных должны быть функции, которые знают, как правильно указывать идентификаторы. –

Смежные вопросы