pg_probackup icon indicating copy to clipboard operation
pg_probackup copied to clipboard

получение списка табличных пространств резервной копии

Open sgrinko opened this issue 4 years ago • 5 comments

Добрый день, Появилась необходимость использования табличных пространств в кластере. Утилита поддерживает архивацию и восстановление табличных пространств. Однако, их нужно знать в лицо :) На сейчас нет возможности, используя ключи утилиты, выяснить какие табличные пространства используются в кластере. Максимально подробный режим информации о бэкапной копии

pg_probackup-13 show --format=json --instance=13 -i QZF6NW

ничего об этом не выводит. Вижу, что список табличных пространств утилита хранит в файле QZF6NW/database/tablespace_map, но анализировать его вручную считаю неверным подходом. Прошу добавить в выводе указанной команды, или неким другим способом, отобразить список необходимых табличных пространств.

Зачем мне это? Есть несколько продуктовых серверов, на некоторых есть отдельные табличные пространства. Есть сервер тестирования бэкапов, на котором в в автоматическом режиме тестируются все бэкапы. Мне нужно знать какие табличные пространства есть в бэкапе, чтобы сформировать динамически внутри скрипта команды:

-T каталог_табл_пространства1=новый_каталог_табл_пространства1 -T каталог_табл_пространства2=новый_каталог_табл_пространства2

Так как на сервере для тестирования бэкапов нет возможности иметь самые разные каталоги под все случаи жизни, мы хотим использовать некоторое количество фиксированных каталогов создаваемых динамически чтобы восстановление прошло успешно. Нам нужно уметь получать список необходимых пространств и выполнять их переназначение в другие точки диска.

sgrinko avatar Sep 14 '21 11:09 sgrinko

Добрый день! Звучит логично, надо сделать.

gsmolk avatar Sep 14 '21 15:09 gsmolk

Спасибо, будем ждать

sgrinko avatar Sep 15 '21 06:09 sgrinko

Звучит как что-то полезное (:

Пока получилась такая поделка (см. коммит выше). Пример выхлопа команды:

mk@mk-pc:~/git/pg_probackup-issue_431/tests/tmp_dirs/show/run_issue_431/backup/backups$ /home/mk/pg/REL_13_STABLE/bin/pg_probackup show -B /home/mk/git/pg_probackup-issue_431/tests/tmp_dirs/show/run_issue_431/backup --instance=node --format=json -i R0ZS4C
[
    {
        "instance": "node",
        "backups": [
            {
                "id": "R0ZS4C",
                "backup-mode": "FULL",
                "wal": "ARCHIVE",
                "compress-alg": "none",
                "compress-level": 1,
                "from-replica": "false",
                "block-size": 8192,
                "xlog-block-size": 8192,
                "checksum-version": 1,
                "program-version": "2.4.17",
                "server-version": "13",
                "current-tli": 1,
                "parent-tli": 0,
                "start-lsn": "0/5000028",
                "stop-lsn": "0/60000B8",
                "start-time": "2021-10-15 03:02:36+03",
                "end-time": "2021-10-15 03:02:38+03",
                "recovery-xid": 487,
                "recovery-time": "2021-10-15 03:02:37+03",
                "data-bytes": 24527729,
                "wal-bytes": 16777216,
                "uncompressed-bytes": 24507377,
                "pgdata-bytes": 24507138,
                "primary_conninfo": "user=mk channel_binding=prefer port=11854 sslmode=prefer sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=postgres target_session_attrs=any",
                "status": "OK",
                "content-crc": 3445419410,
                "tablespaces": [
                    {
                        "link-name": "16385",
                        "link-path": "/home/mk/git/pg_probackup-issue_431/tests/tmp_dirs/show/run_issue_431/node/tbs2"
                    }
                    {
                        "link-name": "16384",
                        "link-path": "/home/mk/git/pg_probackup-issue_431/tests/tmp_dirs/show/run_issue_431/node/tbs1"
                    }
                ]
            }
        }
    ]
}
]

Названия обсуждаемы. Хотел бы понять как форматировать вывод в plain формате. И от @gsmol хотел бы услышать идеи по тестам этого добра, потому что у меня с идеями что-то негусто.

kulaginm avatar Oct 15 '21 00:10 kulaginm

Названия обсуждаемы. Я бы сделал так:

"tablespace_map": [
                    {
                        "oid": "16385",
                        "path": "/home/mk/git/pg_probackup-issue_431/tests/tmp_dirs/show/run_issue_431/node/tbs2"
                    }

И от @gsmol хотел бы услышать идеи по тестам этого добра, потому что у меня с идеями что-то негусто.

А в чем проблема с тестами? Накатать пару тестов, проверить, что возвращаем не бред. Для plain формата как-то так:

tablespace_map = '16385 /home/mk/git/pg_probackup-issue_431/tests/tmp_dirs/show/run_issue_431/node/tbs2; 16384 /home/mk/git/pg_probackup-issue_431/tests/tmp_dirs/show/run_issue_431/node/tbs1'

gsmolk avatar Oct 21 '21 22:10 gsmolk

Выглядит хорошо. Ждём.

sgrinko avatar Apr 25 '22 20:04 sgrinko