Практикум
Расширение file_fdw
-
В БД
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 -
Выгрузите с помощью COPY данные из этой таблицы в формате CSV:
student=# COPY student.tab2lr TO '/tmp/data.csv' (FORMAT CSV);
COPY 4
student=# \! cat /tmp/data.csv
1,Первая запись.
2,Вторая.
3,Теперь - третья.
4,"Четвертая. Ну и хватит, пожалуй." -
Получите список подключенных расширений:
postgres@student=# \dx
Список установленных расширений
Имя | Версия | Схема | Описание
--------+--------+------------+------------------------------
plpgsql | 1.1 | pg_catalog | PL/pgSQL procedural language
(1 строка) -
Подключите расширение
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) -
Создайте серверный объект:
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. -
Создайте внешнюю таблицу:
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') -
Проверьте возможность выполнения запросов:
postgres@student=# SELECT * FROM f_data ;
id | msg
---+----------------------------------
1 | Первая запись.
2 | Вторая.
3 | Теперь - третья.
4 | Четвертая. Ну и хватит, пожалуй.
(4 строки) -
Удалите внешнюю таблицу, сервер и расширение:
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