Имя таблицы или столбца не может начинаться с numeric?
Я попытался создать таблицу с именем 15909434_user
синтаксис, как показано ниже:
CREATE TABLE 15909434_user ( ... )
это привело бы к ошибке, конечно. Затем, после того, как я попытался провести небольшое исследование с google, я нашел хорошую статью здесь, которые описывают:
когда вы создаете объект в PostgreSQL, вы даете этому объекту имя. Каждая таблица имеет имя, каждый столбец имеет имя, и так далее. PostgreSQL использует один тип данных для определения всех имен объектов:
name
тип.значение типа
name
- это строка 63 символов. Имя должно начинаться с буквы или подчеркивания; остальная часть строки может содержать буквы, цифры и подчеркивания....
если вы обнаружите, что вам нужно создать объект, который не соответствует этим правилам, вы можете заключить имя в двойные кавычки. Обертывание имени в кавычки создает идентификатор кавычки. Например, можно создать таблицу с именем "
3.14159
"-двойные кавычки обязательны, но на самом деле не являются частью имени (то есть они не сохраняются и не учитываются в 63-символьном пределе). ...
хорошо, теперь я знаю, как это решить, используя этот синтаксис (ставя двойную кавычку на имя таблицы):
CREATE TABLE "15909434_user" ( ... )
вы можете создать имя таблицы или столбца, например "15909434_user"
и user_15909434
, но не может создать имя таблицы или столбца, начинающееся с числового без использования двойных кавычек.
так тогда мне любопытно узнать причину этого (за исключением того, что это конвенция). Почему применяется эта конвенция? Это чтобы избежать чего-то вроде ограничения синтаксиса или другой причины?
заранее спасибо за внимание!
2 ответов
он исходит из исходных стандартов sql, которые через несколько слоев косвенности в конечном итоге попадают в начать идентификатором блок, который является одним из нескольких вещей, но в первую очередь это "простая латинская буква". Есть и другие вещи, которые можно использовать, но если вы хотите увидеть все детали, перейдите вhttp://en.wikipedia.org/wiki/SQL-92 и следуйте ссылкам на фактический стандарт (стр. 85 )
С не числовым идентификатором introducers делает написание парсера для декодирования sql для выполнения проще и быстрее, но цитируемая форма тоже прекрасна.
Edit: почему это проще для парсера?
проблема для парсера больше в SELECT
-list предложение, чем FROM
предложения. Select-list-это список выражений, выбранных из таблиц, и это очень гибко, позволяя простые имена столбцов и числовые выражения. Рассмотрим следующий:
SELECT 2e2 + 3.4 FROM ...
если имена таблиц и имена столбцов могут начинаться с цифры, это 2e2
имя столбца или действительное число (e
формат обычно разрешен в числовых литералах) и является 3.4
в таблице "3
" и столбце "4
" или это числовое значение 3.4
?
имея правило, что коды начать с простых латинских букв (и некоторых других конкретных вещей) означает, что парсер, который видит 2e2
можете быстро различать это будет числовое выражение, то же самое дело с 3.4
хотя можно было бы разработать схему, позволяющую использовать числовые ведущие символы, это может привести к еще более неясным правилам (мнению), поэтому это правило является хорошим решением. Если вы сначала разрешите цифры, тогда всегда будет нужно цитировать, что, возможно, не так "чисто".
отказ от ответственности, Я немного упростил вышеизложенное, игнорируя имена корреляции, чтобы сохранить его коротким. Я не совсем знаком с postgres, но дважды проверил вышеуказанный ответ против документации Oracle RDB и спецификации sql
Я бы предположил, что это связано с грамматикой.
SELECT 24*DAY_NUMBER as X from MY_TABLE
отлично, но неоднозначно, если в качестве имени столбца было разрешено 24.
добавление кавычек означает, что вы явно ссылаетесь на идентификатор, а не константу. Поэтому, чтобы использовать его, вам все равно придется избегать его.