CREATE TABLE (создание таблицы)
Важно
Поддержка синтаксиса PostgreSQL в YDB находится в разработке. Использовать её в production окружениях не рекомендуется. Запросы в PostgreSQL могут исполняться до нескольких раз медленнее по сравнению с аналогичными запросами на YQL.
Основной сценарий, который можно тестировать — выполнение аналитических запросов к хранимым в YDB данным.
Инструкция CREATE TABLE
предназначена для создания пустой таблицы в текущей базе данных. Синтаксис команды:
CREATE [TEMPORARY | TEMP] TABLE <table name> (
<column name> <column data type> [COLLATE][PRIMARY KEY]
[CONSTRAINT <constraint name> [PRIMARY KEY <column name>],
...]
);
При создании таблицы можно задать:
-
Тип таблицы:
TEMPORARY
/TEMP
– временная таблица, которая автоматически удаляется при завершении сессии. Если параметр не задан (оставлен пустым) – создается постоянная таблица. Любые индексы, созданные во временных таблицах, также будут удалены при завершении сессиии, следовательно они тоже являются временными. Допускается существование временной таблицы и постоянной таблицы с одинаковым именем, в этом случае будет выбрана временная таблица. -
Имя таблицы:
<table name>
– можно использовать английские буквы в нижнем регистре, цифры, нижнее подчёркивание и знак доллара ($). Например, название таблицы "People" будет сохранено как "people"; -
Имя столбца/колонки:
– действую такие же правила нейминга как и для имен таблиц; -
Тип данных:
– указываются стандартные типы данных PostgreSQL; -
Правило сортировки:
COLLATE
– правила сортировки позволяют устанавливать порядок сортировки и особенности классификации символов в отдельных столбцах или даже при выполнении отдельных операций. К сортируемым типам относятся:text
,varchar
иchar
. Можно указать локализацию (ru_RU
,en_US
), используемую для определения правил сортировки и сравнения строк в указанных столбцах. -
Первичный ключ таблицы:
PRIMARY KEY
– обязательное условие при создании таблицы в режиме совместимости YDB с PostgreSQL; -
Ограничения на уровне таблицы (может быть множество, перечисляются через запятую):
CONSTRAINT
– данный тип ограничения используется как альтернативный синтаксис записи поколоночным ограничениям, или когда нужно задать одинаковые условия ограничения на несколько колонок. Для указания ограничения необходимо указать:- Ключевое слово
CONSTRAINT
; - Имя ограничения
. Правила создания идентификатора для ограничения такие же, как у названия таблиц и названия колонок; - Ограничение. Например,
PRIMARY KEY (<column name>)
.
- Ключевое слово
Создание двух таблиц с первичным ключом и автоинкрементом
Таблица |
Таблица |
|
|
В этом примере мы использовали псевдотип данных Serial
– это удобный и простой способ создать автоинкремент, который автоматически увеличивается на 1 при добавлении новой строки в таблицу.
Создание таблицы с ограничениями
CREATE TABLE people (
id Serial,
name Text NOT NULL,
lastname Text NOT NULL,
age Int,
country Text,
state Text,
city Text,
birthday Date,
sex Text NOT NULL,
social_card_number Int,
CONSTRAINT pk PRIMARY KEY(id)
);
В этом примере мы создали таблицу "people" с ограничением (блоком CONSTRAINT
), в котором задали первичный ключ (PRIMARY KEY
) для колонки "id". Альтернативная запись может выглядеть так: PRIMARY KEY(id)
без указания ключевого слова CONSTRAINT
.
Создание временной таблицы
CREATE TEMPORARY TABLE people (
id serial PRIMARY KEY,
name TEXT NOT NULL
);
Временная таблица задается через ключевые слова TEMPORARY
или TEMP
.
Создание таблицы с условиями сортировки
CREATE TABLE people (
id Serial PRIMARY KEY,
name Text COLLATE "en_US",
lastname Text COLLATE "en_US",
age Int,
country Text,
state Text,
city Text,
birthday Date,
sex Text,
social_card_number Int
);
В этом примере колонки "name" и "lastname" используют сортировку с en_US
локализацией.
Примечание
В отличии от PostgreSQL, в YDB с используются оптимистические блокировки. Это значит, что транзакции проверяют условия выполнения необходимых блокировок в конце своей работы, а не в начале. Если за время выполнения транзакции блокировка была нарушена – такая транзакция завершится ошибкой Transaction locks invalidated
. В этом случае можно попробовать выполнить аналогичную транзакцию снова.