PostgreSQL 9.1 pg ошибка восстановления относительно PLPGSQL
Я использую Postgres для проекта django, и в настоящее время я внедряю систему резервного копирования/восстановления базы данных, которая как можно проще выполняет pg_dump, когда пользователь нажимает backup, а затем pg_restore, когда они нажимают restore backup.
все кажется прекрасным и денди, пока он на самом деле не пытается выполнить pg_restore в это время он дает эту ошибку:
pg_restore: [архиватор (дБ)] ошибка из записи оглавления 3206; 0 0 комментариев Расширение plpgsql pg_restore: [архиватор (db)] не удалось выполнить запрос: Ошибка: должен быть владельцем расширения plpgsql команда была: комментарий Расширение plpgsql - это "процедурный язык PL / pgSQL";
Я посмотрел, что такое plpgsql и т. д., И я понимаю это, и в отношении ошибки я попытался вручную установить "владельца расширения" для пользователя, который выполняет скрипт и владеет самой базой данных, но это ничего не изменило, его действительно раздражает, так как его ошибка при попытке установить комментарий всех вещи
все это автоматически создается pg_dump, поэтому строка комментария не может быть удалена, и нет флагов для отключения комментариев (что я знаю), поэтому я действительно застрял в том, как решить эту проблему.
5 ответов:
похоже, что pg_restore пытается восстановить некоторые дополнительные данные, которые вам не принадлежат. Попробуйте добавить в командной строке pg_restore. Он скажет pg_restore восстановить только содержимое общедоступной схемы. Ваша командная строка должна выглядеть как
pg_restore -U username -c -n public -d database_name
Я нашел следующий обходной путь на этой странице:
http://archives.postgresql.org/pgsql-general/2011-10/msg00826.php
идея состоит в том, чтобы использовать pg_restore-l для перечисления содержимого архива, grep из расширения, что пользователь не имеет разрешения на восстановление, и использовать pg_restore-L, чтобы использовать этот список elided при восстановлении.
например:
pg_restore -l ~/database.dump | grep -v "EXTENSION - plpgsql" > ~/restore_elements pg_restore -L ~/restore_elements ~/database.dump
Если это возможно, я рекомендую вам удалить комментарий, который не удается восстановить до создания каких-либо свалок.
вы можете сделать это с помощью:
COMMENT ON EXTENSION plpgsql IS null;
Если вы не хотите делать это для каждой вновь созданной базы данных, удалите комментарий из базы данных template1 (
CREATE DATABASE…
копирует эту базу данных.)дампы, созданные после этого, должны восстанавливаться без ошибок.