A instrução SQL para criar função falha no Postgres 12 usando o Dapper
Sep 03 2020
Estou executando o Postgres 12 no Windows e tenho um aplicativo .Net Core que usa o Dapper como um ORM:
A consulta a seguir funciona bem:
var sql = "SELECT 1 FROM pg_roles WHERE rolname=@un"
var result = con.ExecuteScalar<int>(sql, new {un = "someuser"});
Agora estou tentando executar uma instrução sql que criaria uma função:
var sql = @"CREATE ROLE @un WITH LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION PASSWORD @pw";
con.Execute(sql, new {un = "someuser", pw = "somepass");
Esta consulta falha com a seguinte exceção: Npgsql.PostgresException: '42601: erro de sintaxe em ou próximo a "$1"'.
O que estou perdendo aqui?
Respostas
2 a_horse_with_no_name Sep 03 2020 at 19:04
O nome de uma função é um identificador. Você não pode passar identificadores como parâmetros, você precisará concatenar o nome como um valor constante na string SQL, para que você execute isso:
var sql = @"CREATE ROLE someuser WITH LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION PASSWORD @pw";
con.Execute(sql, new {pw = "somepass");
Também não tenho certeza de que enviar a senha como parâmetro funciona. Você vai precisar testar isso.
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?