SQL 使用 Dapper 在 Postgres 12 上创建角色的语句失败
SQL statement to Create Role fails on Postgres 12 using Dapper
我是 运行 Windows 上的 Postgres 12,并且有一个使用 Dapper 作为 ORM 的 .Net Core 应用程序:
以下查询工作正常:
var sql = "SELECT 1 FROM pg_roles WHERE rolname=@un"
var result = con.ExecuteScalar<int>(sql, new {un = "someuser"});
现在我正在尝试执行一个 sql 语句来创建一个角色:
var sql = @"CREATE ROLE @un WITH LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION PASSWORD @pw";
con.Execute(sql, new {un = "someuser", pw = "somepass");
此查询失败,出现以下异常:Npgsql.PostgresException:'42601:“$1”处或附近的语法错误。
我在这里错过了什么?
角色的名称是一个标识符。您不能将标识符作为参数传递,您需要将名称作为常量值连接到 SQL 字符串中,以便执行此操作:
var sql = @"CREATE ROLE someuser WITH LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION PASSWORD @pw";
con.Execute(sql, new {pw = "somepass");
我也不完全确定将密码作为参数发送是否有效。您将需要对其进行测试。
我是 运行 Windows 上的 Postgres 12,并且有一个使用 Dapper 作为 ORM 的 .Net Core 应用程序:
以下查询工作正常:
var sql = "SELECT 1 FROM pg_roles WHERE rolname=@un"
var result = con.ExecuteScalar<int>(sql, new {un = "someuser"});
现在我正在尝试执行一个 sql 语句来创建一个角色:
var sql = @"CREATE ROLE @un WITH LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION PASSWORD @pw";
con.Execute(sql, new {un = "someuser", pw = "somepass");
此查询失败,出现以下异常:Npgsql.PostgresException:'42601:“$1”处或附近的语法错误。
我在这里错过了什么?
角色的名称是一个标识符。您不能将标识符作为参数传递,您需要将名称作为常量值连接到 SQL 字符串中,以便执行此操作:
var sql = @"CREATE ROLE someuser WITH LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION PASSWORD @pw";
con.Execute(sql, new {pw = "somepass");
我也不完全确定将密码作为参数发送是否有效。您将需要对其进行测试。