He descargado una copia de seguridad limpia, sin propietario para la base de datos de Postgres con el comando
pg_dump sample_database -O -c -U
Más tarde, cuando restaure la base de datos con
psql -d sample_database -U app_name
Sin embargo, encontré varios errores que me impiden restaurar los datos:
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
Investigué en el texto sin formato que pg_dump
genera SQL y encontré que contiene 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';
Creo que las causas son que el usuario app_name
no tiene los privilegios para alterar el public
esquema y plpgsql
.
¿Cómo puedo solucionar este problema?
plpgsql
, entoncesDROP EXTENSION plpgsql
antes que ustedpg_dump
. Esto es más seguro que convertir tu aplicación en un superusuario, y es más conveniente que ignorar los errores (lo que bombardea si usas--single-transaction
o-v ON_ERROR_STOP=1
). Este es un problema conocido, [discutido en profundidad por los desarrolladores de Postgres | postgresql.org/message-id/… pero no corregido a partir de 9.3.