Npgsql.PostgresException: «42P01: отношение« таблица »не существует» - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь автоматически сгенерировать операторы 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();

1 Ответ

0 голосов
/ 30 декабря 2018

Попробуйте квалифицировать схему buyer в функции триггера.

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 "TBP_ERA".buyer where buyer.ordercompleted=0 order by orderedat asc fetch first 1 rows only;
return null;
END;
$function$
;
...