Копирование табличного пространства из одного экземпляра postgresql в другой - PullRequest
2 голосов
/ 22 января 2010

Я ищу способ быстрого "клонирования" базы данных с одного сервера postgresql на другой.

Предполагая, что ...

  • У меня есть сервер postgresql, работающий на HostA, обслуживающий 2 базы данных
  • У меня есть 2 устройства, смонтированных на HostA, каждое устройство хранит данные для одной базы данных (т.е. 1 база данных => 1 табличное пространство => 1 устройство)
  • Я могу получить «безопасный» моментальный снимок с помощью некоторого осторожного метода
  • Я могу последовательно и безопасно создать клон любого из двух используемых устройств (я могу даже предположить, что обе базы данных получают только чтение)
  • В качестве хостов используется CentOS 5.4

Можно ли разместить второй сервер postgresql на HostB, смонтировать одно из клонированных устройств и заставить соответствующую базу данных «всплыть»? (Вроде как, когда вы копируете файлы таблиц MyISAM в MySQL).

Если это вообще возможно, каков механизм (т. Е. Какой DDL я должен изучить или команды pg)?

Для меня важно иметь возможность перемещать отдельные базы данных изолированно друг от друга. Но если это невозможно, сработает ли аналогичный подход на уровне сервера (при попытке клонировать и перезапустить сервер путем копирования каталога данных на хост с такой же установкой postgresql)?

1 Ответ

2 голосов
/ 22 января 2010

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

Вы можете сделать это на уровне сервера или на уровне кластера, но не на уровне отдельной базы данных. Обязательно скопируйте / клонируйте весь каталог данных и все внешние табличные пространства. Пока вы можете сделать клон атомарно (либо в одной файловой системе, либо в системе, которая может делать атомарные клоны между файловыми системами), вам даже не нужно останавливать базу данных на hostA, чтобы сделать это.

...