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>],
...]

);

При создании таблицы можно задать:

  1. Тип таблицы: TEMPORARY / TEMP – временная таблица, которая автоматически удаляется при завершении сессии. Если параметр не задан (оставлен пустым) – создается постоянная таблица. Любые индексы, созданные во временных таблицах, также будут удалены при завершении сессиии, следовательно они тоже являются временными. Допускается существование временной таблицы и постоянной таблицы с одинаковым именем, в этом случае будет выбрана временная таблица.

  2. Имя таблицы: <table name> – можно использовать английские буквы в нижнем регистре, цифры, нижнее подчёркивание и знак доллара ($). Например, название таблицы "People" будет сохранено как "people";

  3. Имя столбца/колонки: – действую такие же правила нейминга как и для имен таблиц;

  4. Тип данных: – указываются стандартные типы данных PostgreSQL;

  5. Правило сортировки: COLLATEправила сортировки позволяют устанавливать порядок сортировки и особенности классификации символов в отдельных столбцах или даже при выполнении отдельных операций. К сортируемым типам относятся: text, varchar и char. Можно указать локализацию (ru_RU, en_US), используемую для определения правил сортировки и сравнения строк в указанных столбцах.

  6. Первичный ключ таблицы: PRIMARY KEY – обязательное условие при создании таблицы в режиме совместимости YDB с PostgreSQL;

  7. Ограничения на уровне таблицы (может быть множество, перечисляются через запятую): CONSTRAINT – данный тип ограничения используется как альтернативный синтаксис записи поколоночным ограничениям, или когда нужно задать одинаковые условия ограничения на несколько колонок. Для указания ограничения необходимо указать:

    • Ключевое слово CONSTRAINT;
    • Имя ограничения . Правила создания идентификатора для ограничения такие же, как у названия таблиц и названия колонок;
    • Ограничение. Например, PRIMARY KEY (<column name>).

Создание двух таблиц с первичным ключом и автоинкрементом

Таблица people

Таблица social_card

CREATE TABLE people (
    id                 Serial PRIMARY KEY,
    name               Text,
    lastname           Text,
    age                Int,
    country            Text,
    state              Text,
    city               Text,
    birthday           Date,
    sex                Text,
    social_card_number Int
);
CREATE TABLE social_card (
    id                   Serial PRIMARY KEY,
    social_card_number   Int,
    card_holder_name     Text,
    card_holder_lastname Text,
    issue                Date,
    expiry               Date,
    issuing_authority    Text,
    category             Text
);

В этом примере мы использовали псевдотип данных 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. В этом случае можно попробовать выполнить аналогичную транзакцию снова.