J'ai vidé une sauvegarde propre, pas de propriétaire pour la base de données Postgres avec la commande
pg_dump sample_database -O -c -U
Plus tard, lorsque je restaure la base de données avec
psql -d sample_database -U app_name
Cependant, j'ai rencontré plusieurs erreurs qui m'empêchent de restaurer les données:
ERROR: must be owner of extension plpgsql
ERROR: must be owner of schema public
ERROR: schema "public" already exists
ERROR: must be owner of schema public
CREATE EXTENSION
ERROR: must be owner of extension plpgsql
J'ai fouillé dans le texte brut pg_dump
généré par SQL et j'ai trouvé qu'il contient du SQL
CREATE SCHEMA public;
COMMENT ON SCHEMA public IS 'standard public schema';
CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
Je pense que les causes sont que l'utilisateur app_name
n'a pas les privilèges pour modifier le public
schéma et plpgsql
.
Comment pourrais-je résoudre ce problème?
plpgsql
, alorsDROP EXTENSION plpgsql
avant vouspg_dump
. C'est plus sûr que de faire de votre application un super utilisateur, et c'est plus pratique que d'ignorer les erreurs (quelles bombes si vous utilisez--single-transaction
ou-v ON_ERROR_STOP=1
). C'est un problème connu, [discuté en détail par les développeurs de Postgres | postgresql.org/message-id/... mais non corrigé à partir de la version 9.3.