Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

Обзор таблиц

Андрей Аксенов

Таблица — это основной объект для хранения информации в базе данных. Таблицы 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> [, ... ] ) ]
[ 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

    Создает новую таблицу, копируя настройки столбцов из существующей таблицы, включая имена столбцов, типы данных и ограничения NOT NULL.

  • INHERITS

    Создает новую таблицу, которая наследует столбцы и ограничения родительских таблиц. Все изменения, применяемые к структуре родительской таблицы, также распространяются на дочернюю.

  • WITH

    Устанавливает параметры хранения для таблицы, такие как appendoptimized и orientation.

    ПРИМЕЧАНИЕ

    Параметр конфигурации сервера gp_default_storage_options позволяет задавать значения по умолчанию для параметров хранения таблиц, включая appendoptimized и orientation.

  • 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.

Создание таблиц

Предварительные требования

Для выполнения команд, описанных в следующих разделах, подключитесь к мастер-хосту Greengage DB с помощью psql, как описано в статье Подключение к Greengage DB с использованием psql. Затем создайте новую базу данных и подключитесь к ней:

CREATE DATABASE marketplace;
\c marketplace

Создание новой таблицы

SQL-запрос ниже создает новую таблицу customers со следующими параметрами:

  • Выражение WITH используется для создания оптимизированной для добавления (Append-Optimized, AO) таблицы со строковым (row-oriented) хранением данных.

  • Выражение DISTRIBUTED BY указывает, что столбец customer_id используется в качестве ключа распределения строк таблицы по сегментам.

CREATE TABLE customers
(
    customer_id   INTEGER,
    name          TEXT,
    email         TEXT,
    customer_type TEXT
)
    WITH (appendoptimized = true, orientation = 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
)
    WITH (appendoptimized = true, orientation = row)
    DISTRIBUTED BY (customer_id);

Обратите внимание, что параметры хранения не копируются в новую таблицу и должны быть определены явно с помощью выражения WITH.

Создание таблицы с использованием выражения INHERITS

Чтобы создать таблицу, которая наследует все столбцы и ограничения существующей таблицы, используйте выражение INHERITS. В приведенном ниже примере новая таблица business_customers наследует таблицу customers и добавляет дополнительный столбец company:

CREATE TABLE business_customers
(
    company TEXT
)
    INHERITS (customers)
    WITH (appendoptimized = true, orientation = 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_17 | temp_premium_customers | table | gpadmin | heap
 public     | business_customers     | table | gpadmin | append only
 public     | customers              | table | gpadmin | append only
 public     | stg_customers          | table | gpadmin | append only

Переподключитесь к базе данных, используя метакоманду \c:

\c marketplace

Временная таблица автоматически удаляется, когда сессия завершается. Чтобы проверить это, выполните \dt еще раз для отображения списка таблиц. Вывод должен подтвердить, что таблица temp_premium_customers больше не существует:

                      List of relations
 Schema |        Name        | Type  |  Owner  |   Storage
--------+--------------------+-------+---------+-------------
 public | business_customers | table | gpadmin | append only
 public | customers          | table | gpadmin | append only
 public | stg_customers      | table | gpadmin | append only

Чтобы узнать больше о том, как просматривать информацию о таблицах, смотрите раздел Просмотр информации о таблицах ниже.

Установка ограничений

Ограничения уникальности

Следующий SQL-запрос создает таблицу orders с ограничением уникальности для столбца order_id с помощью выражения UNIQUE:

CREATE TABLE orders
(
    order_id    INTEGER UNIQUE,
    customer_id INTEGER,
    product_id  INTEGER,
    price       NUMERIC(6, 2)
)
    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"
ВАЖНО

Обратите внимание на следующее при использовании ограничения уникальности, а также ограничения первичного ключа:

  • При задании ограничения уникальности неявно создается уникальный индекс.

  • Ограничение уникальности должно включать все столбцы ключа распределения, а также столбцы ключа партиционирования (если он задан).

  • Ограничения уникальности не поддерживаются для оптимизированных для добавления (Append-Optimized, AO) таблиц.

Ограничения 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)
)
    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)
)
    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)
)
    WITH (appendoptimized = true, orientation = 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)
)
    WITH (appendoptimized = true, orientation = 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)
)
    WITH (appendoptimized = true, orientation = 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);

