如何为 pq 驱动程序准备具有动态表名的 INSERT 语句

Esc*_*her 6 go pq

如何为INSERTpq postgres 驱动程序的准备语句使用动态表名称?目前我有一个包含id SERIALvalues TEXT列的测试表,并且此语句失败:

stmt, err := db.Prepare("INSERT INTO $1(values) VALUES($2);")
if err != nil {
    log.Fatal(err)
}
Run Code Online (Sandbox Code Playgroud)

这是失败的:

pq:“$1”处或附近的语法错误

如果我只能使用值的占位符而不是表名,有没有办法Sprintf在这里使用?表名包含string来自用户输入的内容,尽管我可以对其进行清理,但与让 Postgres 在准备好的语句上返回错误相比,它会稍微减慢插入速度。

Mar*_*ark 4

为了替换表名变量,go sql 包尚未提供标准接口(正在进行中)。

您也许可以使用数据库驱动程序特定的引用函数,例如:QuoteIdentifier

另请参阅postgres 参数引用示例。