Каковы допустимые форматы имени схемы PostgreSQL?

14

Я не могу найти документацию, которая описывает допустимые форматы имени схемы PostgreSQL. Я знаю, что имя схемы не может:

  • начать с числа
  • есть пробелы
  • начать с pg_

Что еще? Куда мне смотреть?

Рамон Тайаг
источник

Ответы:

17

В соответствии с прекрасной документацией , я думаю, это то, что вы ищете.

Идентификаторы SQL и ключевые слова должны начинаться с буквы (az, но также буквы с диакритическими знаками и нелатинскими буквами) или подчеркивания (_). Последующими символами в идентификаторе или ключевом слове могут быть буквы, подчеркивания, цифры (0-9) или знаки доллара ($). Обратите внимание, что знаки доллара не допускаются в идентификаторах в соответствии с буквой стандарта SQL, поэтому их использование может сделать приложения менее переносимыми ...

gsiems
источник
Спасибо. Я буду следовать этим инструкциям и посмотрю, являются ли они действительными именами схем. Если так, то я приму это.
Может хотите добавить pg_подчеркивание в этой связи, как Nathan C упомянуто .
Рамон Тайаг
5

Согласно документации , он также не может начинаться с pg_того, что зарезервирован. Кроме того, это выглядит довольно свободно.

Натан С
источник
Спасибо, я добавлю это в список того, что схемы не могут быть названы. К сожалению, это не единственное правило, по-видимому. Я мог бы назвать это, this-is schemaи это все еще было бы недопустимым именем схемы.
3
@Ramon: схема is -is или this-is , строго говоря, является допустимым именем схемы. Вы, кажется, путаете то, с чем действительно, когда это должно быть указано .
Даниэль Верите
Да, вы, вероятно, правы. Позвольте мне взглянуть на это.
Рамон Тайаг
3

Правильный ответ предоставлен gsiems. Тем не менее, я хочу отметить, что в PostgreSQL есть правила для идентификаторов в кавычках, которые вы можете иметь в виду. «Идентификаторы в кавычках могут содержать любой символ, кроме символа с нулевым кодом. (Чтобы включить двойные кавычки, напишите две двойные кавычки.)» ... Существуют также некоторые ограничения на случай, на который вы можете захотеть посмотреть.

Поэтому, если вы собираетесь заключать в кавычки свои идентификаторы, тогда вы можете использовать любой символ, который хотите (за исключением \ 0). Но если вы не цитируете свои идентификаторы, вы должны следовать правилам, изложенным на этой странице.

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

ОБНОВИТЬ:

В качестве примера (не относится конкретно к идентификаторам схемы, но в равной степени применимо к ним):

    DROP TABLE "tbluser"; -- assuming it exists
    DROP TABLE "TBLUSER"; -- assuming it exists; incidentally, they are two different tables
    CREATE TABLE "TBLUSER" ( username text ); 
    INSERT INTO "TBLUSER" VALUES ( 'joe' ); 
    SELECT * FROM TBLUSER; -- this returns an error that the tbluser relation does not exist
    SELECT * FROM "TBLUSER"; -- works fine

Это может быть ожидаемым поведением для тех, кто имеет опыт работы с PostgreSQL (и, возможно, стандартами SQL), но тот, кто не знаком с PG и работает с точки зрения других серверов баз данных (например, SQL Server или Oracle), может столкнуться с этим поведением и Интересно, почему таблица, которую они только что создали, отсутствует.

Возможно, некоторые руководства рекомендуют не использовать заключенные в кавычки идентификаторы, но в том-то и дело, что заключенные в кавычки идентификаторы доступны для использования и могут быть использованы, и, кроме того, многие пакеты устанавливают политику всегда использовать заключенные в кавычки идентификаторы при создании и доступе к отношениям, которые не являются полностью строчные, например, PGAdmin III.

Например, это сценарий, сгенерированный PGAdmin III при создании таблицы через пользовательский интерфейс:

    CREATE TABLE public."TBLUSER"
    (
      username text
    ) 
    WITH (
      OIDS = FALSE
    )
    ;

Таким образом, единственный способ , которым пользователь может получить доступ к этой таблице в запросе со ссылки на его цитируемый идентификатор, то есть "TBLUSER". Попытка получить доступ к этой таблице в запросе с не заключенным в кавычки идентификатором приведет к невозможности найти отношение, т TBLUSER. Е.

efesar
источник
Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .
Пол Уайт 9