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.
часть ваших запросов.