2.3. Создание таблицы #
Вы можете создать таблицу, указав её имя и перечислив все имена столбцов и их типы.
Помимо сегментированных таблиц и глобальных объектов Postgres Pro Shardman поддерживает создание стандартных объектов БД из PostgreSQL, Postgres Pro Standard и Postgres Pro Enterprise. Эти объекты можно создать только на текущем узле. Данная функциональность может быть полезна при постепенной миграции с монолитной БД на распределённый Postgres Pro Shardman.
При выполнении операций над сегментированными и локальными таблицами действуют следующие ограничения:
Локальные таблицы могут быть дочерними по отношению к сегментированным таблицам. Их соединение допустимо только на узле, где размещена локальная таблица.
Сегментированные таблицы не могут быть дочерними по отношению к локальным таблицам.
Временные локальные таблицы не поддерживают участие в распределённых транзакциях.
2.3.1. Создание сегментированных таблиц #
Создайте сегментированную таблицу и проверьте, всё ли работает корректно.
postgres=# create table x(id int primary key, t text) with (distributed_by='id',num_parts=2);
CREATE TABLE
postgres=# \d
List of relations
Schema | Name | Type | Owner
--------+---------+-------------------+----------
public | x | partitioned table | postgres
public | x_0 | table | postgres
public | x_1_fdw | foreign table | postgres
(3 rows)
postgres=# \d x_0
Table "public.x_0"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | not null |
t | text | | |
Partition of: x FOR VALUES WITH (modulus 2, remainder 0)
Indexes:
"x_0_pkey" PRIMARY KEY, btree (id)
postgres=# \d x_1_fdw
Foreign table "public.x_1_fdw"
Column | Type | Collation | Nullable | Default | FDW options
--------+---------+-----------+----------+---------+-------------
id | integer | | not null | |
t | text | | | |
Partition of: x FOR VALUES WITH (modulus 2, remainder 1)
Server: shardman_rg_2
FDW options: (table_name 'x_1')
postgres=# insert into x values (1,'t'),(2,'t'),(3,'t');
INSERT 0 3
postgres=# select * from x_0;
id | t
----+---
1 | t
2 | t
(2 rows)
postgres=# select * from x_1_fdw;
id | t
----+---
3 | t
(1 row)Всё работает так, как и ожидалось.
2.3.2. Создание обычных таблиц #
Для обычных таблиц:
CREATE TABLE weather (
city varchar(80),
temp_lo int, -- минимальная температура дня
temp_hi int, -- максимальная температура дня
prcp real, -- уровень осадков
date date
); Весь этот текст можно ввести в psql вместе с символами перевода строк. psql понимает, что команда продолжается до точки с запятой.
В командах SQL можно свободно использовать пробельные символы (пробелы, табуляции и переводы строк). Это значит, что вы можете ввести команду, выровняв её по-другому или даже уместив в одной строке. Два минуса («--») обозначают начало комментария. Всё, что идёт за ними до конца строки, игнорируется. SQL не чувствителен к регистру в ключевых словах и идентификаторах, за исключением идентификаторов, взятых в кавычки (в данном случае это не так).
varchar(80) определяет тип данных, допускающий хранение произвольных символьных строк длиной до 80 символов. int — обычный целочисленный тип. real — тип для хранения чисел с плавающей точкой одинарной точности. date — тип даты. (Да, столбец типа date также называется date. Это может быть удобно или вводить в заблуждение — как посмотреть.)
Postgres Pro Shardman поддерживает стандартные типы SQL: int, smallint, real, double precision, char(, N)varchar(, N)date, time, timestamp и interval, а также другие универсальные типы и богатый набор геометрических типов. Кроме того, Postgres Pro Shardman можно расширять, создавая набор собственных типов данных. Как следствие, имена типов не являются ключевыми словами в данной записи, кроме тех случаев, когда это требуется для реализации особых конструкций стандарта SQL.
Во втором примере мы сохраним в таблице города и их географическое положение:
CREATE TABLE cities (
name varchar(80),
location point
); Здесь point — пример специфического типа данных Postgres Pro Shardman.
Наконец, следует сказать, что если вам больше не нужна какая-либо таблица, или вы хотите пересоздать её по-другому, вы можете удалить её, используя следующую команду:
DROP TABLE имя_таблицы;