Структура БД (DDL) в PostgreSQL

В предыдущей статье мы рассмотрели логическую структуру PostgreSQL и видели, что основным контейнером верхнего уровня является База Данных, далее идет схема и в ней уже создаются другие объекты. Схемой по умолчанию является схема public. Именно в ней и создаются по умолчанию все объекты. Хорошей практикой является использовать свои схемы, а на public отобрать права у пользователей.

В PostgreSQL существует ряд DDL (Data Definition Language) операторов для создания и изменения структуры базы данных, в целом совпадающий со стандартом ANSI и ISO. Основные варианты DDL операторов:

  1. CREATE: оператор CREATE используется для создания новых объектов в базе данных, таких как таблицы, индексы, представления, функции, триггеры и другие. Например:
    • CREATE TABLE: создание новой таблицы.
    • CREATE INDEX: создание индекса для ускорения поиска по столбцу или набору столбцов.
    • CREATE VIEW: создание представления для удобного доступа к данным.
  2. ALTER: оператор ALTER используется для изменения структуры или свойств существующих объектов в базе данных. Например:
    • ALTER TABLE: изменение структуры таблицы, добавление или удаление столбцов, изменение типов данных и другие операции.
    • ALTER INDEX: изменение индекса, добавление или удаление столбцов из индекса.
    • ALTER VIEW: изменение определения представления.
  3. DROP: оператор DROP используется для удаления объектов из базы данных. Например:
    • DROP TABLE: удаление таблицы и связанных с ней данных и индексов.
    • DROP INDEX: удаление индекса.
    • DROP VIEW: удаление представления.
    • DROP FUNCTION: удаление функции.
  4. TRUNCATE: оператор TRUNCATE используется для удаления всех записей из таблицы, сохраняя структуру таблицы. Это более эффективный способ удаления данных, чем использование DELETE FROM TABLE, так как TRUNCATE не сохраняет журнал транзакций.

Приведем пример создания базы данных, подключения к ней и создания простейшей таблицы:

Создадим свою БД и подключимся к ней используя консольную утилиту psql:

CREATE DATABASE aeugene;

\c aeugene;

Теперь создадим таблицу и добавим пару записей:

CREATE TABLE test (i serial, t text);

INSERT INTO test(t) VALUES (‘Аристов’),(‘Евгений’);

SELECT * FROM test;

Видим, что автоматический счетчик строк (имя поля i, тип — счетчик с автоматическим увеличением) работает на отлично и обе строки у нас успешно сохранились внутри таблицы test в схеме public (а именно в ней мы по умолчанию и работаем) в БД aeugene.

Обратите внимание, что одинарные кавычки должны быть прямыми ‘, а не фигурными

Обратив внимание на механизм счетчика, для этого посмотрим структуру созданной таблицы, используя встроенную команду psql \d+:

\d+ test

Видим, что при добавлении новой записи, у нас в поле i будет присвоено значение из счетчика (последовательности/sequence) по имени test_i_seq, автоматически сгенерированного при создании таблицы при объявлении типа поля serial.

На официальном сайте PostgreSQL можно посмотреть как работать с такими последовательностями.

Кроме команды просмотра структуры таблицы, в psql есть также много других встроенных полезных команд, список которых мы можем посмотреть используя команду \? Самые часто используемые команды:

\l – список баз данных
\du – список пользователей
\dp (или \z) – список таблиц, представлений, последовательностей, прав
доступа к ним
\di – список индексов
\dt – список таблиц
\dt+ — список всех таблиц с описанием
\dt s — список всех таблиц, содержащих s в имени
\dS – системные таблицы
\d+ – описание таблицы
\d “table_name” – описание таблицы
\i запуск команды из внешнего файла, например \i /home/script01.sql

Обратите внимание, что эти команды доступны только из psql. Если, например, вы хотите увидеть аналогичные данные в DBeaver, то нужно будет использовать графический интерфейс и окно обзора объектов, а потом свойства конкретного объекта:

В следующей статье мы разберем DML команды по управлению данным в PostgreSQL.


Опубликовано

в

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

18 − 8 =