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

Практикум

Расширение file_fdw

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

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

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

    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)

    Если таблицы нет, выполните команды:

    student=# CREATE TABLE tab2lr(id int PRIMARY KEY, msg text); CREATE TABLE
    student=# INSERT INTO tab2lr VALUES (1, 'Первая запись.'),(2, 'Вторая.'),(3, 'Теперь - третья.'); INSERT 0 3
  2. Выгрузите с помощью COPY данные из этой таблицы в формате CSV:

    student=# COPY student.tab2lr TO '/tmp/data.csv' (FORMAT CSV);
    COPY 4
    student=# \! cat /tmp/data.csv
    1,Первая запись.
    2,Вторая.
    3,Теперь - третья.
    4,"Четвертая. Ну и хватит, пожалуй."
  3. Получите список подключенных расширений:

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

    student=# CREATE EXTENSION file_fdw ;
    CREATE EXTENSION

    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)
  5. Создайте серверный объект:

    student=# CREATE SERVER srv FOREIGN DATA WRAPPER file_fdw ; CREATE SERVER
    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.
  6. Создайте внешнюю таблицу:

    postgres@student=# CREATE FOREIGN TABLE f_data (
    postgres@student(# id int, msg text )
    postgres@student-# SERVER srv
    postgres@student-# OPTIONS (filename '/tmp/data.csv', format 'csv'); CREATE FOREIGN TABLE
    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')
  7. Проверьте возможность выполнения запросов:

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