Уровень 3.0
Расширение file_fdw
-
В БД
studentимеется таблицаtab2lr. Проверьте ее наличие. При отсутствии создайте.Подключитесь к базе данных.
[postgres@ServerName ~]$ psql -d studentpsql (15.5)Type "help" for help.Проверьте список схем.
postgres@student=# \dnList of schemasName | Owner--------+-------------------public | pg_database_ownerstudent | student(2 rows)Проверьте структуру таблицы
student.tab2lr.postgres@student=# \d student.tab2lrTable "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 -
Выгрузите с помощью
COPYданные из этой таблицы в форматеCSV.Выполните
COPY.postgres@student=# COPY student.tab2lr TO '/tmp/data.csv' (FORMAT CSV);COPY 4Проверьте содержимое файла.
postgres@student=# \! cat /tmp/data.csv1,Первая запись.2,Вторая.3,Теперь - третья.4,Четвертая. Ну и хватит, пожалуй.Файл
data.csvсодержит 4 строки с данными таблицы. -
Получите список подключенных расширений.
postgres@student=# \dxСписок установленных расширенийИмя | Версия | Схема | Описание--------+--------+------------+------------------------------plpgsql | 1.1 | pg_catalog | PL/pgSQL procedural language(1 row)Подключено только расширение
plpgsql—file_fdwеще не установлено. -
Подключите расширение
file_fdw.Выполните
CREATE EXTENSION.postgres@student=# CREATE EXTENSION file_fdw;CREATE EXTENSIONПроверьте, что расширение подключилось.
postgres@student=# \dxList of installed extensionsName | Version | Schema | Description---------+---------+------------+-------------------------------------------file_fdw | 1.0 | public | foreign-data wrapper for flat file accessplpgsql | 1.1 | pg_catalog | PL/pgSQL procedural language(2 rows)Расширение
file_fdwподключено и доступно в схемеpublic. -
Создайте серверный объект.
Выполните
CREATE SERVER.postgres@student=# CREATE SERVER srv FOREIGN DATA WRAPPER file_fdw;CREATE SERVERПроверьте созданный сервер.
postgres@student=# \x \des+ \xExpanded display is on.List of foreign servers-[ RECORD 1 ]--------+---------Name | srvOwner | postgresForeign-data wrapper | file_fdwAccess privileges |Type |Version |FDW options |Description |Expanded display is off.Сервер
srvсоздан с FDWfile_fdw. -
Создайте внешнюю таблицу.
Выполните
CREATE FOREIGN TABLE.postgres@student=# CREATE FOREIGN TABLE f_data ( id int, msg text ) SERVER srvpostgres@student-# OPTIONS (filename '/tmp/data.csv', format 'csv');Разбор команды
CREATE FOREIGN TABLE f_data— создание внешней таблицы с именемf_data;(id int, msg text)— определение колонок таблицы (тип и количество совпадают с исходной таблицей);SERVER srv— привязка к серверному объектуsrv(FDWfile_fdw);OPTIONS (filename '/tmp/data.csv', format 'csv')— параметры FDW: путь к CSV-файлу и формат данных.
CREATE FOREIGN TABLEПроверьте структуру внешней таблицы.
postgres@student=# \d f_dataForeign table "public.f_data"Column | Type | Collation | Nullable | Default | FDW options-------+---------+-----------+----------+---------+-------------id | integer | | | |msg | text | | | |Server: srvFDW options: (filename '/tmp/data.csv', format 'csv')Внешняя таблица
f_dataпривязана к файлу/tmp/data.csv. -
Проверьте возможность выполнения запросов.
Выполните
SELECT.postgres@student=# SELECT * FROM f_data;id | msg---+----------------------------------1 | Первая запись.2 | Вторая.3 | Теперь - третья.4 | Четвертая. Ну и хватит, пожалуй.(4 rows)Данные из CSV-файла успешно прочитаны через внешнюю таблицу.
-
Удалите внешнюю таблицу, сервер и расширение.
Выполните команды удаления в обратном порядке.
postgres@student=# DROP FOREIGN TABLE f_data;DROP FOREIGN TABLEpostgres@student=# DROP SERVER srv;DROP SERVERpostgres@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-файла?