MyTetra Share
Делитесь знаниями!
Как правильно использовать разный регистр букв и кавычки в именах объектов PostgreSQL?
Время создания: 19.10.2023 11:21
Текстовые метки: postgresql, sql, регистр, буквы, case sensitive, кавычки, quotes, объект, элемент, структура, имя, имена, команда, база данных, таблица, поле
Раздел: Компьютер - Программирование - SQL - PostgreSQL
Запись: xintrea/mytetra_syncro/master/base/16977036629mbgvns4zx/text.html на raw.github.com

Лучше не использовать разный регистр букв в наименовании объектов PostgreSQL. А кавычки лучше использовать только в тех случаях, когда есть ясное понимание, для чего они нужны. Ниже рассказывается об этих тонкостях.


Дело в том, что синтаксис SQL позволяет писать имена объектов (имена баз данных, таблиц, полей, и т.д.) как в двойных кавычках, так и без них. Проблема в том, что эти два разных написания трактуются движком SQL по-разному.



Если имя объекта написано в кавычках, то такое имя будет рассматриваться как регистро-зависимое (case sensitive). Если же имя объекта было написано без кавычек, то вначале такое имя будет принудительно преобразовано в нижний регистр, и только после этого использовано.



Таким образом, следующие две команды создадут разные таблицы:



CREATE TABLE ourFilms (

code char(5),

title varchar(40)

);


CREATE TABLE "ourFilms" (

code char(5),

title varchar(40)

);



В первом случае будет создана таблица ourfilms, а во втором - ourFilms. И такие две таблицы могут одновременно существовать в PostgreSQL. И самое неприятное состоит в том, что имя, визуально имеющее большие буквы в названии, без кавычек будет приводить к обращению по имени, состоящему из маленьких букв. Это дичь дичайшая, но таковы реалии PostgreSQL.


Казалось бы, надо всегда использовать кавычки для всех имен объектов. Но во-первых, кто за этим будет следить, если проектом занимается несколько человек? С точки зрения синтаксиса, запросы с кавычками и без кавычек совершенно валидны. А во-вторых, SQL-запросы обычно размещаются в коде какого-либо языка программирования. И при написании строк с SQL-запросами придется каким-то образом экранировать кавычки, так как сама строка запроса тоже пишется в двойных кавычках:



sqlCommand="SELECT * FROM public.\"Users\" WHERE \"UserName\"='"+UserName.Text+"'";



Все эти проблемы приводят к тому, что использовать имена SQL-объектов с кавычками и большими буквами в PostgreSQL крайне нежелательно. Поэтому во многих фреймверках есть требования к SQL-коду (code guide), в котором сказано, что:



  • имена объектов должны писаться только в нижнем регистре;
  • при написании имен объектов не следует использовать двойные кавычки;
  • если имя состоит из двух слов, между словами следует использовать подчеркивание.



Таким образом, имя таблицы с фильмами должно быть не ourfilms и не ourFilms, а our_films. Это упростит написание SQL-запросов и исключит появление возможных ошибок, связанных с различным регистром букв в зависимости от того, написано ли имя в кавычках или нет.


Однако, у этого правила есть две тонкости.



1. Согласно документации PostgreSQL, двойные кавычки в именах объектов следует использовать только в одном случае: если имя объекта совпадает с каким-либо ключевым словом SQL-синтаксиса. Все, что написано в двойных кавычках, автоматически рассматривается как имя объекта и движок не пытается в кавычках искать SQL-синтаксис. Например, для работы с таблицей с именем select (ну вот такое имя захотел дать программист), это имя надо заключать в кавычки:


SELECT * FROM "select";


И всегда существует вероятность, что имя объекта может совпасть с каким-то малоизвестным ключевым словом PostgreSQL, не стоит об этом забывать.


2. Если пишется система, которая должна работать на разных движках баз данных, то следует учитывать, что по общему стандарту SQL все имена, написанные без кавычек, будут автоматически приводиться к верхнему регистру! И с этой точки зрения, все имена объектов всегда необходимо заключать в двойные кавычки.



В общем, всегда при выборе стиля написания имен SQL-объектов надо исходить из задачи.



  • Если пишется что-то для внутреннего использования, то проще всего писать в нижнем регистре с подчеркиванием между словами и без кавычек. Кавычки используются только если имя совпадает с ключевым словом SQL, но такие ситуации в нейминге лучше избегать.
  • Если предполагается развивать портативное приложение, то тогда имена пишутся в нижем регистре с подчеркиванием между слов, но обязательно заключаются в кавычки.



Вот такие особенности преобразования имен в PostgreSQL и SQL нужно учитывать в своей работе.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования