Перейти к основному содержимому

Уровень 3.0

Предусловие: пройдены предыдущие практические задания: «Архитектура», «Транзакции».

Практика. Базы данных​

Подготовительный этап​

  1. Остановите сервер:

    [student@ServerName ~]$ sudo systemctl stop postgresql
    [student@ServerName ~]$ sudo systemctl status postgresql
    ● postgresql.service - Runners PostgreSQL service
    Loaded: loaded (/etc/systemd/system/postgresql.service; disabled; vendor preset: disabled)
    Active: inactive (dead)
  2. В сеансе postgres переименуйте каталог данных кластера и создайте пустой новый каталог со старым именем — оно задано переменной окружения PGDATA:

    [student@ServerName ~]$ sudo su - postgres
    [postgres@ServerName ~]$ cd $PGDATA
    [postgres@ServerName data]$ cd ..
    [postgres@ServerName 06]$ pwd
    /pgdata/06
    [postgres@ServerName 06]$ ls
    data
    [postgres@ServerName 06]$ mv -v data{,.bak}
    renamed 'data' -> 'data.bak'
    [postgres@ServerName 06]$ ls
    data.bak
    [postgres@ServerName 06]$ mkdir $PGDATA
    [postgres@ServerName 06]$ ls
    data data.bak

Основной этап​

  1. Проверьте настройки системной локали:

    [postgres@ServerName 06]$ locale
    LANG=en_US.UTF-8
    LC_CTYPE="en_US.UTF-8"
    LC_NUMERIC="en_US.UTF-8"
    LC_TIME="en_US.UTF-8"
    LC_COLLATE="en_US.UTF-8"
    LC_MONETARY="en_US.UTF-8"
    LC_MESSAGES="en_US.UTF-8"
    LC_PAPER="en_US.UTF-8"
    LC_NAME="en_US.UTF-8"
    LC_ADDRESS="en_US.UTF-8"
    LC_TELEPHONE="en_US.UTF-8"
    LC_MEASUREMENT="en_US.UTF-8"
    LC_IDENTIFICATION="en_US.UTF-8"
    LC_ALL=en_US.UTF-8
  2. Выведите список настроек, в соответствии с которыми initdb будет создавать кластер баз данных:

    [postgres@ServerName 06]$ initdb -s
    The files belonging to this database system will be owned by user "postgres".
    This user must also own the server process.

    VERSION=15.5
    PGDATA=/pgdata/06/data
    share_path=/usr/pangolin-{major.minor}/share
    PGPATH=/usr/pangolin-{major.minor}/bin
    POSTGRES_SUPERUSERNAME=postgres
    POSTGRES_BKI=/usr/pangolin-{major.minor}/share/postgres.bki
    POSTGRESQL_CONF_SAMPLE=/usr/pangolin-{major.minor}/share/postgresql.conf.sample
    PG_HBA_SAMPLE=/usr/pangolin-{major.minor}/share/pg_hba.conf.sample
    PG_IDENT_SAMPLE=/usr/pangolin-{major.minor}/share/pg_ident.conf.sample
    PG_QUOTA_SAMPLE=/usr/pangolin-{major.minor}/share/pg_quota.conf.sample

    Опция -s (simulate) показывает настройки, с которыми будет создан кластер, без фактического создания.

  3. Создайте кластер данных командой initdb с настройками по умолчанию. Не указывайте опцию -k или --data-checksums. Требуется создать кластер данных без защиты данных контрольными суммами:

    [postgres@ServerName 06]$ initdb
    The files belonging to this database system will be owned by user "postgres".
    This user must also own the server process.

    The database cluster will be initialized with locale "en_US.UTF-8".
    The default database encoding has accordingly been set to "UTF8".
    The default text search configuration will be set to "english".

    Data page checksums are disabled.

    fixing permissions on existing directory /pgdata/06/data ... ok
    creating subdirectories ... ok
    selecting dynamic shared memory implementation ... posix
    selecting default max_connections ...
    "/usr/pangolin-{major.minor}/bin/postgres" --check -F -c log_checkpoints=false -c is_initdb=true -c max_connections=100 -c shared_buffers=1000 -c dynamic_shared_memory_type=posix < "/dev/null" > "/dev/null" 2>&1
    100
    selecting default shared_buffers ... 128MB
    selecting default time zone ... Europe/Moscow
    creating configuration files ... ok
    running bootstrap script ... WARNING: 01000: Force disable "enable_vault_certificates_cache" vault credentials does not exists
    LOCATION: check_enable_certificates_cache, security.c:112
    WARNING: 01000: Force disable "enable_vault_params_cache", vault credentials does not exists
    LOCATION: check_enable_params_cache, security.c:101
    2025-05-24 13:59:42.897 MSK [5218] WARNING: /usr/pangolin-{major.minor}/bin/postgres: Could not init KMS connection. Error: -52 (failed to lock file)
    ok
    performing post-bootstrap initialization ... WARNING: 01000: Force disable "enable_vault_certificates_cache" vault credentials does not exists
    LOCATION: check_enable_certificates_cache, security.c:112
    WARNING: 01000: Force disable "enable_vault_params_cache", vault credentials does not exists
    LOCATION: check_enable_params_cache, security.c:101
    2025-05-24 13:59:43.137 MSK [5220] WARNING: postgres: Could not init KMS connection. Error: -52 (failed to lock file)
    ok
    syncing data to disk ... ok

    initdb: warning: enabling "trust" authentication for local connections
    initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.

    Success. You can now start the database server using:

    pg_ctl -D /pgdata/06/data -l logfile start
  4. Проверьте, что сервер может стартовать с вновь созданным кластером данных:

    [postgres@ServerName 06]$ exit
    logout
    [student@ServerName ~]$ sudo systemctl start postgresql
    [student@ServerName ~]$ sudo systemctl status postgresql
    ● postgresql.service - Runners PostgreSQL service
    Loaded: loaded (/etc/systemd/system/postgresql.service; disabled; vendor preset: disabled)
    Active: active (running) since Sat 2025-05-24 14:02:11 MSK; 6s ago
    Process: 5280 ExecStartPre=/bin/mkdir -p /var/run/postgresql (code=exited, status=0/SUCCESS)
    Process: 5281 ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql (code=exited, status=0/SUCCESS)
    Main PID: 5282 (postgres)
    Tasks: 10 (limit: 2362)
    Memory: 28.9M
    CGroup: /system.slice/postgresql.service
    ├─5282 /usr/pangolin-{major.minor}/bin/postgres -D /pgdata/06/data
    ├─5284 postgres: checkpointer
    ├─5285 postgres: background writer
    ├─5287 postgres: idle sessions terminator
    ├─5288 postgres: walwriter
    ├─5289 postgres: autovacuum launcher
    ├─5290 postgres: autounite launcher
    ├─5291 postgres: integrity check launcher
    ├─5292 postgres: license checker
    └─5293 postgres: logical replication launcher
    [student@ServerName ~]$ ps f -C postgres
    PID TTY STAT TIME COMMAND
    5282 ? Ss 0:00 /usr/pangolin-{major.minor}/bin/postgres -D /pgdata/06/data
    5284 ? Ss 0:00 \_ postgres: checkpointer
    5285 ? Ss 0:00 \_ postgres: background writer
    5287 ? Ss 0:00 \_ postgres: idle sessions terminator
    5288 ? Ss 0:00 \_ postgres: walwriter
    5289 ? Ss 0:00 \_ postgres: autovacuum launcher
    5290 ? Ss 0:00 \_ postgres: autounite launcher
    5291 ? Ss 0:00 \_ postgres: integrity check launcher
    5292 ? Ss 0:00 \_ postgres: license checker
    5293 ? Ss 0:00 \_ postgres: logical replication launcher
  5. Остановите сервер. Теперь необходимо убедиться в том, что контрольные суммы не включены:

    [student@ServerName ~]$ sudo systemctl stop postgresql
    [student@ServerName ~]$ sudo su - postgres
    [postgres@ServerName ~]$ pg_checksums -D $PGDATA -c
    pg_checksums: error: data checksums are not enabled in cluster

    Команда pg_checksums с опцией -c проверяет, включены ли контрольные суммы.

  6. Включите контрольные суммы и снова проверьте. Сервер должен быть остановлен:

    [postgres@ServerName ~]$ pgrep -l postgres

    pgrep -l postgres ищет процессы с именем postgres и выводит их PID и имя. Пустой вывод подтверждает, что сервер остановлен.

    [postgres@ServerName ~]$ pg_checksums -D $PGDATA -e
    Checksum operation completed
    Files scanned: 1011
    Blocks scanned: 3435
    Files written: 827
    Blocks written: 3435
    pg_checksums: syncing data directory
    pg_checksums: updating control file
    Checksums enabled in cluster

    Контрольные суммы включены.

