Ho scaricato un backup pulito, senza proprietario per il database Postgres con il comando
pg_dump sample_database -O -c -U
Successivamente, quando ripristino il database con
psql -d sample_database -U app_name
Tuttavia, ho riscontrato diversi errori che mi impediscono di ripristinare i dati:
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
Ho scavato nel testo semplice pg_dumpgenerato da SQL e ho scoperto che 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';
Penso che le cause siano che l'utente app_namenon ha i privilegi per modificare lo publicschema e plpgsql.
Come potrei risolvere questo problema?
plpgsql,DROP EXTENSION plpgsqlprima di tepg_dump. Questo è più sicuro che rendere la tua app un super utente ed è più conveniente che ignorare gli errori (che bombe se usi--single-transactiono-v ON_ERROR_STOP=1). Questo è un problema noto, [discusso a lungo dagli sviluppatori di Postgres | postgresql.org/message-id/… ma non risolto a partire da 9.3.