postgresql - Dapper を使用した Postgres 12 でロールを作成する SQL ステートメントが失敗する

okwaves2024-01-25  187

Windows 上で Postgres 12 を実行しており、ORM として Dapper を使用する .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");

私は違いますパスワードをパラメータとして送信しても機能することは間違いありません。それをテストする必要があります。

共有 この回答を改善します フォローする

2020 年 9 月 3 日 12:04 に回答

ユーザー330315

ユーザー330315

0

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。