Начальная настройка экземпляра​

  1. В сеансе postgres перейдите в каталог PGDATA и внесите изменения в конфигурационный файл postgresql.conf, предварительно сохранив его копию:

    [postgres@ServerName ~]$ cd $PGDATA
    [postgres@ServerName data]$ cp -v postgresql.conf{,.orig}
    'postgresql.conf' -> 'postgresql.conf.orig

    Настройка для прослушивания всех интерфейсов:

    [postgres@ServerName data]$ vi postgresql.conf
    listen_addresses = '*'

    Разрешенные дополнительные методы аутентификации:

    [postgres@ServerName data]$ vi postgresql.conf
    enabled_extra_auth_methods = 'scram-sha-256, peer, cert'

    Разрешение запоминать историю выполненных команд в psql:

    [postgres@ServerName data]$ vi postgresql.conf
    psql.save_history = 'on'
  2. Сохраните резервную копию файла настроек аутентификации pg_hba.conf:

    [postgres@ServerName data]$ cp -v pg_hba.conf{,.orig}
    'pg_hba.conf' -> 'pg_hba.conf.orig'
  3. Настройка разрешений аутентификации в pg_hba.conf. Метод аутентификации trust необходимо заменить. Поставьте метод peer для метода подключения local и scram-sha-256 для метода аутентификации host. Ниже приводятся автоматические команды, редактирующие файл pg_hba.conf с помощью потокового редактора sed. Если это вызывает затруднения, воспользуйтесь привычным текстовым редактором и просто скопируйте в него результат редактирования, который будет показан ниже.

    Замена trust методом peer для локальных подключений через Unix-сокет:

    [postgres@ServerName data]$ sed -i 's/\(^local.*\)trust/\1 peer/' pg_hba.conf

    Замена trust методом scram-sha-256 для сетевых подключений host:

    [postgres@ServerName data]$ sed -i 's/\(^host.*\)trust/\1 scram-sha-256/' pg_hba.conf

    Замена IPv4-адреса 127.0.0.1/32 разрешением подключаться с любых сетевых интерфейсов данного хоста:

    [postgres@ServerName data]$ sed -i 's/127\.0\.0\.1\/32/samehost /' pg_hba.conf

    Результат (показаны последние 13 строк файла):

    [postgres@ServerName data]$ tail -13 pg_hba.conf
    # TYPE DATABASE USER ADDRESS METHOD

    # "local" is for Unix domain socket connections only
    local all all peer
    # IPv4 local connections:
    host all all samehost scram-sha-256
    # IPv6 local connections:
    host all all ::1/128 scram-sha-256
    # Allow replication connections from localhost, by a user with the
    # replication privilege.
    local replication all peer
    host replication all samehost scram-sha-256
    host replication all ::1/128 scram-sha-256

    Суть таких настроек – при локальных подключениях будет разрешен вход без пароля зарегистрированным в ОС пользователям, имена которых совпадают с именами ролей в PostgreSQL, например, postgres. Подключения через сеть потребуют ввода паролей (пока не установлены).

  4. Запускайте сервер из-под учетной записи student, так как postgres не имеет доступ к sudo (и ни в коем случае не должен иметь доступ к sudo):

    [postgres@ServerName 06]$ exit
    logout
    [student@ServerName ~]$ sudo systemctl start postgresql
    [student@ServerName ~]$ ps f -C postgres
    PID TTY STAT TIME COMMAND
    5363 ? Ss 0:00 /usr/pangolin-{major.minor}/bin/postgres -D /pgdata/06/data
    5368 ? Ss 0:00 \_ postgres: checkpointer
    5369 ? Ss 0:00 \_ postgres: background writer
    5371 ? Ss 0:00 \_ postgres: idle sessions terminator
    5372 ? Ss 0:00 \_ postgres: walwriter
    5373 ? Ss 0:00 \_ postgres: autovacuum launcher
    5374 ? Ss 0:00 \_ postgres: autounite launcher
    5375 ? Ss 0:00 \_ postgres: integrity check launcher
    5376 ? Ss 0:00 \_ postgres: license checker
    5377 ? Ss 0:00 \_ postgres: logical replication launcher

