Предположим, у меня уже удалена старая основная версия PostgreSQL (например, 15.4
), и осталась только папка данных. Могу ли я импортировать эту папку данных в более новую основную версию (например, 16.3
), при этом будет установлена только более новая версия? Если да, то как?
Для второстепенных версий (например, 16.1
-> 16.3
) можно просто использовать ту же папку данных. (согласно документации здесь)
Для основных версий «традиционным методом перемещения данных в новую основную версию является сброс и восстановление базы данных» (согласно той же ссылке на документ). Там также написано, что «рекомендуется использовать программы pg_dump и pg_dumpall из более новой версии PostgreSQL», но как мне вызвать pg_dumpall в старой папке данных, чтобы создать дамп, который я могу импортировать в новую установленную версия? С параметрами -d
или -l
? Или экземпляр сервера PostgreSQL сначала должен будет указать на старую папку данных (которая, как я полагаю, не всегда работает), прежде чем я смогу использовать pg_dumpall
на ней?
Другой рекомендуемый вариант — pg_upgrade, но, похоже, для него требуется старый исполняемый каталог PostgreSQL (параметр -oldbindir
), поэтому я предполагаю, что не смогу использовать этот инструмент, если установлена только новая основная версия.
Спасибо за ответ. Это где-то задокументировано? Почему в документации мне рекомендуется использовать цитату «программы pg_dump и pg_dumpall из новой версии PostgreSQL», когда я могу использовать инструменты только той версии, с которой они были выпущены?
Нет, вам следует использовать новые, но для того, чтобы они могли общаться, вам нужна старая установка. Кажется, вам не хватает основной идеи о том, что PostgreSQL — это система БД клиент/сервер, а не простая библиотечная система, такая как sqlite.
Вполне возможно, я только начал читать документацию PostgreSQL и все еще ничего не понимаю. Спасибо за объяснение. Итак, по сути, мне нужна старая служба, работающая на другом порту, а затем вызвать pg_dumpall
из новых двоичных файлов, но для параметра -host
мне нужно передать старую службу?
Это идея, да. Как я уже сказал, большинство Linux-систем настраивают новую версию именно таким образом, если уже установлена старая.
Файлы данных основной версии PostgreSQL несовместимы. Чтобы использовать данные PG15 на сервере версии 16, вам необходимо переустановить версию 15, запустить сервер postgres-15 со старым каталогом данных и либо:
Рекомендуется использовать программы pg_dump и pg_dumpall из более новой версии PostgreSQL, чтобы воспользоваться преимуществами улучшений, которые могли быть сделаны в этих программах. Текущие выпуски программ дампа могут считывать данные с любой версии сервера обратно до 9.2.
Нет, вам нужен старый код, а также старые данные. Я думал, что большинство (Linux) систем сохраняют старую версию именно для этой цели.