Могу ли я импортировать полную папку данных из старой основной версии PostgreSQL в более новую версию, при этом будет установлена ​​только новая версия?

Предположим, у меня уже удалена старая основная версия 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), поэтому я предполагаю, что не смогу использовать этот инструмент, если установлена ​​только новая основная версия.

Нет, вам нужен старый код, а также старые данные. Я думал, что большинство (Linux) систем сохраняют старую версию именно для этой цели.

Richard Huxton 05.06.2024 14:09

Спасибо за ответ. Это где-то задокументировано? Почему в документации мне рекомендуется использовать цитату «программы pg_dump и pg_dumpall из новой версии PostgreSQL», когда я могу использовать инструменты только той версии, с которой они были выпущены?

dan-kli 05.06.2024 14:14

Нет, вам следует использовать новые, но для того, чтобы они могли общаться, вам нужна старая установка. Кажется, вам не хватает основной идеи о том, что PostgreSQL — это система БД клиент/сервер, а не простая библиотечная система, такая как sqlite.

Richard Huxton 05.06.2024 14:24

Вполне возможно, я только начал читать документацию PostgreSQL и все еще ничего не понимаю. Спасибо за объяснение. Итак, по сути, мне нужна старая служба, работающая на другом порту, а затем вызвать pg_dumpall из новых двоичных файлов, но для параметра -host мне нужно передать старую службу?

dan-kli 05.06.2024 14:28

Это идея, да. Как я уже сказал, большинство Linux-систем настраивают новую версию именно таким образом, если уже установлена ​​старая.

Richard Huxton 05.06.2024 15:10
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
0
5
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Файлы данных основной версии PostgreSQL несовместимы. Чтобы использовать данные PG15 на сервере версии 16, вам необходимо переустановить версию 15, запустить сервер postgres-15 со старым каталогом данных и либо:

  1. Выполните логическое обновление (т. е. pg_dump), чтобы получить дамп старого экземпляра в файле sql, затем импортируйте этот файл в работающий экземпляр PG16 (я предлагаю использовать pg_dump версии 16 для дампа данных из 15, как лучше -практикуйтесь)

Рекомендуется использовать программы pg_dump и pg_dumpall из более новой версии PostgreSQL, чтобы воспользоваться преимуществами улучшений, которые могли быть сделаны в этих программах. Текущие выпуски программ дампа могут считывать данные с любой версии сервера обратно до 9.2.

  1. Используйте pg_upgrade, для которого также требуется установка версий 15 и 16.

Другие вопросы по теме