Базы данных

Обзор

База данных — это контейнер самого верхнего уровня для организации хранения объектов SQL (объектов базы данных). Полная иерархия следующая: кластер → база данных → схема → таблица и другие объекты (функции, представления, операторы).

Логический уровень организации данных в кластере ADPG
Логический уровень организации данных в кластере ADPG
Логический уровень организации данных в кластере ADPG
Логический уровень организации данных в кластере ADPG

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

Базы данных физически разделены. По умолчанию ADPG размещает файлы базы данных по следующему пути: /pg_data1/adpg14. ADPG создает каталог adpg14 по пути, указанному в параметре Data directory (смотрите Конфигурационные параметры). Значение по умолчанию для этого параметра — /pg_data1.

После установки кластер ADPG содержит три базы данных, описанные в таблице ниже.

Предустановленные базы данных
Название Описание

postgres

База данных для начального подключения. Она создаётся копированием template1, и при необходимости её можно удалить и создать заново

template0

Шаблон базы данных. template0 не принимает подключения и не должен изменяться. Вы можете использовать этот шаблон в команде CREATE DATABASE, чтобы создать исходную базу данных без изменений, внесенных в template1

template1

Шаблон базы данных. Этот шаблон содержит те же данные, что и template0, но вы можете его изменить. По умолчанию он будет использоваться в качестве шаблона для каждой новой базы данных, создающейся с помощью команды CREATE DATABASE. Вы можете добавить в этот шаблон объекты, которые должны быть во всех новых базах данных (например, таблицы), или установить процедурные языки

Просмотр существующих баз данных

Можно использовать метакоманду psql \l или опцию командной строки -l, чтобы просмотреть существующие базы данных:

$ psql

\l
$ psql -l

Результат:

   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres

Также можно выбрать данные из каталога pg_database:

SELECT oid, datname, datistemplate, datallowconn FROM pg_database;

Результат:

  oid  |  datname  | datistemplate | datallowconn
-------+-----------+---------------+--------------
 14486 | postgres  | f             | t
     1 | template1 | t             | t
 14485 | template0 | t             | f

В столбце datallowconn вы можете увидеть, что подключения к template0 не разрешены.

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

SELECT current_database();

Чтобы определить размер базы данных, используйте функции pg_size_pretty и pg_database_size:

SELECT pg_size_pretty(pg_database_size('postgres'));

Создание базы данных

Чтобы создать свою первую базу данных, подключитесь к базе данных postgres. Утилита psql по умолчанию подключается к postgres. Также необходимо иметь соответствующие привилегии для этой операции или быть суперпользователем.

Выполните команду CREATE DATABASE, чтобы создать базу данных. Следующая команда создает базу данных book_store:

CREATE DATABASE book_store;

Текущая роль автоматически становится владельцем новой базы данных. Также можно указать другого владельца. Код ниже делает role1 владельцем созданной базы данных book_store:

CREATE DATABASE book_store OWNER role1;

Вы также можете указать шаблон для новой базы данных. Следующий код создает базу данных book_store, копируя template0:

CREATE DATABASE book_store TEMPLATE template0;

Удаление базы данных

Только владелец базы данных или суперпользователь может удалить базу данных. Это действие удаляет все объекты, содержащиеся в базе данных. Удаление базы данных является необратимой операцией.

Используйте команду DROP DATABASE, чтобы удалить базу данных:

DROP DATABASE book_store;

Команду DROP DATABASE невозможно выполнить, пока есть хотя бы одно подключение к указанной базе данных. Однако можно подключиться к любой другой базе, включая template1. База данных template1 может быть единственным вариантом подключения, если нужно удалить последнюю пользовательскую базу данных кластера.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней