Имя таблицы или столбца не может начинаться с числового?
Я попытался создать таблицу с именем 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 разрешено в качестве имени столбца.
Добавление котировок означает, что вы явно ссылаетесь на идентификатор, а не на константу. Поэтому, чтобы использовать его, вы всегда должны избегать его.