Postgresql запросы в NPOCO

Я довольно новичок в Пространстве NPOCO + PostgreSQL, так как я решил остаться вне SQL Server в течение некоторого времени.

Моя проблема в том, что обычно пишу такие запросы в NPOCO

   database.Execute("select userId from Users");

И все прекрасно работает в мире SQL Server. Приходя в мир PostGreSQL, я сталкиваюсь с запросами, которые выглядят немного странно

  SELECT "UserId", from dbo."Users"

Теперь мне любопытно узнать, как можно использовать PostgreSQL Queries в NPOCO, видя, что имена столбцов и таблиц должны быть в кавычках

заранее спасибо

1 ответ

Имена столбцов и таблиц в postgres должны быть заключены в кавычки, только если они содержат заглавные или специальные символы. То есть, по умолчанию, синтаксический анализатор postgres SQL принудительно вводит строчные буквы для всех имен без кавычек. Это делает вещи немного более удобными для интерактивного использования, но гораздо менее удобными, если у вас есть программное обеспечение, автоматически генерирующее имена таблиц и столбцов с заглавными буквами, пробелами или эмодзи.

Другими словами, если имя таблицы users и имя столбца useridтогда запрос select userid from users будет работать просто отлично. Это только когда имя таблицы Users что вы должны начать цитировать.

Другая разница в sql, которую я заметил, указывает dbo схемы. Postgres поддерживает схемы (также известные как "пространства имен") и имеет для них доступный путь поиска. Он также имеет стандартную "публичную" схему. По умолчанию search_path является:

"$user", public

Что просто означает, что если вы select * from foo как имя пользователя bob, postgres проверит bob.foo а потом public.foo и использовать все, что он находит в первую очередь как foo, Вы можете изменить search_path если вы хотите:

SET search_path to dbo,public;

И это позволит вам пропуститьdbo.часть ваших запросов.

Другие вопросы по тегам