Базы данных​

  1. Из сеанса пользователя ОС postgres подключитесь к экземпляру:

    [student@ServerName ~]$ sudo su - postgres
    [postgres@ServerName ~]$ psql
    psql (15.5)
    Type "help" for help.
    postgres@postgres=# \conninfo
    You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432".
  2. Получите список баз данных:

    postgres@postgres=# \l
    List of databases
    Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges
    -----------+----------+----------+-------------+-------------+------------+-----------------+-----------------------
    postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc |
    template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | =c/postgres +
    | | | | | | | postgres=CTc/postgres
    template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | =c/postgres +
    | | | | | | | postgres=CTc/postgres
    (3 rows)
  3. Получите список ролей:

    postgres@postgres=# \du
    List of roles
    Role name | Attributes | Member of
    -----------+------------------------------------------------------------+-----------
    postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
  4. Задайте суперпользователю postgres пароль для обеспечения возможности входить в сеанс с помощью парольной аутентификации, которая потребуется при сетевом подключении:

    postgres@postgres=# ALTER ROLE postgres PASSWORD 'postgres';
    ALTER ROLE
  5. Зарегистрируйте роль student с правом входа в сеанс и паролем student:

    postgres@postgres=# CREATE USER student PASSWORD 'student';
    CREATE ROLE
    postgres@postgres=# \du
    List of roles
    Role name | Attributes | Member of
    -----------+------------------------------------------------------------+-----------
    postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
    student | | {}
  6. Создайте БД student, принадлежащую роли student:

    postgres@postgres=# CREATE DATABASE student OWNER student;
    CREATE DATABASE
    postgres@postgres=# \l student
    List of databases
    Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges
    ---------+---------+----------+-------------+-------------+------------+-----------------+-------------------
    student | student | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc |
    (1 row)
  7. Создайте БД koi8_db с кодировкой KOI8R, отличающейся от кодировки кластера en_US.UTF-8. Для этого необходимо воспользоваться шаблоном template0:

    postgres@postgres=# CREATE DATABASE koi8_db TEMPLATE=template0 ENCODING='KOI8R' LOCALE='ru_RU.koi8r';
    CREATE DATABASE
    postgres@postgres=# \x \l *_db \x
    Expanded display is on.
    List of databases
    -[ RECORD 1 ]-----+------------
    Name | koi8_db
    Owner | postgres
    Encoding | KOI8R
    Collate | ru_RU.koi8r
    Ctype | ru_RU.koi8r
    ICU Locale |
    Locale Provider | libc
    Access privileges |

    Expanded display is off.

