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

时间:2018-03-29 15:17:31

标签: go pq

如何为pq postgres驱动程序准备好的INSERT语句使用动态表名?目前我已经有一个包含id SERIALvalues TEXT列的测试表,而且此声明失败了:

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

那是失败的:

  

pq:语法错误等于或接近" $ 1"

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

1 个答案:

答案 0 :(得分:1)

要替换表名变量,请使用sql包来提供标准接口(in progress)。

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

另见postgres parameter quoting示例。