Работа с объектами базы данных¶
1. Основные объекты базы данных¶
1.1. Таблицы (TABLE)¶
Таблицы – основной объект хранения данных. Каждая строка таблицы представляет одну запись, а столбцы – её свойства.
Пример структуры таблицы можно увидеть запустив запрос и изменив название таблицы:
CREATE TABLE dwh_shared.nefatov_sales (
id SERIAL PRIMARY KEY, -- Уникальный идентификатор
sale_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Дата продажи
customer_id UUID NOT NULL, -- Покупатель
amount NUMERIC NOT NULL -- Сумма продажи
);
1.2. Представления (VIEW)¶
Представления – это виртуальные таблицы, которые хранят SQL-запрос, но не данные. Они упрощают сложные запросы.
Пример:
CREATE VIEW dwh_shared.v_nefatov_sales_summary AS
SELECT sr.counteragent_id, SUM(sr.sum_sale) AS total_sales
FROM dwh_main_data.sales_row sr
GROUP BY sr.counteragent_id
Теперь можно обращаться к представлению как к таблице:
1.3. Материализованные представления (MATERIALIZED VIEW)¶
В отличие от обычных представлений, материализованные представления хранят данные, что ускоряет их выполнение. Однако их нужно вручную обновлять.
Пример:
CREATE MATERIALIZED VIEW dwh_shared.vm_nefatov_sales_summary AS
SELECT sr.counteragent_id, SUM(sr.sum_sale) AS total_sales
FROM dwh_main_data.sales_row sr
GROUP BY sr.counteragent_id
Обновление данных:
1.4. Индексы (INDEX)¶
Индексы ускоряют поиск данных, особенно по часто используемым столбцам.
Пример:
Теперь поиск продаж по дате будет быстрее:
2. Основные типы данных в SQL (самые популярные)¶
2.1. Числовые типы¶
INTEGER,BIGINT– целые числаNUMERIC,DECIMAL– числа с плавающей точкой
2.2. Строковые типы¶
TEXT– строка произвольной длиныVARCHAR(N)– строка фиксированной длиныCHAR(N)– строка точно N символов
2.3. Дата и время¶
DATE– только датаTIMESTAMP– дата + время
2.4. Логические типы¶
BOOLEAN–TRUE,FALSE,NULL
2.5. Специальные типы¶
UUID– уникальные идентификаторыJSONB– хранение JSONARRAY– массивы значений
3. Создание, наполнение и обновление объектов и таблиц¶
3.1. Создание таблиц (CREATE TABLE)¶
Пример:
CREATE TABLE dwh_shared.nefatov_sales (
id SERIAL PRIMARY KEY, -- Уникальный идентификатор
sale_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Дата продажи
customer_id UUID NOT NULL, -- Покупатель
amount NUMERIC NOT NULL CHECK (total_amount > 0) -- Сумма продажи
);
PRIMARY KEY– уникальный идентификаторDEFAULT– значение по умолчаниюCHECK– ограничение
3.2. Добавление данных в таблицу (INSERT INTO)¶
Чтобы добавить новые записи в таблицу nefatov_sales, используем команду INSERT INTO.
Простой пример вставки одной строки:
INSERT INTO dwh_shared.nefatov_sales (sale_date, customer_id, amount)
VALUES
('2024-03-14 12:00:00', '550e8400-e29b-41d4-a716-446655440001', 750.25)
Добавление нескольких строк сразу:
INSERT INTO dwh_shared.nefatov_sales (sale_date, customer_id, amount)
VALUES
('2024-03-14 12:00:00', '550e8400-e29b-41d4-a716-446655440001', 750.25),
('2024-03-14 13:00:00', '550e8400-e29b-41d4-a716-446655440002', 450.75);
Особенности:
- Нужно явно указать те столбцы, которые будете заполнять.
- Если для столбца не задано значение, вставляются значения NULL
3.3. Обновление данных (UPDATE)¶
Чтобы изменить существующие данные, используем UPDATE.
Пример: изменим сумму продажи
UPDATE dwh_shared.nefatov_sales
SET amount = 2000
WHERE sale_date = '2024-03-14 12:00:00' AND customer_id = '550e8400-e29b-41d4-a716-446655440001';
Важные моменты:
- Без
WHEREобновятся все строки, что может привести к потере данных. - Если
UPDATEкасается большого количества строк, лучше делать бэкап перед изменениями.
3.4. Вставка или обновление (UPSERT)¶
В некоторых случаях нужно обновить данные, если они уже существуют, или вставить новые, если их нет. В PostgreSQL для этого есть ON CONFLICT.
¶
4. Обновление объектов¶
4.1. Изменение таблиц (ALTER TABLE)¶
Добавление столбца:
Изменение типа данных:
Удаление столбца:
5. Удаление объектов¶
5.1. Удаление данных (DELETE)¶
Удаление заказов до 2023 года:
5.2. Очистка таблицы (TRUNCATE)¶
Удаляет все данные, но быстрее DELETE.