Настройка шаблона template1​

  1. Подключитесь к БД template1 — шаблону для создания БД по умолчанию:

    postgres@postgres=# \c template1
    You are now connected to database "template1" as user "postgres".
  2. Создайте схему prof для размещения объектов расширения:

    postgres@template1=# CREATE SCHEMA prof;
    CREATE SCHEMA
  3. Подключите расширение pg_profile с опцией каскадной установки зависимостей:

    postgres@template1=# CREATE EXTENSION pg_profile CASCADE SCHEMA prof;
    NOTICE: installing required extension "dblink"
    CREATE EXTENSION
  4. Проверьте, что расширение установлено:

    postgres@template1=# \dx
    List of installed extensions
    Name | Version | Schema | Description
    ------------+---------+------------+--------------------------------------------------------------
    dblink | 1.2.1 | prof | connect to other PostgreSQL databases from within a database
    pg_profile | 4.7.a | prof | PostgreSQL load profile repository and report builder
    plpgsql | 1.1 | pg_catalog | PL/pgSQL procedural language
    (3 rows)
  5. Подключитесь к БД postgres и создайте БД prof_db, используя шаблон по умолчанию:

    postgres@template1=# \c postgres
    You are now connected to database "postgres" as user "postgres".
    postgres@postgres=# CREATE DATABASE prof_db;
    CREATE DATABASE
    postgres@postgres=# \x \l pro* \x
    Expanded display is on.
    List of databases
    -[ RECORD 1 ]-----+------------
    Name | prof_db
    Owner | postgres
    Encoding | UTF8
    Collate | en_US.UTF-8
    Ctype | en_US.UTF-8
    ICU Locale |
    Locale Provider | libc
    Access privileges |

    Expanded display is off.
  6. Подключитесь к БД prof_db и проверьте наличие расширения:

    postgres@postgres=# \c prof_db
    You are now connected to database "prof_db" as user "postgres".
    postgres@prof_db=# \dx
    List of installed extensions
    Name | Version | Schema | Description
    ------------+---------+------------+--------------------------------------------------------------
    dblink | 1.2.1 | prof | connect to other PostgreSQL databases from within a database
    pg_profile | 4.7.a | prof | PostgreSQL load profile repository and report builder
    plpgsql | 1.1 | pg_catalog | PL/pgSQL procedural language
    (3 rows)
    postgres@prof_db=# \dx+ pg_profile
    Objects in extension "pg_profile"
    Object description
    ----------------------------------------------------------------------------------------------
    ...
    view prof.v_sample_settings
    view prof.v_sample_stat_indexes
    view prof.v_sample_stat_tables
    view prof.v_sample_stat_tablespaces
    view prof.v_sample_stat_user_functions
    view prof.v_sample_timings
    (258 rows)
  7. Подключитесь к шаблону template1 и удалите расширение вместе с зависимыми объектами:

    postgres@prof_db=# \c template1
    You are now connected to database "template1" as user "postgres".
    postgres@template1=# DROP EXTENSION pg_profile CASCADE;
    DROP EXTENSION
    postgres@template1=# \dn
    List of schemas
    Name | Owner
    --------+-------------------
    prof | postgres
    public | pg_database_owner
    (2 rows)
    postgres@template1=# DROP SCHEMA prof CASCADE;
    NOTICE: drop cascades to extension dblink
    DROP SCHEMA
    postgres@template1=# \dx
    List of installed extensions
    Name | Version | Schema | Description
    ------------+---------+------------+-------------------------------------------
    plpgsql | 1.1 | pg_catalog | PL/pgSQL procedural language
    (1 row)
    postgres@template1=# exit
    [postgres@ServerName ~]$ exit
    logout

