Я не могу найти документацию, которая описывает допустимые форматы имени схемы PostgreSQL. Я знаю, что имя схемы не может:
- начать с числа
- есть пробелы
- начать с
pg_
Что еще? Куда мне смотреть?
Я не могу найти документацию, которая описывает допустимые форматы имени схемы PostgreSQL. Я знаю, что имя схемы не может:
pg_
Что еще? Куда мне смотреть?
Ответы:
В соответствии с прекрасной документацией , я думаю, это то, что вы ищете.
Идентификаторы SQL и ключевые слова должны начинаться с буквы (az, но также буквы с диакритическими знаками и нелатинскими буквами) или подчеркивания (_). Последующими символами в идентификаторе или ключевом слове могут быть буквы, подчеркивания, цифры (0-9) или знаки доллара ($). Обратите внимание, что знаки доллара не допускаются в идентификаторах в соответствии с буквой стандарта SQL, поэтому их использование может сделать приложения менее переносимыми ...
pg_
подчеркивание в этой связи, как Nathan C упомянуто .
Согласно документации , он также не может начинаться с pg_
того, что зарезервирован. Кроме того, это выглядит довольно свободно.
this-is schema
и это все еще было бы недопустимым именем схемы.
Правильный ответ предоставлен 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
. Е.