Postgres sqlx准备语句,表名为bindvar

Postgres sqlx准备语句,表名为bindvar,sql,postgresql,go,prepared-statement,Sql,Postgresql,Go,Prepared Statement,我试图使用Golang sqlx库创建一个准备好的语句。我希望表名为bindVar stmt, err := stmtTx.Preparex("SELECT * FROM $1 WHERE question_id=$2;") 但是,这给了我一个关于/$1/的语法错误。我可以不对表名使用绑定变量吗 我可以不对表名使用绑定变量吗 不, 参数只能用作数据值,不能用作标识符。 因此,例如,这是合理的: INSERT INTO mytable VALUES ($1); 但这是行不通的: INSERT

我试图使用Golang sqlx库创建一个准备好的语句。我希望表名为bindVar

stmt, err := stmtTx.Preparex("SELECT * FROM $1 WHERE question_id=$2;")
但是,这给了我一个关于
/$1/
的语法错误。我可以不对表名使用绑定变量吗

我可以不对表名使用绑定变量吗

不,

参数只能用作数据值,不能用作标识符。 因此,例如,这是合理的:

INSERT INTO mytable VALUES ($1);
但这是行不通的:

INSERT INTO $1 VALUES (42);

但是如果需要,您可以使用
fmt.Sprintf
作为表名,但保留$1、$2、。。。有关数据值。

有关一般解决方案,请参阅本页:


但是
fmt.Sprintf
了解标识符引用规则吗?数据库接口中应该有一个专门用于正确引用标识符的函数。@muistooshort否,仅用于表名。我想您误解了。标识符(如表名和列名)的引用和转义规则与字符串不同。数据库接口中应该有知道如何正确引用标识符的函数。我通常有简单的表名,所以我不确定转义规则。