嗨,我正在尝试使用 Go 中的 pgx/v5 驱动程序更改 postgres 中的用户密码
_, err = conn.Exec(context.Background(), "ALTER USER $1 WITH PASSWORD $2", username, password)
if err != nil {
fmt.Printf("Error altering user: %v\n", err)
return
}
当我执行它时,出现以下错误:
error: syntax error at or near "$1" (SQLSTATE 42601)
我尝试使用 psql 运行原始 sql 查询,它工作正常,但尝试在 go 中执行此操作失败。我可能做错了什么以及如何解决它?
参数引用可用于值仅。然而 ALTER USER role_name ...
中的
role_name是一个 name,或者更准确地说,是一个 identifier,它不是一个值。就像不可能做到
CREATE TABLE $1 ...
一样,出于同样的原因,也不可能做到 ALTER USER $1
。
根据
username
的来源,您可以简单地使用fmt.Sprintf
并将名称按原样插入到字符串中,或者您可以在postgres中声明一个函数来执行动态sql。