Имя таблицы или столбца не может начинаться с числового?

Я попытался создать таблицу с именем 15909434_user с синтаксисом, как показано ниже:

CREATE TABLE 15909434_user ( ... )

Это, конечно, произвело бы ошибку. Затем, после того, как я попытался немного изучить Google, я нашел здесь хорошую статью которая описывает:

Когда вы создаете объект в PostgreSQL, вы даете этому объекту имя. Каждая таблица имеет имя, каждый столбец имеет имя и т.д. PostgreSQL использует один тип данных для определения всех имен объектов: тип name.

Значение типа name представляет собой строку из 63 или менее символов. Имя должно начинаться с буквы или подчеркивания; остальная часть строки может содержать буквы, цифры и символы подчеркивания.

...

Если вы обнаружите, что вам нужно создать объект, который не соответствует этим правилам, вы можете заключить его в двойные кавычки. Обозначение имени в кавычках создает цитируемый идентификатор. Например, вы можете создать таблицу с именем "3.14159" - нужны двойные кавычки, но на самом деле они не являются частью имени (то есть они не сохраняются и не учитываются с 63-символьным лимитом)....

Хорошо, теперь я знаю, как это решить, используя этот синтаксис (ставя двойную кавычку в имя таблицы):

CREATE TABLE "15909434_user" ( ... )

Вы можете создать имя таблицы или столбца, такое как "15909434_user", а также user_15909434, но не можете создавать имя таблицы или столбца с помощью numeric без использования двойных кавычек.

Итак, мне интересно узнать причину этого (за исключением конвенции). Почему это соглашение применяется? Следует избегать чего-то вроде ограничения синтаксиса или по другой причине?

Заранее благодарим за внимание!

Ответ 1

Он исходит из исходных стандартов sql, которые через несколько уровней косвенности в конечном итоге попадают в блок идентификатор start, что является одной из нескольких вещей, но в первую очередь это "простая латинская буква". Есть и другие вещи, которые можно использовать, но если вы хотите увидеть все подробности, перейдите в http://en.wikipedia.org/wiki/SQL-92 и следуйте ссылкам на фактический стандарт (стр. 85 )

Наличие носителей с числовым идентификатором делает запись синтаксического анализатора для более простого и быстрого декодирования sql для выполнения, но цитата также прекрасна.


Изменить: что проще для синтаксического анализатора?

Проблема для синтаксического анализа больше в разделе SELECT -list, чем предложение FROM. Список выбора - это список выражений, выбранных из таблиц, и это очень гибко, что позволяет использовать простые имена столбцов и числовые выражения. Рассмотрим следующее:

SELECT 2e2 + 3.4 FROM ...

Если имена таблиц и имена столбцов могут начинаться с числовых значений, это 2e2 имя столбца или допустимое число (формат e обычно разрешен в числовых литералах) и 3.4 таблица "3" и столбец "4" или это числовое значение 3.4?

Имея правило, что идентификаторы начинаются с простых латинских букв (и некоторых других конкретных вещей), означает, что синтаксический анализатор, который видит 2e2, может быстро распознать это, будет числовым выражением, t25 >

Хотя можно было бы разработать схему, позволяющую вводить числовые символы, это может привести к еще более неясным правилам (мнению), поэтому это правило является хорошим решением. Если вы сначала указали цифры, тогда всегда нужно было бы цитировать, что, возможно, не было "чистым".


Отказ от ответственности. Я немного упростил это, проигнорировав имена исправлений, чтобы он был коротким. Я не полностью знаком с postgres, но дважды проверил вышеприведенный ответ на документацию Oracle RDB и спецификацию sql

Ответ 2

Я бы предположил, что это связано с грамматикой.

SELECT 24*DAY_NUMBER as X from MY_TABLE

является точным, но неоднозначным, если 24 разрешено в качестве имени столбца.

Добавление котировок означает, что вы явно ссылаетесь на идентификатор, а не на константу. Поэтому, чтобы использовать его, вы всегда должны избегать его.