Ich habe mit dem Befehl eine saubere Sicherung ohne Eigentümer für die Postgres-Datenbank gespeichert
pg_dump sample_database -O -c -U
Später, wenn ich die Datenbank mit wiederherstelle
psql -d sample_database -U app_name
Es sind jedoch mehrere Fehler aufgetreten, die mich daran hindern, die Daten wiederherzustellen:
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
Ich habe mich mit dem Klartext befasst, den SQL pg_dump
generiert, und festgestellt, dass er SQL enthält
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';
Ich denke, die Ursachen sind, dass der Benutzer app_name
nicht die Berechtigungen hat, das public
Schema und zu ändern plpgsql
.
Wie könnte ich dieses Problem lösen?
plpgsql
, dannDROP EXTENSION plpgsql
vor Ihnenpg_dump
. Dies ist sicherer, als Ihre App zu einem Superuser zu machen, und es ist bequemer, als Fehler zu ignorieren (welche Bomben, wenn Sie--single-transaction
oder verwenden-v ON_ERROR_STOP=1
). Dies ist ein bekanntes Problem, das von den Postgres-Entwicklern ausführlich erörtert wurde postgresql.org/message-id/… aber nicht behoben ab 9.3.