Дамп базы данных с pg_dump, игнорируя таблицы, к которым у нас нет доступа - PullRequest
0 голосов
/ 27 августа 2018

У меня есть сценарий, в котором pg_dump завершается с таким сообщением:

pg_dump -h db1 --format plain --encoding UTF8 --schema=public --schema-only --no-owner me
pg_dump: [archiver (db)] query failed: ERROR:  permission denied for relation notmytable
pg_dump: [archiver (db)] query was: LOCK TABLE public.notmytable IN ACCESS SHARE MODE

Это приводит к прерыванию всего дампа.

Есть ли способ:

  • Игнорировать таблицы, которые не принадлежат нашему пользователю?
  • Игнорировать ошибки?

Мне действительно не нужны эти таблицы в дампе,так что даже если бы мы могли получить к ним доступ, это не решило бы проблему.

(Postgres 9.6.3)

1 Ответ

0 голосов
/ 27 августа 2018

Не похоже, что есть стандартный способ сделать это, но используя флаг --exclude-table, мы можем использовать обходной путь:

export EXCLUDETABLE=$(psql -t -h $HOST -d $DBNAME -c "select '--exclude-table=' || string_agg(tablename,' --exclude-table=') FROM pg_catalog.pg_tables WHERE tableowner NOT LIKE 'myuser';" )

Это устанавливает EXCLUDETABLE, чтобы выглядеть как --exclude-table=foo --exclude-table=blah

Теперь мы передаем это pg_dump:

echo Excluding these tables from dump: $EXCLUDETABLE
pg_dump -h $HOST --format plain --encoding UTF8 --schema=public --schema-only --no-owner $EXCLUDETABLE $DBNAME > public-schema.sql 
...