Liste von Einschränkungen für alle Tabellen mit unterschiedlichen Eigentümern, die in PostgreSQL
Muss ich Eigentümer der Bezug auf den Zugang von constraint-Daten im information schema? Getestet hab ich die folgenden, und es scheint, dass ich der Eigentümer sein.
create schema rights_test;
create table rights_test.t1 (id int primary key);
create table rights_test.t2 (id int references rights_test.t1(id));
select
tc.constraint_name,
tc.constraint_schema || '.' || tc.table_name || '.' || kcu.column_name as physical_full_name,
tc.constraint_schema,
tc.table_name,
kcu.column_name,
ccu.table_name as foreign_table_name,
ccu.column_name as foreign_column_name,
tc.constraint_type
from
information_schema.table_constraints as tc
join information_schema.key_column_usage as kcu on (tc.constraint_name = kcu.constraint_name and tc.table_name = kcu.table_name)
join information_schema.constraint_column_usage as ccu on ccu.constraint_name = tc.constraint_name
where
constraint_type in ('PRIMARY KEY','FOREIGN KEY')
and tc.constraint_schema = 'rights_test'
/*
This will produce desired output:
t1_pkey;rights_test.t1.id;rights_test;t1;id;t1;id;PRIMARY KEY
t2_id_fkey;rights_test.t2.id;rights_test;t2;id;t1;id;FOREIGN KEY
*/
create user rights_test_role with password 'password';
grant all on rights_test.t1 to rights_test_role;
grant all on rights_test.t2 to rights_test_role;
/* Now login as rights_test_role and try the same constraint select.
For rights_test_role it returns nothing although I've added ALL privileges
*/
Gibt es andere Wege, wie man die gleichen Daten, wenn ich bin nicht Besitzer der relation?
InformationsquelleAutor Tomas Greif | 2013-05-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht alle constraint-Daten "geschützt". Verwenden Sie drei Beziehungen, die in der Abfrage:
table_constraints
key_column_usage
constraint_column_usage
Die ersten beiden sind nicht beschränkt, aber die Dokumentation für
constraint_column_usage
sagt Sie:Seit
information_schema.constraint_column_usage
ist eine Ansicht, die Sie sehen können, seine definition mitin der psql shell. Das Ergebnis sieht erschreckend auf den ersten Blick, aber es ist wirklich nicht so schlimm. Die interessanteste Sache - für einen ersten test ist das Teil in der letzten Zeile:
Wenn Sie fügen Sie die definition in die psql-shell, die offen ist, durch den nicht-Eigentümer
rights_test_role
und löschen die Letzte Zeile erhalten Sie das gewünschte Ergebnis. Das ist gut, denn das bedeutet, dass die grundlegenden Metadaten werden nicht vom system geschützt. So können Sie Streifen nach unten die view-definition sind nur die Teile, die Sie wirklich brauchen.\d+
ist dein Freund.InformationsquelleAutor A.H.
Versuchen Sie es mit diesem.. haben alle die constraint-Namen und Einschränkung Beschreibung.
Wie:
InformationsquelleAutor Anupama Boorlagadda
Liste relationalen constraints Sie können neben-Abfrage:
InformationsquelleAutor Eugen Konkov