Схемы​

  1. Подключитесь к БД student пользователем student:

    [student@ServerName ~]$ psql
    psql (15.5)
    Type "help" for help.
    student@student=> \conninfo
    You are connected to database "student" as user "student" via socket in "/tmp" at port "5432".
  2. Получите список схем в БД:

    student@student=> \dn
    List of schemas
    Name | Owner
    --------+-------------------
    public | pg_database_owner
    (1 row)
  3. Создайте таблицу stab и заполните ее случайными данными:

    student@student=> CREATE TABLE stab (
    id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, nmr real DEFAULT random(),
    dte timestamp DEFAULT now(),
    msg text );
    CREATE TABLE
    student@student=> INSERT INTO stab(msg) SELECT 'A' FROM generate_series(1,100000);
    INSERT 0 100000
  4. Проверьте, в какой схеме была создана таблица:

    student@student=> \d
    List of relations
    Schema | Name | Type | Owner
    --------+-------------+----------+---------
    public | stab | table | student
    public | stab_id_seq | sequence | student
    (2 rows)

    Схема public.

  5. Создайте схему student:

    student@student=> CREATE SCHEMA student;
    CREATE SCHEMA
    student@student=> \dn
    List of schemas
    Name | Owner
    ---------+-------------------
    public | pg_database_owner
    student | student
    (2 rows)
  6. Создайте еще одну таблицу stab без полей:

    student@student=> CREATE TABLE stab();
    CREATE TABLE
    student@student=> \d
    List of relations
    Schema | Name | Type | Owner
    ---------+-------------+----------+---------
    public | stab_id_seq | sequence | student
    student | stab | table | student
    (2 rows)
    student@student=> SELECT count(*) FROM stab;
    count
    -------
    0
    (1 row)

    Таблица пустая.

  7. Определите, где находится первая таблица stab:

    student@student=> \dt *.stab
    List of relations
    Schema | Name | Type | Owner
    ---------+------+-------+---------
    public | stab | table | student
    student | stab | table | student
    (2 rows)
  8. Проверьте настройку пути поиска в схемах, определите реальный путь поиска и имя схемы, в которой будут создаваться новые объекты:

    student@student=> \dconfig search_path
    List of configuration parameters
    Parameter | Value
    -------------+-----------------
    search_path | "$user", public
    (1 row)
    student@student=> SELECT current_schemas(true);
    current_schemas
    -----------------------------
    {pg_catalog,student,public}
    (1 row)
    student@student=> SELECT current_schema();
    current_schema
    ----------------
    student
    (1 row)

    Параметр search_path, задающий последовательность схем для поиска в них объектов, настроен по умолчанию: "$user", public. Сначала производится поиск объектов в одноименной схеме с именем пользователя, если такая схема существует. Далее в public.

    Реальный путь: pg_catalog, student, public. Схема pg_catalog объектов системного каталога просматривается первой.

    Схема, в которой будут создаваться новые объекты: student.

  9. Создайте временную таблицу stab с произвольной структурой:

    student@student=> CREATE TEMP TABLE stab(n numeric);
    CREATE TABLE
  10. Получите список всех таблиц с именем stab:

    student@student=> \dt *.stab
    List of relations
    Schema | Name | Type | Owner
    -----------+------+-------+---------
    pg_temp_5 | stab | table | student
    public | stab | table | student
    student | stab | table | student
    (3 rows)
  11. Снова проверьте реальный путь поиска:

    student@student=> SELECT current_schemas(true);
    current_schemas
    ---------------------------------------
    {pg_temp_5,pg_catalog,student,public}
    (1 row)
  12. Рестартуйте сессию, проверьте, какие таблицы stab остались и какой теперь реальный путь поиска:

    student@student=> \c
    You are now connected to database "student" as user "student".
    student@student=> \dt *.stab
    List of relations
    Schema | Name | Type | Owner
    ---------+------+-------+---------
    public | stab | table | student
    student | stab | table | student
    (2 rows)
    student@student=> SELECT current_schemas(true);
    current_schemas
    -----------------------------
    {pg_catalog,student,public}
    (1 row)

