Sie werden das Datenbanksystem und starten Sie eine Stand-alone-Back-End-, die immer bedingungslos als Superuser laufen haben, zu stoppen.
Sie können dieses Backend zu ALTER
dem Benutzer verwenden, dem Sie Superuser-Rechte geben möchten. Schließen Sie dann das Standalone-Backend und starten Sie die Datenbank normal.
Es ist wichtig, dass Sie den Datenbankserver vollständig stoppen, bevor Sie in den Einzelbenutzermodus wechseln. Der PostgreSQL-Einzelbenutzermodus wird nicht gestartet, wenn ein Postmaster vorhanden ist, aber Sie sollten sicherstellen, dass auf Ihrem System keine PostgreSQL-Prozesse ausgeführt werden. Under (almost) no circumstances should you ever delete postmaster.pid
- das führt ziemlich sicher zur Beschädigung der Datenbank, wenn immer noch irgendein PostgreSQL-Prozess auf dieses Datenverzeichnis zugreift.
Wie Sie ein eigenständiges Back-End starten, hängt ein wenig von Ihrem Betriebssystem/Ihrer Distribution und davon ab, wie Sie PostgreSQL installiert haben. Sie haben diese Informationen nicht angegeben, daher kann ich Sie nur auf the manual for the postgres
back-end executable hinweisen.
Erstellen Sie zuerst eine Sicherung.
In the single-user mode, the session user will be set to the user with ID 1, and implicit superuser powers are granted to this user. This user does not actually have to exist, so the single-user mode can be used to manually recover from certain kinds of accidental damage to the system catalogs.
Siehe Abschnitt Optionen für Single-User-Modus und in Richtung der Unterseite, Usage. Sie möchten das postgres
-Back-End mit --single
, als Unix-Benutzer ausführen, der die Datenbankdateien mit dem Pfad zum Datadir besitzt. An einem typischen Linux PostgreSQL installieren, um diese so etwas wie sein könnte:
sudo systemctl stop postgresql-9.3.service
sudo -u postgres /usr/pgsql-9.3/bin/postgres --single -D /var/lib/pgsql/9.3/data
Ihre datadir und postgres
ausführbare Lage sind möglicherweise anders. Das obige ist für ein Fedora-System, das mit PGDG PostgreSQL-Paketen von http://yum.postgresql.org/ ausgeführt wird.
Vielen Dank.Ich benutzte ein Puppet-Modul, um eine Datenbank zu definieren. Ich dachte, es sei in Ordnung, den Postgres-Benutzer als Besitzer der Datenbank festzulegen, aber ways postgresql :: Server :: Db [mydb]/Postgresql :: Server :: Role [postgres]/Postgresql_psql [ALTER ROLE "postgres" NOSUPERUSER]/Befehl) Befehl geändert 'notrun' zu 'ALTER ROLE' postgres "NOSUPERUSER ' – tobixen