Команда `pg_dumpall` действительно сохраняет информацию о пользователях и их паролях, однако хэшированные пароли, которые она сохраняет, будут использовать алгоритм хеширования, поддерживаемый целевой версией PostgreSQL. Ваша проблема может быть связана с тем, что метод хеширования паролей изменился между версиями PostgreSQL (как вы правильно заметили, с `md5` на `scram-sha-256`).
Когда вы переносите базу данных с PostgreSQL 10 на PostgreSQL 16, необходимо учитывать следующее:
1. **Хеширование паролей**: Если пароли пользователей были хэшированы с использованием `md5` на PostgreSQL 10, то PostgreSQL 16 не сможет их аутентифицировать, если сервер настроен на использование `scram-sha-256` по умолчанию. Это может быть одной из причин, по которой старые пароли не принимаются.
2. **Целесообразный подход**:
- Перед переносом баз данных на новый сервер, лучше всего создать пользователей на новом сервере с теми же паролями и установить их на стороне PostgreSQL 16 в формате, который поддерживается данной версией (например, с помощью `scram-sha-256`).
- Для этого:
1. Создайте дамп с помощью `pg_dumpall` для всей базы данных (это включает в себя пользователей).
2. На новом сервере, подчиняя новый формат хеширования, создайте пользователей вручную с теми же именами и паролями с использованием команды `CREATE ROLE`.
3. После создания ролей загрузите данные из вашего дампа.
3. **Настройки сервера**:
- Возможно, будет полезно на время откатить режим аутентификации на сервере PostgreSQL 16 на `md5`, чтобы обеспечить обратную совместимость для вашей аутентификации, а затем вы сможете в дальнейшем обновить пароли пользователей на `scram-sha-256`.
4. **Обновление паролей**:
- После переноса данных, вы можете обновить пароли всех пользователей, чтобы они использовали новый метод хеширования, например, с помощью команды `ALTER ROLE`.
В результате, чтобы минимизировать сложности, лучше перестать полагаться на хэши паролей, создаваемые старой версией, и вручную проверить и создать пользователей в новой системе.