Ошибка "pg_restore: ошибка: входной файл не похож на архив" часто означает, что pg_restore не может распознать формат файла, которым вы пытаетесь воспользоваться.
В вашем случае проблема заключается в том, что вы пытаетесь использовать pg_restore с файлом .tar.gz, который является сжатым архивом. Утилита pg_restore может работать напрямую с файлами .tar, созданными pg_dump в "custom" или "directory" формате, но не может обрабатывать сжатые файлы .gz.
Чтобы восстановить базу данных из tar-архива с расширением .tar.gz, сначала необходимо распаковать этот архив. Вы можете сделать это, используя программу gzip или gunzip (на Linux) или аналогичную программу для распаковки .gz на Windows. После распаковки вы получите файл .tar, который можно использовать с командой pg_restore.
Пример шагов в командной строке (для Unix-подобных систем):
1. Распаковка архива .tar.gz:
```bash
gunzip -c C:\filename.tar.gz > C:\filename.tar
```
2. Восстановление базы данных из распакованного файла .tar:
```bash
pg_restore -U postgres -d testdb C:\filename.tar
```
На Windows распаковка может быть выполнена с помощью одной из доступных GUI программ (например, 7-Zip) или с помощью командной строки, если у вас установлены соответствующие команды Unix-подобной среды, такие как Cygwin или WSL.
После распаковки вашего .tar.gz файла вы должны получить файл .tar, который можно использовать с pg_restore, как указано выше.
Убедитесь, что ваш пользователь `postgres` имеет права восстанавливать базу данных, а также что база данных `testdb` существует и доступна для пользователя перед тем, как выполнять pg_restore. Если базы данных не существует, создайте ее с помощью команды:
```sql
CREATE DATABASE testdb;
```
Используйте psql или любой другой интерфейс для работы с PostgreSQL для создания новой базы данных.
Кроме того, иногда может потребоваться добавить флаг `-c` или `--clean` для pg_restore, чтобы удалить существующие объекты в целевой базе данных перед восстановлением, если вы хотите оверрайтить их.