На этом лабораторную работу можно считать завершенной.

Самопроверка​

Вопрос 1

Кластер Pangolin DB инициализирован следующей командой shell:

initdb --locale="en_US.UTF-8"

С использованием каких SQL-команд НЕ может быть создана база данных с локалью "ru_RU.UTF-8"?

Вопрос 2

В кластере Pangolin DB имеются следующие базы данных:

  • postgres
  • template0
  • template1

C использованием psql выполнено подключение к базе данных template1. В сеансе psql выполнены следующие команды:

template1=# \dx
Список установленных расширений
Имя         | Версия |   Схема    |                                Описание
--------------------+--------+------------+------------------------------------------------------------------------
pg_stat_statements | 1.10   | public     | track planning and execution statistics of all SQL statements executed
plpgsql            | 1.0    | pg_catalog | PL/pgSQL procedural language
(2 строки)

template1=# \c postgres
Вы подключены к базе данных "postgres" как пользователь "postgres".

postgres=# \dx
Список установленных расширений
Имя       | Версия |   Схема    |                       Описание
----------------+--------+------------+-------------------------------------------------------
pg_buffercache | 1.3    | public     | examine the shared buffer cache
plpgsql        | 1.0    | pg_catalog | PL/pgSQL procedural language
(4 строки)

postgres=# CREATE DATABASE ext_db;
CREATE DATABASE

postgres=# \c ext_db
Вы подключены к базе данных "ext_db" как пользователь "postgres".

ext_db=# CREATE EXTENSION dblink;
CREATE EXTENSION

ext_db=# \dx

Какие из приведенных расширений будут выданы последней командой?

Вопрос 3

В базе данных dev_db имеется три схемы: pg_catalog, public и developer, а также пользователь developer, обладающий необходимыми привилегиями для обращения к объектам в указанных схемах.

C использованием psql выполнено подключение к базе данных dev_db пользователем developer и выполнены следующие команды:

dev_db=> CREATE TEMP TABLE tmp_table AS SELECT 1;
SELECT 1

dev_db=> SHOW search_path;
search_path
-----------------
"$user", public
(1 строка)

dev_db=> SELECT * FROM any_table;

В какой последовательности будут просматриваться схемы при поиске в них таблицы any_table при выполнении последнего запроса?

1
2
3
4
5