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_dump
generato 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_name
non ha i privilegi per modificare lo public
schema e plpgsql
.
Come potrei risolvere questo problema?
plpgsql
,DROP EXTENSION plpgsql
prima 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-transaction
o-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.