我在这里做错了什么?也尝试引用 new_name ,仍然显示错误:pq:“$1”处或附近的语法错误 Postgres + go
func ChangeDBname(new_name string) {
oldname := "intern"
quoted := pq.QuoteIdentifier(oldname)
_, e1 := db.Exec(fmt.Sprintf("ALTER TABLE %s RENAME TO $1",quoted) , new_name)
if e1 != nil {
fmt.Println("Eroor in change name")
log.Fatal(e1.Error())
} else {
fmt.Println("Table name changed to", new_name)
}
}
表名称不是值。所以 PostgreSQL 解析器不希望这个 DDL 中有占位符。
检查这个:
db.Exec(fmt.Sprintf("ALTER TABLE %s RENAME TO %s",pq.QuoteIdentifier(oldname), pq.QuoteIdentifier(new_name)))
不要使用标识符作为 SQL 查询的参数。
试试这个:
oldName := "intern"
query := fmt.Sprintf("ALTER TABLE %s RENAME TO %s", pq.QuoteIdentifier(oldName), pq.QuoteIdentifier(newName))
_, err := db.Exec(query)
if err != nil {
fmt.Println("Error in change name")
log.Fatal(err)
} else {
fmt.Println("Table name changed to", newName)
}