Скажем, у меня есть таблица клиентов, и я хотел бы сделать запрос с помощью необработанного SQL. Код ниже не работает:
List<Customer> customers = _db.Customer.FromSql("SELECT * FROM Customer").ToList();
Вылетает с кодом ошибки
'42P01: relation "customer" does not exist'
В определенных ситуациях Postgres будет создавать имена таблиц с учетом регистра, поэтому вам, возможно, придется ссылаться на имена таблиц таким образом. Это делается путем добавления кавычек вокруг имен таблиц, например: "Customer"
.
Возможно, вам также потребуется включить схему. Это должно работать:
List<Customer> customers = _db.Customer.FromSql("SELECT * FROM \"public\".\"Customer\"").ToList();
Предполагая, что ваше имя схемы является «общедоступным». В противном случае вместо этого введите имя вашей схемы.
Вы правы, конечно. Я просто оказался в ситуации с идентификаторами в кавычках, так как использовал мастер SQL Manager для создания базы данных.
Postgres не «производит» имена с учетом регистра — все это результат того, как вы написали оператор CREATE TABLE. Правила — достаточно ясно, но использование идентификаторов в кавычках — сильно обескуражен.