При вставке данных не должно возникнуть ошибок или предупреждений.

Изменение таблиц

Чтобы изменить таблицу, используйте команду ALTER TABLE. SQL-запрос ниже добавляет новый столбец signup_date в таблицу customers:

ALTER TABLE customers
    ADD COLUMN signup_date DATE;

Вы можете использовать метакоманду \d customers, чтобы проверить, что столбец добавлен:

    Column     |  Type   | Modifiers
---------------+---------+-----------
 customer_id   | integer |
 name          | text    |
 email         | text    |
 customer_type | text    |
 signup_date   | date    |

Обратите внимание, что таблицы, созданные с использованием выражения INHERITS, наследуют все столбцы родительских таблиц. Например, при выполнении команды \d business_customers видно, что таблица содержит столбец signup_date, унаследованный от родительской таблицы customers:

    Column     |  Type   | Modifiers
---------------+---------+-----------
 customer_id   | integer |
 name          | text    |
 email         | text    |
 customer_type | text    |
 company       | text    |
 signup_date   | date    |
ВАЖНО

Некоторые команды ALTER TABLE, включая ADD COLUMN, требуют полной перезаписи таблицы и устанавливают на нее блокировку. Это блокирует доступ к таблице, включая операции чтения, до завершения выполнения команды. Для больших таблиц такие команды лучше выполнять во время планового обслуживания, чтобы избежать перерыва в сервисе.

Для очень больших таблиц, которые требуют перезаписи, эффективнее создать копию таблицы, вставить в нее данные, а затем переименовать ее. Это позволяет избежать блокировки исходной таблицы и внести изменения без прерывания доступа к ней.

Просмотр информации о таблицах

Просмотр списка таблиц

Метакоманды psql

  • Чтобы вывести список таблиц, используйте метакоманду \dt:

    \dt

    Вывод включает различную информацию, включая схему, к которой принадлежит каждая таблица, имя таблицы, ее тип, владельца и модель хранения:

                          List of relations
     Schema |        Name        | Type  |  Owner  |   Storage
    --------+--------------------+-------+---------+-------------
     public | business_customers | table | gpadmin | append only
     public | customers          | table | gpadmin | append only
     public | stg_customers      | table | gpadmin | append only
  • Метакоманда \dt+ возвращает дополнительные поля:

    \dt+

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

                                          List of relations
     Schema |        Name        | Type  |  Owner  |   Storage   |  Size  |     Description
    --------+--------------------+-------+---------+-------------+--------+----------------------
     public | business_customers | table | gpadmin | append only | 448 kB |
     public | customers          | table | gpadmin | append only | 449 kB | Customer information
     public | stg_customers      | table | gpadmin | append only | 320 kB |
  • Чтобы отобразить системные таблицы, используйте метакоманду \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_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
     pg_catalog | pg_amproc                | 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
  • Чтобы отобразить привилегии доступа к объектам базы данных, включая таблицы, используйте метакоманду \dp:

    \dp

    Результат должен выглядеть так:

                                     Access privileges
     Schema |        Name        | Type  | Access privileges | Column access privileges
    --------+--------------------+-------+-------------------+--------------------------
     public | business_customers | table |                   |
     public | customers          | table |                   |
     public | stg_customers      | table |                   |

    Столбец Access privileges для новых таблиц пуст, что означает, что привилегии не настроены. Смотрите раздел Роли и привилегии, чтобы узнать, как предоставить пользователям доступ к этим таблицам.

