Ich habe DB "Test" in PostgreSql. Ich möchte SQL schreiben, um Eigentümer meiner Datenbank zu bekommen.
postgresql
Mindia
quelle
quelle
Wenn Sie das Befehlszeilentool psql verwenden, können Sie es einfach verwenden
\l
quelle
pgcli
was aus irgendeinem Grund ein anderes Ergebnis ergibt.Sie können die Kombination aus verwenden
pg_database
,pg_users
Systemtabellen undcurrent_database()
Funktion auf diese Weise:SELECT u.usename FROM pg_database d JOIN pg_user u ON (d.datdba = u.usesysid) WHERE d.datname = (SELECT current_database());
quelle
Diese Arbeit mit Datenbanken, die der Gruppenrolle gehören:
SELECT U.rolname ,D.datname FROM pg_roles AS U JOIN pg_database AS D ON (D.datdba = U.oid) WHERE D.datname = current_database();
Die Verwendung von
pg_authid
(wie in meiner vorherigen Version) anstelle vonpg_roles
ist auf SuperUser beschränkt, da es ein Kennwort enthält (siehe Dokumentation ):quelle
pg_authid
durchpg_roles
. Einen schönen Tag noch.Sie können die Rollen-OID einfach mit magic :: rainole umwandeln, um den Rollennamen des Eigentümers anzugeben:
SELECT datdba::regrole FROM pg_database WHERE datname = 'test' ;
quelle
Die folgende Abfrage zeigt Informationen für alle Tabellen im öffentlichen Schema an:
select t.table_name, t.table_type, c.relname, c.relowner, u.usename from information_schema.tables t join pg_catalog.pg_class c on (t.table_name = c.relname) join pg_catalog.pg_user u on (c.relowner = u.usesysid) where t.table_schema='public';
Quelle: http://cully.biz/2013/12/11/postgresql-getting-the-owner-of-tables/
quelle
Denken Sie in SQL, einschließlich Postgres, daran, dass Sie eine Hierarchie innerhalb einer bestimmten SQL Server-Instanz haben:
catalog/db > schema > tables
Wenn für perms / Metadaten suchen sie in einem Katalog möchten Sie sehen ,
information_schema
Beispiel:
information_schema.role_table_grants
für DauerwellenBeispiel:
information_schema.role_usage_grants
für SEQUENCE / Schema-Permshttps://www.postgresql.org/docs/current/information-schema.html
Für die Konfiguration / Meta auf Katalog- / DB-Ebene müssen Sie eine andere Ebene in suchen
pg_catalog
.https://www.postgresql.org/docs/current/catalogs.html
Beispiel:
SELECT dbs.datname, roles.rolname FROM pg_catalog.pg_database dbs, pg_catalog.pg_roles roles WHERE dbs.datdba = roles.oid;
pg_catalog.pg_database.datdba
hat die ID der Eigentümerrolle.pg_catalog.pg_roles.oid
hat ID der Eigentümerrolle (Join)pg_catalog.pg_roles.rolname
hat Name / Zeichenfolge der Eigentümerrollequelle