DDL / СхемаНачальный
CREATE TABLE
Создаёт новую таблицу с определёнными колонками и ограничениями.
Синтаксис
CREATE TABLE table_name (
column_name data_type [constraints],
...
);Объяснение
CREATE TABLE определяет структуру таблицы: колонки, типы данных, ограничения (NOT NULL, UNIQUE, CHECK, PRIMARY KEY, FOREIGN KEY).
В PostgreSQL рекомендуется:
- id: BIGINT GENERATED ALWAYS AS IDENTITY (вместо SERIAL)
- created_at: TIMESTAMPTZ (с часовым поясом)
- Явные NOT NULL где нужно
Пример
CREATE TABLE users (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
name TEXT NOT NULL,
is_active BOOLEAN NOT NULL DEFAULT true,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);Связанные термины
ALTER TABLEИзменяет структуру существующей таблицы: добавляет колонки, меняет типы, добавляет ограничения.FOREIGN KEYОграничение, связывающее колонку с первичным ключом другой таблицы. Обеспечивает ссылочную целостность.PRIMARY KEYУникальный идентификатор строки. Автоматически создаёт уникальный индекс, не допускает NULL.Типы данныхОпределяют какие значения можно хранить в колонке и как они обрабатываются.
Анекдоты по теме
Начинающий: — Я выучил SQL за неделю! Опытный: — Поздравляю. Ты выучил SELECT, INSERT, UPDATE, DELETE. Осталось лет 5 на JOIN, индексы, транзакции и почему NULL — это зло. Удачи.
— Зачем нужен pg_dump? — Создаёт логический бэкап базы данных. — Чем от физического бэкапа отличается? — Физический (pg_basebackup): копирует файлы. Быстро для полного восстановления. — Логический (pg_dump): SQL команды. Можно восстановить отдельную таблицу, мигрировать версии. — Что выбрать? — Оба. Физический для DR, логический для гибкости.
— Почему запрос SELECT * FROM users чувствует себя неуверенно? — Потому что он не знает, кого именно из себя изображать. Всех и сразу — это не профайл.