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

Уровень 3.0

Расширение file_fdw​

  1. В БД student имеется таблица tab2lr. Проверьте ее наличие. При отсутствии создайте.

    Подключитесь к базе данных.

    [postgres@ServerName ~]$ psql -d student
    psql (15.5)
    Type "help" for help.

    Проверьте список схем.

    postgres@student=# \dn
    List of schemas
    Name | Owner
    --------+-------------------
    public | pg_database_owner
    student | student
    (2 rows)

    Проверьте структуру таблицы student.tab2lr.

    postgres@student=# \d student.tab2lr
    Table "student.tab2lr"
    Column | Type | Collation | Nullable | Default
    -------+---------+-----------+----------+---------
    id | integer | | not null |
    msg | text | | |
    Indexes:
    "tab2lr_pkey" PRIMARY KEY, btree (id)

    Если таблицы нет, создайте ее и заполните данными.

    postgres@student=# CREATE TABLE student.tab2lr(id int PRIMARY KEY, msg text);
    CREATE TABLE

    Вставьте данные.

    postgres@student=# INSERT INTO student.tab2lr VALUES (1, 'Первая запись.'),(2, 'Вторая.'),(3, 'Теперь - третья.'),(4, 'Четвертая. Ну и хватит, пожалуй.');
    INSERT 0 4
  2. Выгрузите с помощью COPY данные из этой таблицы в формате CSV.

    Выполните COPY.

    postgres@student=# COPY student.tab2lr TO '/tmp/data.csv' (FORMAT CSV);
    COPY 4

    Проверьте содержимое файла.

    postgres@student=# \! cat /tmp/data.csv
    1,Первая запись.
    2,Вторая.
    3,Теперь - третья.
    4,Четвертая. Ну и хватит, пожалуй.

    Файл data.csv содержит 4 строки с данными таблицы.

  3. Получите список подключенных расширений.

    postgres@student=# \dx
    Список установленных расширений
    Имя | Версия | Схема | Описание
    --------+--------+------------+------------------------------
    plpgsql | 1.1 | pg_catalog | PL/pgSQL procedural language
    (1 row)

    Подключено только расширение plpgsql — file_fdw еще не установлено.

  4. Подключите расширение file_fdw.

    Выполните CREATE EXTENSION.

    postgres@student=# CREATE EXTENSION file_fdw;
    CREATE EXTENSION

    Проверьте, что расширение подключилось.

    postgres@student=# \dx
    List of installed extensions
    Name | Version | Schema | Description
    ---------+---------+------------+-------------------------------------------
    file_fdw | 1.0 | public | foreign-data wrapper for flat file access
    plpgsql | 1.1 | pg_catalog | PL/pgSQL procedural language
    (2 rows)

    Расширение file_fdw подключено и доступно в схеме public.

  5. Создайте серверный объект.

    Выполните CREATE SERVER.

    postgres@student=# CREATE SERVER srv FOREIGN DATA WRAPPER file_fdw;
    CREATE SERVER

    Проверьте созданный сервер.

    postgres@student=# \x \des+ \x
    Expanded display is on.
    List of foreign servers
    -[ RECORD 1 ]--------+---------
    Name | srv
    Owner | postgres
    Foreign-data wrapper | file_fdw
    Access privileges |
    Type |
    Version |
    FDW options |
    Description |

    Expanded display is off.

    Сервер srv создан с FDW file_fdw.

  6. Создайте внешнюю таблицу.

    Выполните CREATE FOREIGN TABLE.

    postgres@student=# CREATE FOREIGN TABLE f_data ( id int, msg text ) SERVER srv
    postgres@student-# OPTIONS (filename '/tmp/data.csv', format 'csv');
    Разбор команды

    • CREATE FOREIGN TABLE f_data — создание внешней таблицы с именем f_data;
    • (id int, msg text) — определение колонок таблицы (тип и количество совпадают с исходной таблицей);
    • SERVER srv — привязка к серверному объекту srv (FDW file_fdw);
    • OPTIONS (filename '/tmp/data.csv', format 'csv') — параметры FDW: путь к CSV-файлу и формат данных.
    CREATE FOREIGN TABLE

    Проверьте структуру внешней таблицы.

    postgres@student=# \d f_data
    Foreign table "public.f_data"
    Column | Type | Collation | Nullable | Default | FDW options
    -------+---------+-----------+----------+---------+-------------
    id | integer | | | |
    msg | text | | | |
    Server: srv
    FDW options: (filename '/tmp/data.csv', format 'csv')

    Внешняя таблица f_data привязана к файлу /tmp/data.csv.

  7. Проверьте возможность выполнения запросов.

    Выполните SELECT.

    postgres@student=# SELECT * FROM f_data;
    id | msg
    ---+----------------------------------
    1 | Первая запись.
    2 | Вторая.
    3 | Теперь - третья.
    4 | Четвертая. Ну и хватит, пожалуй.
    (4 rows)

    Данные из CSV-файла успешно прочитаны через внешнюю таблицу.

  8. Удалите внешнюю таблицу, сервер и расширение.

    Выполните команды удаления в обратном порядке.

    postgres@student=# DROP FOREIGN TABLE f_data;
    DROP FOREIGN TABLE
    postgres@student=# DROP SERVER srv;
    DROP SERVER
    postgres@student=# DROP EXTENSION file_fdw;
    DROP EXTENSION

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

Вопрос 1

Какие действия необходимы для создания обертки внешних данных через file_fdw? Выберите все верные варианты.

Вопрос 2

Что делает команда COPY student.tab2lr TO '/tmp/data.csv' (FORMAT CSV)?

Вопрос 3

Какая метакоманда выводит список подключенных расширений в psql?

Вопрос 4

Какая команда подключает расширение file_fdw?

Вопрос 5

Какие опции указываются в команде CREATE FOREIGN TABLE f_data (id int, msg text) SERVER srv OPTIONS (...) для подключения к CSV-файлу? Выберите все верные варианты.

Вопрос 6

Что произойдет, если выполнить SELECT * FROM f_data после создания внешней таблицы для CSV-файла?