Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9db4dd0

Browse files
committed
Added pg_transfer extension
1 parenteaf5f70 commit9db4dd0

File tree

5 files changed

+580
-0
lines changed

5 files changed

+580
-0
lines changed

‎contrib/pg_transfer/Makefile

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# pg_transfer/Makefile
2+
MODULE_big = pg_transfer
3+
OBJS = pg_transfer.o
4+
EXTENSION = pg_transfer
5+
DATA = pg_transfer--1.0.sql
6+
7+
ifdefUSE_PGXS
8+
PG_CONFIG = pg_config
9+
PGXS :=$( shell$( PG_CONFIG) --pgxs)
10+
include$(PGXS)
11+
else
12+
subdir = contrib/pg_transfer
13+
top_builddir = ../..
14+
include$(top_builddir)/src/Makefile.global
15+
include$(top_srcdir)/contrib/contrib-global.mk
16+
endif

‎contrib/pg_transfer/README.rus.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
#pg_transfer
2+
3+
Модуль`pg_transfer` предоставляет возможность быстрого перемещения таблиц между инстансами PostgreSQL.
4+
5+
Расширение совместимо с PgPro9.6.? для*nix систем.
6+
7+
##Для чего нужен pg_transfer?
8+
9+
Для некоторых приложений узким местом является загрузка данных в базу, например, при переносе данных с региональных серверов в центральный. Стандартным методом является перенос схемы и данных при помощи утилит`pg_dump/pg_restore`. При этом большая часть нагрузки приходится на принимающий сервер. Загрузка данных осуществляется командами`INSERT` или`COPY`, что создаёт значительную загрузку дисковой подсистемы. Построение индексов и сбор статистики необходимо выполнить в новой базе уже после загрузки данных.
10+
11+
С помощью расширения`pg_transfer` можно подготовить таблицу (построить индексы и собрать статистику) отдельно от основных серверов и обеспечить фактически очень большую скорость добавления данных только для чтения. Модуль содержит дополнительные функции для использования утилитами`pg_dump/pg_restore`.
12+
13+
14+
##Установка
15+
Для установки расширения необходимо выполнить в psql команду.
16+
17+
```
18+
CREATE EXTENSION pg_transfer;
19+
```
20+
21+
##Основные опции
22+
23+
Флаги pg_dump:
24+
25+
***`--transfer-dir $TRANSFER_DIR_PATH`** - директория, в которую будут перемещены файлы таблицы, заданных на ней индексов и TOAST. По умолчанию создаётся жесткая ссылка на файлы в директории указанной в опции --transfer-dir.
26+
>**Будьте внимательны:** при удалении таблицы командой DROP такие ссылки станут невалидными.
27+
28+
***`--copy-mode-transfer`** - В случае когда файлы СУБД и transfer-dir расположены на разных файловых системах нужно использовать опцию --copy-mode-transfer для получения копии файлов.
29+
30+
Флаги pg_restore:
31+
32+
***`--transfer-dir $TRANSFER_DIR_PATH`** - директория, из которой будут перемещены файлы таблицы, заданных на ней индексов и TOAST. По умолчанию файлы перемещаются в базу командой rename().
33+
34+
***`--copy-mode-transfer`** - Копировать файлы из директории`transfer-dir` вместо перемещения.
35+
36+
***`--generate-wal`** - сгенерировать Xlog записи для всех файлов, для синхронизации с репликой. В случае, когда целевая СУБД реплицируется WAL-логами, флаг обязателен.
37+
38+
39+
##Процесс переноса данных.
40+
41+
Перед переносом таблицы необходимо пометить её как доступную только на чтение.
42+
43+
```
44+
ALTER TABLE tbl_name SET CONSTANT;
45+
```
46+
47+
А также выполнить`VACUUM (ANALYZE)` для удаления устаревших записей и обновления статистики.
48+
49+
```
50+
VACUUM (ANALYZE) tbl_name;
51+
```
52+
53+
Перенос таблицы осуществляется в два этапа. На первом этапе дамп схемы снимается на вспомогательном сервере и восстанавливается на основном. Затем данные на вспомогательном сервере необходимо подготовить к переносу, используя информацию о восстановленной схеме, и перенести данные. Если исходная и целевая база расположены на одной файловой системе нужно как минимум один раз (при`pg_dump` или`pg_restore`) использовать --copy-mode-transfer опцию, чтобы получить копию данных. Если целевая СУБД реплицируется WAL-логами, то при подключении файлов pg_restore обязательно нужно
54+
использовать опцию`--generate-wal`.
55+
56+
57+
>**Важно:** архитектура обеих систем и настройки инстанса PostgreSQL должны обеспечивать идентичность бинарного формата данных. При восстановлении выполняется проверка вывода`pg_control_init()` - выравнивание, размер блока, размер сегмента и т.д..
58+
59+
###Этап 1.
60+
61+
```
62+
pg_dump db -t tbl_name --schema-only -f $TRANSFER_DIR/archive.out
63+
pg_restore -d newdb --schema-only $TRANSFER_DIR/archive.out
64+
```
65+
66+
После восстановления схемы необходимо получить идентификатор TOAST таблицы.
67+
68+
```
69+
psql newdb -c select reltoastrelid from pg_class where relname='tbl_name'
70+
```
71+
72+
###Этап 2. В обеих базах должно быть установлено расширение`pg_transfer`.
73+
74+
Используя полученный в предыдущем шаге идентификатор TOAST таблицы, подготовить
75+
таблицу к переносу и выполнить сброс данных на диск.
76+
77+
```
78+
psql -d db -c select pg_transfer_freeze('tbl_name'::regclass::oid, reltoastrelid::oid);
79+
psql -d db -c checkpoint;
80+
```
81+
82+
Подготовка данных завершена. Теперь можно перенести данные в отдельную директорию, используя утилиту`pg_dump`.
83+
84+
```
85+
pg_dump db -Fc -t tbl_name --copy-mode-transfer --transfer-dir $TRANSFER_DIR/ -f $TRANSFER_DIR/archive.out
86+
```
87+
88+
И восстановить их на целевой базе данных.
89+
90+
```
91+
pg_restore -d newdb --data-only --transfer-dir $TRANSFER_DIR/ $TRANSFER_DIR/archive.out
92+
```
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
2+
\echo Use ”CREATE EXTENSION pg_transfer” to load this file. \quit
3+
4+
CREATEFUNCTIONpg_transfer_wal(oid)
5+
RETURNS void
6+
AS'MODULE_PATHNAME','pg_transfer_wal'
7+
LANGUAGE C;
8+
9+
CREATEFUNCTIONpg_transfer_cleanup_shmem(oid)
10+
RETURNS void
11+
AS'MODULE_PATHNAME','pg_transfer_cleanup_shmem'
12+
LANGUAGE C;
13+
14+
CREATEFUNCTIONpg_transfer_freeze(oid,oid)
15+
RETURNS void
16+
AS'MODULE_PATHNAME','pg_transfer_freeze'
17+
LANGUAGE C;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp