Это на 9.3, но я могу вспомнить аналогичные вещи, происходящие с 7.x. Поэтому я создаю базу данных и устанавливаю в нее расширение plpgsql. Позже я создаю pg_dump и, прежде чем восстановить его в базе данных, убедитесь, что он также имеет расширение plpgsql. Тогда при восстановлении это происходит:
pg_restore: creating EXTENSION plpgsql
pg_restore: creating COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 2053; 0 0 COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] could not execute query: ERROR: must be owner of extension plpgsql
Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
Я создаю кучу скриптов, и для меня очень важно, что pg_restore возвращает 0, поэтому тот факт, что я могу просто проигнорировать это, не приносит никакой пользы. Что меня озадачивает, так это то, что IIRC мне нужно создать расширение как основной пользователь postgres, поэтому я понятия не имею, почему весь этот материал EXTENSION попадает в мой дамп. Ведь я не владелец языка / расширения?
В любом случае, я был бы благодарен за любое предложение, как избавиться от этого. Обратите внимание, что я знаю, как работают ключи -l / -L. Однако, это кажется слишком большим усилием, чтобы исправить только один простой комментарий расширения.
источник
Ответы:
Для тех, кто ищет обходной путь, ограничение
pg_restore
конкретной схемы помогло мне обойти эту ошибку. См. Https://stackoverflow.com/a/11776053/11819источник
-n
флагТы можешь сделать
это то, что я использую для импорта в Google Cloud SQL с Postgres.
edit: добавлена каретка 'начало строки', чтобы не исключать строки, содержащие этот текст.
источник
pg_dump | sed 's/DROP EXTENSION/-- DROP EXTENSION/g' | sed 's/CREATE EXTENSION/-- CREATE EXTENSION/g' | sed 's/COMMENT ON EXTENSION/-- COMMENT ON EXTENSION/g'
Используйте
-L
флаг с pg_restore после получения дампа в пользовательском формате файла.Ссылка: pg_restore (Документация PostgreSQL 9.3)
Здесь вы можете увидеть обратное верно:
источник
Чтобы экспортировать только схему без каких-либо других объектов базы данных, вы можете указать имя схемы, используя параметр
--schema
источник