Я пытаюсь автоматически сгенерировать операторы INSERT, чтобы заполнить таблицу из заданного списка имен и продуктов, используя c # и Npgsql.Все работало нормально, поэтому я решил добавить пару триггеров, которые необходимы для этого проекта.Триггеры относительно просты, но они работали без ошибок, тестируя их на консоли sql.Затем, когда я, наконец, подумал, что закончил с назначением, я еще раз протестировал его с помощью метода автоматического заполнения в C #. Я получил это как ошибку:
Npgsql.PostgresException: '42P01: отношение«Покупатель» не существует »
Я решил еще раз протестировать его на консоли, используя точно такой же оператор INSERT, и опять-таки, он работал с самого начала.После хороших 3-4 часов, потраченных на поиск и поиск ответов «почти нет», я отключил все триггеры, а затем скрипт c # работал без проблем.
Итак, чтобы подвести итог, запрос работает с триггерами безупречно при вводе в консоли, но при использовании в C # он не может найти таблицу ?.
CREATE OR REPLACE FUNCTION "TBP_ERA".trigger_dohvati_prvi_datum()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
insert into "TBP_ERA".order(orderer,productname,productquantity)
select buyer.id,buyer.productname,buyer.productquantity from buyer where buyer.ordercompleted=0 order by orderedat asc fetch first 1 rows only;
return null;
END;
$function$
;
И сам триггер:
create
trigger dohvati_datum after insert
on
"TBP_ERA".buyer for each row execute procedure trigger_dohvati_prvi_datum();
РЕДАКТИРОВАТЬ: C # часть кода INSERT
connection.Open();
NpgsqlCommand command = new NpgsqlCommand("INSERT INTO \"TBP_ERA\".buyer(ID,name,productname,productquantity,ordercompleted)" +
" VALUES(default,'" + buyer.Name + "','" + buyer.ProductName + "'," + buyer.ProductQuantity+",0);", connection);
try
{
command.ExecuteNonQuery();
}
catch (NpgsqlException ex)
{
string nekej = ex.ToString();
throw;
}
connection.Close();