SQL-команды

  • Выполните 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
    ------------+--------------------+------------+------------+------------+----------+-------------
     public     | business_customers | gpadmin    |            | f          | f        | f
     public     | customers          | gpadmin    |            | f          | f        | f
     public     | stg_customers      | gpadmin    |            | f          | f        | f
  • Выполните 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

Просмотр информации о таблице

  • Для просмотра структуры указанной таблицы используйте метакоманду \d:

    \d customers

    Вывод содержит информацию о столбцах таблицы, типах данных и других настройках таблицы:

    Append-Only Table "public.customers"
        Column     |  Type   | Modifiers
    ---------------+---------+-----------
     customer_id   | integer |
     name          | text    |
     email         | text    |
     customer_type | text    |
     signup_date   | date    |
    Compression Type: None
    Compression Level: 0
    Block Size: 32768
    Checksum: t
    Number of child tables: 1 (Use \d+ to list them.)
    Distributed by: (customer_id)
  • Метакоманда \d+ возвращает дополнительную информацию:

    \d+ customers

    Вывод может включать параметры хранения столбцов, такие как тип и уровень сжатия, дочерние таблицы, созданные с использованием выражения INHERITS, и так далее:

                        Append-Only Table "public.customers"
        Column     |  Type   | Modifiers | Storage  | Stats target | Description
    ---------------+---------+-----------+----------+--------------+-------------
     customer_id   | integer |           | plain    |              |
     name          | text    |           | extended |              |
     email         | text    |           | extended |              |
     customer_type | text    |           | extended |              |
     signup_date   | date    |           | plain    |              |
    Compression Type: None
    Compression Level: 0
    Block Size: 32768
    Checksum: t
    Child tables: business_customers
    Distributed by: (customer_id)
    Options: appendonly=true, orientation=row

Полезные SQL-запросы

  • Следующий SQL-запрос возвращает число отношений (relation) базы данных, сгруппированных по их типу:

    SELECT relkind, COUNT(*)
    FROM pg_catalog.pg_class
    GROUP BY(relkind)
    ORDER BY COUNT(*);

    Результат выглядит следующим образом:

     relkind | count
    ---------+-------
     o       |     3
     M       |     3
     c       |     4
     t       |    25
     r       |    88
     i       |   166
     v       |   166

    Например, r — это heap-таблица или таблица, оптимизированная для добавления (Append-Optimized, AO), i — индекс, v — представление.

  • Команда ниже позволяет получить информацию об отношении (relation) по его имени:

    SELECT relation.oid,
           relation.relname,
           schema.nspname,
           tablespace.spcname,
           relation.relstorage,
           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 | relstorage | relpersistence | relkind | relpages | reltuples
    --------+-----------+---------+---------+------------+----------------+---------+----------+-----------
     147889 | customers | public  |         | a          | p              | r       |        1 |         6
  • Команда ниже отображает список 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
    -----------+-----------------+----------+--------------------
        147988 | pg_toast_147909 |   147909 | business_customers
        147978 | pg_toast_147889 |   147889 | customers
        147901 | pg_toast_147899 |   147899 | stg_customers

Удаление таблиц

Чтобы удалить таблицу, используйте команду DROP TABLE:

DROP TABLE stg_customers;

Чтобы удалить таблицу и связанные с ней объекты, такие как представления или унаследованные таблицы, используйте параметр CASCADE:

DROP TABLE customers CASCADE;

Таблицы системного каталога

Greengage DB предоставляет набор предопределенных системных каталогов в схеме pg_catalog. Некоторые из этих таблиц могут быть полезны для мониторинга кластера и других задач администратора базы данных. Примеры таких таблиц:

  • gp_segment_configuration — содержит информацию о конфигурации кластера: статусе мастеров, сегментов и их зеркал.

  • gp_distribution_policy — включает информацию о таблицах и политике распределения данных по сегментам.

  • gp_configuration_history — содержит информацию об изменениях в системе, связанных с обнаружением сбоев и восстановлением после них.