Базы данных

Обзор

База данных (БД) — это набор данных, физически хранимых вместе. Каждый ADB-кластер может содержать несколько баз данных. Однако клиентские приложения могут обращаться не более чем к одной базе данных ADB в рамках одного соединения — кросс-запросы между различными базами данных невозможны по причине жесткого разделения БД.

В каждом ADB-кластере существует несколько шаблонных (template) и используемых по умолчанию (default) БД. Их описание приведено в таблице ниже.

Шаблонные и используемые по умолчанию БД
Название Описание

adb

Можно использовать в качестве БД по умолчанию для клиентских подключений. Все необходимые объекты можно добавлять в эту БД. Создается автоматически через ADCM — после применения действия Create database к развернутому ADB-кластеру. Тем не менее, при необходимости можно создать и дополнительные пользовательские БД. Обратите внимание, что имя БД adb можно изменить перед применением действия Create database — в конфигурационных параметрах сервиса ADB (параметр Name of default database в секции ADB → Main)

diskquota

Используется ADB-расширением Diskquota. Это расширение предназначено для ограничения дискового пространства, выделяемого под схемы и роли

postgres

Как правило, используется в качестве БД по умолчанию для административных задач. Например, в процессах запуска, в процессе обнаружения взаимных блокировок Global Deadlock Detector и так далее

template0

Этот шаблон используется для внутренних нужд СУБД. Возможно использование template0 в качестве шаблона при создании "чистых" БД, содержащих только стандартные объекты, определяемые при инциализации СУБД. Не следует удалять или изменять template0

template1

Используется в качестве шаблона для новых БД, создаваемых с помощью команды CREATE DATABASE — за исключением случаев, когда явно указывается иной шаблон. Создание объектов в template1 не рекомендуется

ВНИМАНИЕ
Не рекомендуется удалять либо изменять БД, приведенные выше.

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

Для получения списка БД в текущем ADB-кластере можно использовать несколько способов. Два из них описаны ниже.

Способ 1 — psql

При работе с терминальным клиентом psql для вывода списка БД можно воспользоваться мета-командой \l. Для этого необходимо:

  1. Подключиться к Master-серверу ADB (например, через SSH) под пользователем gpadmin, который создается по умолчанию:

    $ sudo su - gpadmin
  2. Вывести список БД:

    $ psql -l

    Результат команды:

                                   List of databases
       Name    |  Owner  | Encoding |  Collate   |   Ctype    |  Access privileges
    -----------+---------+----------+------------+------------+---------------------
     adb       | gpadmin | UTF8     | en_US.utf8 | en_US.utf8 | =Tc/gpadmin        +
               |         |          |            |            | gpadmin=CTc/gpadmin
     diskquota | gpadmin | UTF8     | en_US.utf8 | en_US.utf8 |
     postgres  | gpadmin | UTF8     | en_US.utf8 | en_US.utf8 |
     template0 | gpadmin | UTF8     | en_US.utf8 | en_US.utf8 | =c/gpadmin         +
               |         |          |            |            | gpadmin=CTc/gpadmin
     template1 | gpadmin | UTF8     | en_US.utf8 | en_US.utf8 | =c/gpadmin         +
               |         |          |            |            | gpadmin=CTc/gpadmin
    (5 rows)

Способ 2 — SQL-запрос

После подключения к выбранной БД через psql-клиент (или любую иную клиентскую программу) можно выполнить специальный SQL-запрос, который извлекает список БД из таблицы системного каталога pg_catalog.pg_database. Для этого необходимо:

  1. Подключиться к Master-серверу ADB (например, через SSH) под пользователем gpadmin, который создается по умолчанию:

    $ sudo su - gpadmin
  2. Подключиться к БД через psql (или иную клиентскую программу):

    $ psql adb

    Результат команды:

    psql (9.4.24)
    Type "help" for help.
  3. Выполнить следующий SQL-запрос для вывода всех БД в ADB-кластере:

    SELECT * from pg_catalog.pg_database ORDER BY datname;

    Результат команды:

      datname  | datdba | encoding | datcollate |  datctype  | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | datminmxid | dattablespace |              datacl
    -----------+--------+----------+------------+------------+---------------+--------------+--------------+---------------+--------------+------------+---------------+-----------------------------------
     adb       |     10 |        6 | en_US.utf8 | en_US.utf8 | f             | t            |           -1 |         12809 |          702 |          1 |          1663 | {=Tc/gpadmin,gpadmin=CTc/gpadmin}
     diskquota |     10 |        6 | en_US.utf8 | en_US.utf8 | f             | t            |           -1 |         12809 |          948 |          1 |          1663 |
     postgres  |     10 |        6 | en_US.utf8 | en_US.utf8 | t             | t            |           -1 |         12809 |         1881 |          1 |          1663 |
     template0 |     10 |        6 | en_US.utf8 | en_US.utf8 | t             | f            |           -1 |         12809 |          702 |          1 |          1663 | {=c/gpadmin,gpadmin=CTc/gpadmin}
     template1 |     10 |        6 | en_US.utf8 | en_US.utf8 | t             | t            |           -1 |         12809 |         1799 |          1 |          1663 | {=c/gpadmin,gpadmin=CTc/gpadmin}
    (5 rows)

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

Чтобы создать новую базу данных, необходимо использовать команду CREATE DATABASE и затем указать имя базы данных.

В следующем примере создается новая база данных books_store:

CREATE DATABASE books_store;

Результат команды:

CREATE DATABASE

Чтобы подключиться к новой базе данных, можно использовать psql-команду \c:

\c books_store

Результат команды:

You are now connected to database "books_store" as user "gpadmin".
books_store=#
ПРИМЕЧАНИЕ

Чтобы создать базу данных, необходимо иметь соответствующие права для этой операции либо быть суперпользователем. Если у вас нет таких привилегий, пожалуйста, свяжитесь с вашим администратором БД.

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