Как мы уменьшали количество сегментов в ArenData DB / Greenplum
export COORDINATOR_DATA_DIRECTORY=/data1/master/gpseg-1
export MASTER_DATA_DIRECTORY=$COORDINATOR_DATA_DIRECTORY Expected to find 2 file(s) on segment 0 on host Segment1, but found 1 instead. strace -f -e trace=execve -s 500 gprestore \
--timestamp 20260520132515 \
--create-db \
--resize-cluster \
--verbose \
2>&1 | grep "Segment1.*find" | head -10 find /data1/primary/new6/gpseg0/backups/20260520/20260520132515
-type f -regextype posix-extended
-regex ".*gpbackup_(0|6)_20260520132515.*" | wc -l new_seg = old_seg % NEW_COUNT #!/bin/bash
TIMESTAMP=20260611194101
DATE=20260611
BACKUP_DIR=/data1/backup_prod/dwhprod
OLD_COUNT=192
NEW_COUNT=96
SUBDIR="backups/${DATE}/${TIMESTAMP}"
for old_seg in $(seq ${NEW_COUNT} $((OLD_COUNT-1))); do
new_seg=$((old_seg - NEW_COUNT))
src="${BACKUP_DIR}/gpseg${old_seg}/${SUBDIR}"
dst="${BACKUP_DIR}/gpseg${new_seg}/${SUBDIR}"
mkdir -p "${dst}"
find "${src}" -type f | while read f; do
ln "$f" "${dst}/$(basename $f)" 2>/dev/null
done
done ERROR: role "liquser" does not exist ERROR: required extension "gp_toolkit" is not installed Шаг 1. Создать базу вручную с нужным owner:
psql -d template1 -c "CREATE DATABASE mydb OWNER myowner;"
psql -d mydb -c "CREATE EXTENSION IF NOT EXISTS gp_toolkit;"
psql -d mydb -c "CREATE EXTENSION IF NOT EXISTS arenadata_toolkit;"
Шаг 2. Залить метаданные строго в контекст целевой базы — не template1!
⚠️САМОЕ ВАЖНОЕ: psql -d mydb (не template1!). При запуске в template1 все таблицы создаются там и данные потом не заливаются.
psql -d mydb -f gpbackup_<TS>_metadata.sql > ~/metadata_mydb.log 2>&1
Фильтруем реальные проблемы в логе (некритичные ошибки версионных различий игнорируем):
grep -iE "ERROR" ~/metadata_mydb.log \
| grep -v "already exists" \
| grep -v "arenadata_toolkit" \
| grep -v "CPU_RATE_LIMIT" \
| grep -v "MEMORY_" | head -20
Проверяем что таблицы создались:
psql -d mydb -c "
SELECT schemaname, count(*) FROM pg_tables
WHERE schemaname NOT IN ('pg_catalog','information_schema',
'gp_toolkit','arenadata_toolkit')
GROUP BY schemaname ORDER BY schemaname;"
Шаг 3. Запустить gprestore только для данных:
gprestore --backup-dir /backup/mydb \
--timestamp <TS> \
--resize-cluster \
--jobs 16 \
--data-only \
--on-error-continue \
--verbose \
2>&1 | tee ~/gprestore_mydb_$(date +%Y%m%d_%H%M%S).log
Флаг --data-only ключевой: схема уже есть, заливаем только данные.