PostgreSQL 12 на 15 работает напрямую без промежуточных версий, поэтому pg_upgrade - это твой путь. Но здесь важно то, что перед запуском pg_upgrade нужно сделать полный бэкап с помощью pg_dump или физического бэкапа - не для самой миграции, а как подстраховка. Много людей пропускают этот шаг, потому что уверены, что pg_upgrade сработает, но если что-то пойдет не так с 50GB данных, не захочешь молиться.
Процесс довольно прямолинеен: устанавливаешь PostgreSQL 15 на том же сервере (или на отдельном, если предпочитаешь), останавливаешь записи в БД, запускаешь pg_upgrade с флагом `-k`, чтобы сохранить старые файлы как резервные копии, и даешь ему работать. С 50GB это может занять 5-15 минут в зависимости от железа, но потом у тебя всё преобразовано на месте без экспорта/импорта. Как только подтвердишь, что всё работает, только тогда удаляешь старые файлы версии 12.
Важный момент, который часто не упоминают - проверка расширений и пользовательских конфигураций. Если у тебя установлены расширения, pg_upgrade может столкнуться с проблемами - им нужно существовать и в PostgreSQL 15. Перед тем как что-то делать, выполни `SELECT extname FROM pg_extension;` в текущей БД и убедись, что все эти расширения поддерживают версию 15. Вот где чаще всего всё ломается, а не в самой миграции данных.