Именование объектов¶
В Picodata, благодаря ее реляционной природе, существует большое количество разнообразных объектов:
- таблицы
- индексы
- колонки
- роли
- пользователи
- процедуры
- и т.д.
Для всех них в SQL-командах выполняются общие правила и ограничения.
Ограничения имен¶
Имена объектов (таблиц, колонок, ролей, пользователей и т.д.) могут
содержать русские и английские буквы во всех регистрах, цифры (но не в
начале имени), а также символы дефиса (-
, U+2010) и нижнего
подчеркивания (_
, U+005F). Максимальная длина имени объекта ограничена
65000 байтов (не символов).
Совет
Использование псевдонимов и имен колонок не длиннее 23 байтов существенно повысит производительность планирования распределенного запроса.
Чувствительность к регистру¶
Если сами команды SQL нечувствительны к регистру (select
равнозначен
SELECT
), то регистр имен объектов имеет значение при условии, что
имена заключены в двойные кавычки. То есть, команды create table
"warehouse"...
и create table "Warehouse"...
создадут две разные
таблицы.
При разборе SQL содержимое двойных кавычек будет прочитано "как
написано". Как следствие, внутри двойных кавычек можно использовать
пробелы. В случае наименования без кавычек, имя объекта будет явно
приведено в нижний регистр. Например, команды create table
WAREHOUSE...
и create table "warehouse"...
создадут одну и ту же
таблицу warehouse
.
Поддержка схемы public¶
Для совместимости со сторонними СУБД, в первую очередь, с PostgreSQL, в
Picodata реализована поддержка эфемерной схемы данных public
(используется в PostgreSQL по умолчанию).
Имя public
можно указать в виде префикса для объектов, находящихся в
схеме данных (таблиц, индексов, процедур и т.д.). Примеры равнозначных
запросов:
SELECT * FROM _pico_table;
SELECT * FROM public._pico_table;
SELECT _pico_table.id FROM _pico_table;
SELECT public._pico_table.id FROM public._pico_table;
CREATE PROCEDURE public.proc (int, text, text) AS $$INSERT INTO warehouse VALUES($1, $2, $3)$$;
CREATE PROCEDURE "public".proc(int, text, text) AS $$INSERT INTO warehouse VALUES($1, $2, $3)$$;