Default OWNER für Schema PUBLIC - woher kommt der?

Moin moin,
folgende Ausgangslage:

  1. Es existiert der übliche Default-User “postgres” mit allen Rechten

  2. Ich erstelle eine neue Gruppe und einen neuen User:
    – dies soll der Standard-Owner für die meisten Objekte werden:

CREATE ROLE adm_group NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;

–dies soll der Standard-User für das (scriptgesteuerte) Anlegen von Datenbanken werden:

CREATE ROLE adm_user LOGIN NOSUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION PASSWORD 'xyz';

– adm_user soll natürlich auf alle Objekte zugreifen können:

GRANT adm_group TO adm_user;
  1. Aufruf psql und Erstellen einer neuen Datenbank:
    psql -U adm_user
CREATE DATABASE application WITH OWNER = adm_group;

Klappt alles soweit, allerdings sieht das Schema PUBLIC der neuen Datenbank so aus:
SQL-Code des Schema: CREATE SCHEMA public AUTHORIZATION postgres … ;
Wieso hat PUBLIC postgres als OWNER?
Die Datenbank wurde ja erwartungsgemäß mit dem OWNER adm_group angelegt:
SQL-Code der DB: CREATE DATABASE application WITH OWNER = adm_group … ;

Ich würd ja noch verstehen, wenn PUBLIC adm_user (welcher der “Ersteller” war) als owner hätte … aber postgres? Läßt sich das verhindern? Kann man einen anderen Default-Owner einstellen?

Klar, ich kann mit

 ALTER SCHEMA public OWNER TO adm_group;

den Owner ändern, dazu müßte ich mich aber in psql den User ändern. Ich würd jedoch gern verstehen, woher der PUBLIC default owner kommt bzw. wie man diesen ändern/beeinflussen kann.

Freu mich auf Kommentare :slight_smile:
Danke, Rainer

Hier ist eine Erklärung (sieh die Antwort von Tom Lane)

http://www.postgresql.org/message-id/709379.29248.qm@web37603.mail.mud.yahoo.com

Danke. Kurz gesagt: kein Weg führt dran vorbei, dass PUBLIC immer erstmal dem user “postgres” gehört :frowning:

In einem anderen Thread wird behauptet, dass man das vielleicht in der template1 ändern könnte.

http://www.postgresql.org/message-id/A737B7A37273E048B164557ADEF4A58B17CEE791@ntex2010i.host.magwien.gv.at

Habe ich aber nie ausprobiert.

hm … interessant. hab mich noch nie an den templates zu schaffen gemacht, werd ich mir aber mal anschauen. danke!

Ja, mach das :wink:

Kann ja z.B. sein, daß bestimmte Extensions in jeder neuen DB sein sollen - dann einfach in so ein template packen und gut ist.