Ich habe DB "Test" in PostgreSql. Ich möchte SQL schreiben, um Eigentümer meiner Datenbank zu bekommen.
Antworten:
Sie finden solche Dinge im Systemkatalog
SELECT d.datname as "Name",
pg_catalog.pg_get_userbyid(d.datdba) as "Owner"
FROM pg_catalog.pg_database d
WHERE d.datname = 'database_name'
ORDER BY 1;
Wenn Sie das Befehlszeilentool psql verwenden, können Sie es einfach verwenden\l
pgcliwas aus irgendeinem Grund ein anderes Ergebnis ergibt.
Sie können die Kombination aus verwenden pg_database, pg_usersSystemtabellen und current_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());
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 von pg_rolesist auf SuperUser beschränkt, da es ein Kennwort enthält (siehe Dokumentation ):
Da dieser Katalog Passwörter enthält, darf er nicht öffentlich lesbar sein.
pg_rolesist eine öffentlich lesbare Ansichtpg_authid, die das Passwortfeld ausblendet.
pg_authiddurch pg_roles. Einen schönen Tag noch.
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/
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 Dauerwellen
Beispiel: information_schema.role_usage_grants für SEQUENCE / Schema-Perms
https://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ümerrolle