【问题标题】:SQL statement to Create Role fails on Postgres 12 using Dapper使用 Dapper 在 Postgres 12 上创建角色的 SQL 语句失败
【发布时间】:2020-09-03 20:04:26
【问题描述】:

我在 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: syntax error at or near "$1"'。

我在这里错过了什么?

【问题讨论】:

    标签: sql postgresql .net-core dapper


    【解决方案1】:

    角色的名称是一个标识符。您不能将标识符作为参数传递,您需要将名称作为常量值连接到 SQL 字符串中,以便执行以下操作:

    var sql = @"CREATE ROLE someuser WITH LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION PASSWORD @pw";     
    con.Execute(sql, new {pw = "somepass");
    

    我也不完全确定将密码作为参数发送是否有效。您需要对此进行测试。

    【讨论】:

      猜你喜欢
      • 2017-10-09
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-24
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 2013-03-13
      相关资源
      最近更新 更多