Привет, я пытаюсь изменить пароль пользователя в postgres, используя драйвер pgx/v5 в Go.
_, 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)
Я попробовал выполнить необработанный запрос sql с помощью psql, и он работает нормально, но не смог сделать это на ходу. Что я могу делать не так и как это исправить?
Ссылки на параметры можно использовать только для значений. Однако имя_роли в ALTER USER role_name ...
— это имя или, точнее, идентификатор, это НЕ значение. Точно так же, как это невозможно сделать CREATE TABLE $1 ...
, по той же причине это невозможно сделать ALTER USER $1
.
В зависимости от того, откуда взялся username
, вы можете просто использовать fmt.Sprintf
и вставить имя в строку как есть, или вы можете объявить в postgres функцию, которая выполняет динамический sql.