如何为 pq 驱动程序准备一个带有动态 table 名称的 INSERT 语句

How to prepare an INSERT statement with a dynamic table name for the pq driver

如何为 pq postgres 驱动程序的准备好的 INSERT 语句使用动态 table 名称?目前我有一个测试 table 与 id SERIALvalues TEXT 列,这个声明失败了:

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

失败了:

pq: syntax error at or near ""

如果我只能对值使用占位符而不是 table 名称,是否有办法在此处使用 Sprintf? table 名称包含来自用户输入的 string,虽然我可以对其进行清理,但与让 Postgres return 在准备好的语句中出错相比,它会减慢插入速度。

要替换 table 名称变量,go sql 包尚未提供标准接口 (in progress)。

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

另请参阅 postgres parameter quoting 个示例。