Как исключить функции PL / pgSQL в экспорте? - PullRequest
1 голос
/ 15 марта 2012

Я использую следующую команду, чтобы вывести некоторые структуры из базы данных сервера, чтобы иметь возможность создать образец данных на моем локальном жестком диске.

pg_dump -h myserver.com -U product_user -s -f ./data/base.structure.postgresql.sql -F p -v -T public.* -T first_product.* -T second_product.* -T another_product.locales mydatabase

Мне нужно исключить некоторые схемы, в противном случае это закончилось быразрешения или другие ошибки.Даже если я исключаю общедоступную схему, она сбрасывает все функции в этой схеме, например:

REVOKE ALL ON FUNCTION gin_extract_trgm(text, internal) FROM PUBLIC;
psql:./data/base.structure.postgresql.sql:8482: ERROR:  function gin_extract_trgm(text, internal) does not exist

Я знаю, что это происходит из плагина полного текста или подобия в PostgreSQL, но я не использую его и неон мне не нужен, поэтому я бы хотел исключить эти функции.

Как я могу это сделать?

Ответы [ 2 ]

7 голосов
/ 25 июня 2015

Есть способ сделать это.Скажем, ваша резервная копия называется backup.dump.Что вам нужно сделать, это:

$ pg_restore -l -f out.txt backup.dump

Это создаст файл out.txt, который содержит список объектов, которые находятся в дампе.Вам нужно отредактировать файл и удалить элементы, которые вы не хотите восстанавливать.Затем вы делаете это:

$ pg_restore -L out.txt -h your.host.name -U username ....  backup.dump

Это будет использовать файл out.txt (который вы редактировали), чтобы выбрать вещи, которые будут восстановлены.Очень удобно, особенно если дамп большой, и вы не можете повторно выгрузить базу данных.

3 голосов
/ 15 марта 2012

Мне нужно исключить некоторые схемы

pg_dump имеет переключатель на исключить схемы :

pg_dump -N schema ...

Я цитирую руководство по pg_dump :

-N схема
--exclude-schema = schema

Не выводить схемы, соответствующие шаблону схемы.Шаблон интерпретируется по тем же правилам, что и для -n.-N можно задавать несколько раз, чтобы исключить схемы, соответствующие любому из нескольких шаблонов.
...


С PostgreSQL 9.1 или более поздней версии, у вас есть новые опцииперенести расширения в отдельную схему - даже предварительно установленные модули старого стиля.Вы можете зарегистрировать старый объект с расширением (в новом стиле), а затем использовать новые инструменты.С fulltext и similarity вы, вероятно, имеете в виду fuzzystrmatch и tsearch2.Пример:

Зарегистрировать существующие объекты старого стиля для расширения fuzzystrmatch:

CREATE EXTENSION fuzzystrmatch SCHEMA public FROM unpackaged;

Удалить расширение:

DROP EXTENSION fuzzystrmatch;

Установить его в другую схему:

CREATE EXTENSION fuzzystrmatch SCHEMA my_schema;

Конечно, вы не можете удалить расширение, если объекты из него используются.
Кроме того, если вы устанавливаете его в другую схему, вам необходимо квалифицировать схему используемых функций или добавитьсхема на search_path.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...