Я пытаюсь добавить значение перечислимому типу в postgreSQL-9.6, и мне сложно понять, что я делаю неправильно.
var tc = new NpgsqlCommand(@"ALTER TYPE attributeName ADD VALUE IF NOT EXISTS
:a", conn);
//tc.Parameters.Add(new NpgsqlParameter("a", NpgsqlDbType.Text));
//tc.Parameters[0].Value = "test";
tc.Parameters.AddWithValue("a", NpgsqlDbType.Text, "test");
tc.ExecuteNonQuery();
Я попробовал закомментированный код и текущую версию, и оба результата привели к исключению. Подробная информация об исключении:
$exception {"42601: syntax error at or near \"$1\""}
Я понимаю, что $ 1 относится к тексту, передаваемому через параметр «a», но я не понимаю, почему возникает проблема или как ее исправить. В документации PostgreSQL говорится, что ALTER TYPE нельзя выполнить в блоке транзакции, но, насколько я могу судить, Npgsql не запускает транзакции автоматически, так что это не должно быть проблемой. Если я выполню другую команду SQL с аналогичным синтаксисом, например:
var tc = new NpgsqlCommand(@"INSERT INTO test VALUES (:a)", conn);
программа работает безотказно. Кроме того, если я наберу команду непосредственно в оболочке psql, например:
ALTER TYPE attributeName ADD VALUE IF NOT EXISTS 'test';
он работает как положено. Может ли кто-нибудь помочь мне понять, что я делаю не так? Спасибо.
attributeName
. - person 500 - Internal Server Error   schedule 17.05.2017