Обзор таблиц
Таблица — это основной объект для хранения информации в базе данных. Таблицы Greengage DB идентичны таблицам в любой реляционной СУБД, за исключением распределения строк по различным сегментам кластера для параллельной обработки и масштабируемости. Подробнее о базовых концепциях работы с таблицами вы можете узнать в соответствующем разделе документации PostgreSQL: Table Basics.
Обзор создания таблиц
Описание таблицы
Команда CREATE TABLE создает таблицу и определяет ее структуру.
При создании таблицы необходимо указать:
-
Типы данных столбцов
Типы данных определяют, какие значения могут храниться в столбцах.
-
Ограничения таблиц и столбцов
Ограничения позволяют задать дополнительные требования к значениям в таблице или ее столбцах.
-
Тип хранения таблицы
СУБД Greengage поддерживает несколько моделей хранения таблиц, оптимизированных для определенных типов нагрузок, таких как OLTP или OLAP. Узнайте подробнее в статье Типы таблиц.
-
Политика распределения данных
Распределение данных в Greengage DB обеспечивает параллельную обработку за счет размещения данных таблицы на различных сегментах кластера. Узнайте подробнее в статье Распределение данных.
-
Сжатие данных
Сжатие данных позволяет уменьшить их объем и повысить эффективность операций ввода-вывода. Узнайте подробнее в статье Сжатие данных.
-
Стратегия партиционирования таблиц
Партиционирование дает возможность разбить большую таблицу на небольшие части, что повышает производительность запросов и позволяет оптимизировать хранение исторических данных, размещая их в более медленном хранилище. Узнайте подробнее в статье Партиционирование: классический синтаксис.
Команда CREATE TABLE AS позволяет создать новую таблицу на основе результатов запроса.
Синтаксис CREATE TABLE
Чтобы создать пустую таблицу в текущей базе данных и определить структуру таблицы, используйте команду CREATE TABLE.
Пользователь, выполняющий эту команду, становится владельцем таблицы.
Ниже описан упрощенный синтаксис команды CREATE TABLE.
CREATE [ TEMP ] TABLE <table_name>
(
[ { <column_name> <data_type> [<column_constraint> [ ... ] ]
| <table_constraint>
| LIKE <source_table> [ <like_option> ... ] }
[, ... ]
]
)
[ INHERITS ( <parent_table> [, ... ] ) ]
[ USING <access_method> ]
[ WITH ( <storage_table_directive> [, ... ] ) ]
[ DISTRIBUTED BY (<column_name> [<opclass>], [ ... ] )
| DISTRIBUTED RANDOMLY | DISTRIBUTED REPLICATED ]
[ PARTITION BY <partition_type> (<column_name>) <partition_specification>]
Аргументы
Основные аргументы для определения таблицы, ее столбцов и ограничений следующие:
- table_name
-
Имя таблицы. По умолчанию, команда
CREATE TABLEсоздает таблицу в предопределенной схемеpublic. Чтобы использовать другую схему, укажите ее имя в аргументеtable_nameили измените путь поиска схемы по умолчанию, как описано в статье Схемы. - column_name/data_type
-
Имя столбца и его тип данных, соответственно. Смотрите рекомендации по выбору типов данных в разделе Типы данных столбцов ниже.
- column_constraint
-
Ограничение, определенное для указанного столбца. Смотрите раздел Установка ограничений ниже.
- table_constraint
-
Ограничение, определенное на уровне таблицы. Смотрите раздел Установка ограничений ниже.
Выражения
Ниже приведены описания выражений, упомянутых в приведенном выше фрагменте синтаксиса CREATE TABLE:
- TEMP
-
Создает временную таблицу, которая существует только во время сессии или до окончания текущей транзакции. Затем таблица удаляется автоматически.
- LIKE <source_table> [ <like_option> … ]
-
Создает новую таблицу, копируя настройки столбцов из существующей таблицы, включая имена столбцов, типы данных и ограничения
NOT NULL. - INHERITS ( <parent_table> [, … ] )
-
Создает новую таблицу, которая наследует столбцы и ограничения родительских таблиц. Все изменения, применяемые к структуре родительской таблицы, также распространяются на дочернюю.
- USING <access_method>
-
Определяет метод доступа, который используется для хранения содержимого создаваемой таблицы.
Значение по умолчанию может быть изменено с помощью конфигурационного параметра
default_table_access_method. - WITH ( <storage_table_directive> [, … ] )
-
Устанавливает параметры хранения для таблицы.
Параметр конфигурации сервера
gp_default_storage_optionsпозволяет задавать значения по умолчанию для параметров хранения таблиц. - DISTRIBUTED …
-
Устанавливает политику распределения, которая определяет, как данные таблицы распределяются по сегментам в кластере Greengage DB.
- PARTITION BY …
-
Определяет стратегию партиционирования для таблицы.
Типы данных столбцов
Есть несколько рекомендаций по выбору типов данных для столбцов:
-
Выбирайте тип данных в соответствии с хранимой в столбце информацией.
Например, используйте числовые типы для чисел, символьные типы — для текста, а типы
dateилиtimestamp— для дат и времени. -
Используйте тип данных с наименьшим размером.
Например, используйте
INTвместоBIGINTилиTEXTвместоCHAR(<n>). -
Учитывайте возможный рост данных при выборе небольших числовых типов.
Например,
SMALLINTможет быть достаточным на данный момент, но переход наINTв будущем потребует значительных ресурсов, если в таблице накопилось много данных. Если значения могут со временем увеличиться, лучше сразу выбрать тип с большим диапазоном. -
Если возможно, используйте специализированные типы данных.
Применяйте такие типы, как
INET,CIDR,JSON,JSONBилиMACADDRдля улучшения производительности, валидации и наглядности при работе с IP-адресами, JSON-данными и т.д. -
Используйте одинаковые типы данных для столбцов, участвующих в соединениях (JOIN).
Если типы данных различаются, перед сравнением их необходимо преобразовывать, что может замедлить выполнение запросов.
-
Используйте собственные типы данных, когда это необходимо.
В частности, тип
ENUMподходит, если столбец должен содержать только ограниченный набор значений (например,low,mediumиhigh). Значения типаENUMхранятся более эффективно и обрабатываются быстрее, чем эквивалентные значения типаTEXT.
Создание таблиц
Создание новой таблицы
SQL-запрос ниже создает новую таблицу customers со следующими параметрами:
-
Выражение
USING ao_rowиспользуется для создания оптимизированной для добавления (Append-Optimized, AO) таблицы со строковым (row-oriented) хранением данных. -
Выражение
DISTRIBUTED BYуказывает, что столбецcustomer_idиспользуется в качестве ключа распределения строк таблицы по сегментам.
CREATE TABLE customers
(
customer_id INTEGER,
name TEXT,
email TEXT,
customer_type TEXT
)
USING ao_row
DISTRIBUTED BY (customer_id);
INSERT INTO customers (customer_id, name, email, customer_type)
VALUES (1, 'Andrew Fuller', 'andrew@example.com', 'Regular'),
(2, 'Michael Suyama', 'michael@testmail.com', 'Premium'),
(3, 'Laura Callahan', 'laura@example.io', 'Regular'),
(4, 'Nancy Davolio', 'nancy@samplemail.com', 'Premium'),
(5, 'Steven Buchanan', 'steven@fastmail.net', 'Regular'),
(6, 'Margaret Peacock', 'margaret@example.com', 'Regular');
При необходимости вы можете добавить комментарий к созданной таблице с помощью команды COMMENT:
COMMENT ON TABLE customers IS 'Customer information';
Создание таблицы с использованием выражения LIKE
Команда ниже использует выражение LIKE для создания новой таблицы stg_customers с такими же именами столбцов и типами данных, как у таблицы customers:
CREATE TABLE stg_customers
(
LIKE customers
)
USING ao_row
DISTRIBUTED BY (customer_id);
Обратите внимание, что параметры хранения не копируются в новую таблицу и должны быть определены явно с помощью выражения WITH.
Создание таблицы с использованием выражения INHERITS
Чтобы создать таблицу, которая наследует все столбцы и ограничения существующей таблицы, используйте выражение INHERITS.
В приведенном ниже примере новая таблица business_customers наследует таблицу customers и добавляет дополнительный столбец company:
CREATE TABLE business_customers
(
company TEXT
)
INHERITS (customers)
USING ao_row
DISTRIBUTED BY (customer_id);
INSERT INTO business_customers (customer_id, name, email, customer_type, company)
VALUES (7, 'Robert King', 'robert@demo.org', 'Business', 'King Enterprises'),
(8, 'Janet Leverling', 'janet@businessmail.com', 'Business', 'Leverling Ltd');
Создание временной таблицы
Команда ниже создает временную таблицу из результатов SQL-запроса SELECT с помощью CREATE TABLE AS:
CREATE TEMP TABLE temp_premium_customers AS
SELECT customer_id, name, email
FROM customers
WHERE customer_type = 'Premium'
DISTRIBUTED BY (customer_id);
Чтобы проверить, что таблица temp_premium_customers создана, используйте метакоманду \dt:
List of relations Schema | Name | Type | Owner | Storage -------------+------------------------+-------+---------+--------- pg_temp_436 | temp_premium_customers | table | gpadmin | heap public | business_customers | table | gpadmin | ao_row public | customers | table | gpadmin | ao_row public | stg_customers | table | gpadmin | ao_row (4 rows)
Переподключитесь к базе данных, используя метакоманду \c:
\c marketplace
Временная таблица автоматически удаляется, когда сессия завершается.
Чтобы проверить это, выполните \dt еще раз для отображения списка таблиц.
Вывод должен подтвердить, что таблица temp_premium_customers больше не существует:
List of relations Schema | Name | Type | Owner | Storage --------+--------------------+-------+---------+--------- public | business_customers | table | gpadmin | ao_row public | customers | table | gpadmin | ao_row public | stg_customers | table | gpadmin | ao_row (3 rows)
Чтобы узнать больше о том, как просматривать информацию о таблицах, смотрите раздел Просмотр информации о таблицах ниже.
Установка ограничений
Ограничения уникальности
Следующий SQL-запрос создает таблицу orders с ограничением уникальности для столбца order_id с помощью выражения UNIQUE:
CREATE TABLE orders
(
order_id INTEGER UNIQUE,
customer_id INTEGER,
product_id INTEGER,
price NUMERIC(6, 2)
)
USING ao_row
DISTRIBUTED BY (order_id);
Каждое значение в столбце order_id должно быть уникальным — повторяющиеся значения не допускаются.
Например, следующий запрос INSERT нарушает указанное ограничение уникальности:
INSERT INTO orders (order_id, customer_id, product_id, price)
VALUES (1, 1, 11, 99.9),
(1, 2, 35, 25.5);
В этом случае должна возникнуть следующая ошибка:
duplicate key value violates unique constraint "orders_order_id_key"
Обратите внимание на следующее при использовании ограничения уникальности, а также ограничения первичного ключа:
-
При задании ограничения уникальности неявно создается уникальный индекс.
-
Ограничение уникальности должно включать все столбцы ключа распределения, а также столбцы ключа партиционирования (если он задан).
Ограничения NOT NULL
Команда ниже создает таблицу orders с ограничением NOT NULL для столбца order_id:
CREATE TABLE orders
(
order_id INTEGER NOT NULL,
customer_id INTEGER,
product_id INTEGER,
price NUMERIC(6, 2)
)
USING ao_row
DISTRIBUTED BY (order_id);
Столбец order_id не должен содержать значение NULL.
Например, следующий запрос INSERT нарушает заданное ограничение:
INSERT INTO orders (order_id, customer_id, product_id, price)
VALUES (1, 1, 11, 99.9),
(NULL, 2, 35, 25.5);
Должна возникнуть следующая ошибка:
null value in column "order_id" violates not-null constraint
Первичные ключи
Ограничение первичного ключа представляет собой сочетание ограничений уникальности и NOT NULL.
Указание первичного ключа накладывает ограничения на то, как может быть определена политика распределения таблицы:
-
Таблица должна использовать хеш-распределение.
-
Столбцы первичного ключа должны совпадать со столбцами ключа распределения таблицы.
Если у таблицы задан первичный ключ, соответствующий столбец по умолчанию используется в качестве ключа распределения.
Команда ниже создает таблицу orders с ограничением первичного ключа для столбца order_id:
CREATE TABLE orders
(
order_id INTEGER PRIMARY KEY,
customer_id INTEGER,
product_id INTEGER,
price NUMERIC(6, 2)
)
USING ao_row
DISTRIBUTED BY (order_id);
Например, следующий запрос INSERT нарушает указанное ограничение:
INSERT INTO orders (order_id, customer_id, product_id, price)
VALUES (1, 1, 11, 99.9),
(1, 2, 35, 25.5);
Должна возникнуть следующая ошибка:
duplicate key value violates unique constraint "orders_pkey"
Ограничения-проверки
Ограничение-проверка позволяет указать, что значения в одном или нескольких столбцах должны удовлетворять логическому выражению (проверке истинности).
Ограничения столбцов
В приведенном ниже примере цена товара ограничена положительными значениями:
CREATE TABLE orders
(
order_id INTEGER,
customer_id INTEGER,
product_id INTEGER,
price NUMERIC(6, 2) CHECK (price >= 0)
)
USING ao_row
DISTRIBUTED BY (order_id);
Например, следующий запрос INSERT нарушает указанное ограничение:
INSERT INTO orders (order_id, customer_id, product_id, price)
VALUES (1, 1, 11, -10);
Должна быть вызвана следующая ошибка:
new row for relation "orders" violates check constraint "orders_price_check"
Ограничения таблицы
В примере ниже установлено ограничение-проверка на уровне таблицы для столбцов price и count:
CREATE TABLE orders
(
order_id INTEGER,
customer_id INTEGER,
product_id INTEGER,
price NUMERIC(6, 2),
count INTEGER,
CHECK (price > 0 AND count >= 1)
)
USING ao_row
DISTRIBUTED BY (order_id);
Следующий запрос INSERT нарушает указанное ограничение:
INSERT INTO orders (order_id, customer_id, product_id, price, count)
VALUES (1, 1, 11, -25.5, 0);
Этот запрос должен вызвать следующую ошибку:
new row for relation "orders" violates check constraint "orders_check"
Внешние ключи
Ограничения внешнего ключа не поддерживаются. Вы можете их объявить, но контроль ссылочной целостности между сегментами распределенной таблицы невозможен.
В этом примере создается таблица products и таблица orders с внешним ключом, ссылающимся на products:
CREATE TABLE products
(
product_id INTEGER PRIMARY KEY,
name TEXT
)
DISTRIBUTED REPLICATED;
CREATE TABLE orders
(
order_id INTEGER,
product_id INTEGER REFERENCES products (product_id),
price NUMERIC(6, 2)
)
USING ao_row
DISTRIBUTED BY (order_id);
При создании таблицы orders должно отображаться следующее предупреждение:
referential integrity (FOREIGN KEY) constraints are not supported in Greengage Database, will not be enforced
Эти запросы вставляют допустимые строки в таблицу products и строку с несуществующим product_id в таблицу orders:
INSERT INTO products (product_id, name)
VALUES (1, 'Chai'),
(2, 'Chang');
INSERT INTO orders (order_id, product_id, price)
VALUES (1, 3, 19.99);
При вставке данных не должно возникнуть ошибок или предупреждений.
Ограничения-исключения
Ограничения-исключения гарантируют, что для любых двух строк таблицы по крайней мере одно сравнение по указанным столбцам или выражениям при использовании заданных операторов возвращает FALSE или NULL.
Они обычно используются для предотвращения перекрытия значений, например, временных диапазонов или геометрических областей.
В примере ниже ограничение-исключение для столбца discount_period предотвращает пересечение периодов действия скидок для всех продуктов:
CREATE TABLE product_discounts
(
product_id INTEGER,
discount_period TSRANGE,
EXCLUDE USING gist (discount_period WITH &&)
)
DISTRIBUTED REPLICATED;
Например, приведенный ниже запрос INSERT нарушает указанное ограничение-исключение, так как периоды скидок пересекаются:
INSERT INTO product_discounts (product_id, discount_period)
VALUES (1001, '[2026-01-01, 2026-01-10)'),
(1002, '[2026-01-05, 2026-01-15)');
Этот запрос вызывает следующую ошибку:
conflicting key value violates exclusion constraint "product_discounts_discount_period_excl"
Добавление ограничения-исключения автоматически создает индекс типа, указанного в определении ограничения.
В этом примере индекс называется product_discounts_discount_period_excl.
Как и ограничение уникальности, ограничение-исключение допускается только для реплицированных таблиц или когда столбцы ключа распределения включены в ограничение с тем же оператором =, который определен в классе хеш-оператора ключа распределения.
Ограничения-исключения не поддерживаются для партиционированных таблиц.
Изменение таблиц
Чтобы изменить таблицу, используйте команду ALTER TABLE.
SQL-запрос ниже добавляет новый столбец signup_date в таблицу customers:
ALTER TABLE customers
ADD COLUMN signup_date DATE;
Вы можете использовать метакоманду \d customers, чтобы проверить, что столбец добавлен:
Table "public.customers"
Column | Type | Collation | Nullable | Default
---------------+---------+-----------+----------+---------
customer_id | integer | | |
name | text | | |
email | text | | |
customer_type | text | | |
signup_date | date | | |
Number of child tables: 1 (Use \d+ to list them.)
Distributed by: (customer_id)
Обратите внимание, что таблицы, созданные с использованием выражения INHERITS, наследуют все столбцы родительских таблиц.
Например, при выполнении команды \d business_customers видно, что таблица содержит столбец signup_date, унаследованный от родительской таблицы customers:
Table "public.business_customers"
Column | Type | Collation | Nullable | Default
---------------+---------+-----------+----------+---------
customer_id | integer | | |
name | text | | |
email | text | | |
customer_type | text | | |
company | text | | |
signup_date | date | | |
Inherits: customers
Distributed by: (customer_id)
Некоторые команды ALTER TABLE (например, ALTER COLUMN TYPE) требуют полной перезаписи таблицы и устанавливают на нее блокировку.
Это блокирует доступ к таблице, включая операции чтения, до завершения выполнения команды.
Для больших таблиц такие команды лучше выполнять во время планового обслуживания, чтобы избежать перерыва в сервисе.
Для очень больших таблиц, которые требуют перезаписи, эффективнее создать копию таблицы, вставить в нее данные, а затем переименовать ее. Это позволяет избежать блокировки исходной таблицы и внести изменения без прерывания доступа к ней.
Просмотр информации о таблицах
Просмотр списка таблиц
Метакоманды psql
-
Чтобы вывести список таблиц, используйте метакоманду
\dt:\dtВывод включает различную информацию, включая схему, к которой принадлежит каждая таблица, имя таблицы, ее тип, владельца и модель хранения:
List of relations Schema | Name | Type | Owner | Storage --------+--------------------+-------+---------+--------- public | business_customers | table | gpadmin | ao_row public | customers | table | gpadmin | ao_row public | stg_customers | table | gpadmin | ao_row (3 rows)
-
Метакоманда
\dt+возвращает дополнительные поля:\dt+Вывод включает размер и описание таблицы:
List of relations Schema | Name | Type | Owner | Storage | Size | Description --------+--------------------+-------+---------+---------+--------+---------------------- public | business_customers | table | gpadmin | ao_row | 352 kB | public | customers | table | gpadmin | ao_row | 448 kB | Customer information public | stg_customers | table | gpadmin | ao_row | 320 kB | (3 rows)
-
Чтобы отобразить системные таблицы, используйте метакоманду
\dtS:\dtSВывод должен включать таблицы из схемы системного каталога
pg_catalog:List of relations Schema | Name | Type | Owner | Storage ------------+--------------------------+-------+---------+--------- pg_catalog | gp_configuration_history | table | gpadmin | heap pg_catalog | gp_distribution_policy | table | gpadmin | heap pg_catalog | gp_fastsequence | table | gpadmin | heap pg_catalog | gp_id | table | gpadmin | heap pg_catalog | gp_partition_template | table | gpadmin | heap pg_catalog | gp_segment_configuration | table | gpadmin | heap pg_catalog | gp_version_at_initdb | table | gpadmin | heap pg_catalog | pg_aggregate | table | gpadmin | heap pg_catalog | pg_am | table | gpadmin | heap pg_catalog | pg_amop | table | gpadmin | heap ...
-
Для поиска таблиц в конкретной схеме можно использовать регулярные выражения. Например, следующая команда возвращает все таблицы в схеме
information_schema:\dt information_schema.*Результат должен выглядеть следующим образом:
List of relations Schema | Name | Type | Owner | Storage --------------------+-------------------------+-------+---------+--------- information_schema | sql_features | table | gpadmin | heap information_schema | sql_implementation_info | table | gpadmin | heap information_schema | sql_languages | table | gpadmin | heap information_schema | sql_packages | table | gpadmin | heap information_schema | sql_parts | table | gpadmin | heap information_schema | sql_sizing | table | gpadmin | heap information_schema | sql_sizing_profiles | table | gpadmin | heap (7 rows) -
Чтобы отобразить привилегии доступа к объектам базы данных, включая таблицы, используйте метакоманду
\dp:\dpРезультат должен выглядеть так:
Access privileges Schema | Name | Type | Access privileges | Column privileges | Policies --------+--------------------+-------+-------------------+-------------------+---------- public | business_customers | table | | | public | customers | table | | | public | stg_customers | table | | | (3 rows)
Столбец
Access privilegesдля новых таблиц пуст, что означает, что привилегии не настроены. Смотрите раздел Роли и привилегии, чтобы узнать, как предоставить пользователям доступ к этим таблицам.
Системные каталоги
-
Выполните SQL-запрос к системному представлению
pg_catalog.pg_tables:SELECT * FROM pg_catalog.pg_tables WHERE schemaname = 'public' ORDER BY schemaname, tablename;Вывод содержит информацию о таблицах, включая их схему, имя, владельца, а также связанные характеристики: наличие индексов, правил и триггеров:
schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity ------------+--------------------+------------+------------+------------+----------+-------------+------------- public | business_customers | gpadmin | | f | f | f | f public | customers | gpadmin | | f | f | f | f public | stg_customers | gpadmin | | f | f | f | f (3 rows)
-
Выполните SQL-запрос к таблице
information_schema.tables. Используйтеtable_type = 'BASE TABLE'в выраженииWHERE, чтобы вывести только таблицы:SELECT table_catalog, table_schema, table_name, table_type FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_schema = 'public' ORDER BY table_schema, table_name;Результат выглядит следующим образом:
table_catalog | table_schema | table_name | table_type ---------------+--------------+--------------------+------------ marketplace | public | business_customers | BASE TABLE marketplace | public | customers | BASE TABLE marketplace | public | stg_customers | BASE TABLE (3 rows)
Просмотр информации о таблице
-
Для просмотра структуры указанной таблицы используйте метакоманду
\d:\d customersВывод содержит информацию о столбцах таблицы, типах данных и других настройках таблицы:
Table "public.customers" Column | Type | Collation | Nullable | Default ---------------+---------+-----------+----------+--------- customer_id | integer | | | name | text | | | email | text | | | customer_type | text | | | signup_date | date | | | Number of child tables: 1 (Use \d+ to list them.) Distributed by: (customer_id) -
Метакоманда
\d+возвращает дополнительную информацию:\d+ customersВывод может включать параметры хранения, такие как тип и уровень сжатия, дочерние таблицы, созданные с использованием выражения
INHERITS, и так далее:Table "public.customers" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description ---------------+---------+-----------+----------+---------+----------+--------------+------------- customer_id | integer | | | | plain | | name | text | | | | extended | | email | text | | | | extended | | customer_type | text | | | | extended | | signup_date | date | | | | plain | | Child tables: business_customers Distributed by: (customer_id) Access method: ao_row Options: blocksize=32768, compresslevel=0, compresstype=none, checksum=true
Полезные SQL-запросы
-
Следующий SQL-запрос возвращает число отношений (relation) базы данных, сгруппированных по их типу:
SELECT relkind, COUNT(*) FROM pg_catalog.pg_class GROUP BY(relkind) ORDER BY COUNT(*);Результат выглядит следующим образом:
relkind | count ---------+------- f | 3 M | 3 o | 3 c | 7 t | 50 r | 94 i | 201 v | 288 (8 rows)
Например,
r— это heap-таблица или таблица, оптимизированная для добавления (Append-Optimized, AO),i— индекс,v— представление. -
Команда ниже позволяет получить информацию об отношении (relation) по его имени:
SELECT relation.oid, relation.relname, schema.nspname, tablespace.spcname, relation.relpersistence, relation.relkind, relation.relpages, relation.reltuples FROM pg_catalog.pg_class relation LEFT JOIN pg_catalog.pg_namespace schema ON schema.oid = relation.relnamespace LEFT JOIN pg_catalog.pg_tablespace tablespace ON tablespace.oid = relation.reltablespace WHERE relation.relname = 'customers';Результат выглядит следующим образом:
oid | relname | nspname | spcname | relpersistence | relkind | relpages | reltuples -------+-----------+---------+---------+----------------+---------+----------+----------- 25626 | customers | public | | p | r | 1 | 6 (1 row)
-
Команда ниже отображает список TOAST-таблиц вместе с основными таблицами, с которыми они связаны:
SELECT toast_table.oid AS "TOAST OID", toast_table.relname AS "TOAST name", main_table.oid AS "Main OID", main_table.relname AS "Main name" FROM pg_catalog.pg_class toast_table LEFT JOIN pg_catalog.pg_class main_table ON toast_table.oid = main_table.reltoastrelid WHERE main_table.relname LIKE '%customers%' ORDER BY main_table.relname;Вывод должен выглядеть так:
TOAST OID | TOAST name | Main OID | Main name -----------+----------------+----------+-------------------- 25645 | pg_toast_25640 | 25640 | business_customers 25631 | pg_toast_25626 | 25626 | customers 25638 | pg_toast_25633 | 25633 | stg_customers (3 rows)
Удаление таблиц
Чтобы удалить таблицу, используйте команду DROP TABLE:
DROP TABLE stg_customers;
Чтобы удалить таблицу и связанные с ней объекты, такие как представления или унаследованные таблицы, используйте параметр CASCADE:
DROP TABLE customers CASCADE;
Таблицы системного каталога
Greengage DB предоставляет набор предопределенных системных каталогов в схеме pg_catalog.
Некоторые из этих таблиц могут быть полезны для мониторинга кластера и других задач администратора базы данных.
Примеры таких таблиц:
-
gp_segment_configuration— содержит информацию о конфигурации кластера: статусе координаторов, сегментов и их зеркал. -
gp_distribution_policy— включает информацию о таблицах и политике распределения данных по сегментам. -
gp_configuration_history— содержит информацию об изменениях в системе, связанных с обнаружением сбоев и восстановлением после них.