2012-03-28 4 views

Antwort

1

OWNED BY table.column ändert die zugehörige Spalte; OWNER TO newowner ändert die Rolle, die die Sequenz besitzt. Die Eigentümerrolle ist, was in \ds angezeigt wird. Ich kenne keinen psql Befehl, um die verknüpfte Spalte einer Sequenz zu sehen. OWNED BY wird primär verwendet, um ein Löschen der zugehörigen Sequenz zu kaskadieren, wenn die Referenzspalte entfernt wird.

Sie können die Spalte "owned by" anzeigen, indem Sie eine Abfrage für die Systemkatalogtabellen pg_class, pg_depend und pg_attribute erstellen. Ich bin nicht sicher, ob alle genauen Semantik von pg_depend, aber diese Abfrage sollten Sie eine Sequenz der Spalte Abhängigkeit zeigen:

select tab.relname as tabname, attr.attname as column 
from pg_class as seq 
join pg_depend as dep on (seq.relfilenode = dep.objid) 
join pg_class as tab on (dep.refobjid = tab.relfilenode) 
join pg_attribute as attr on (attr.attnum = dep.refobjsubid and attr.attrelid = dep.refobjid) 
where seq.relname = 'sequence'; 
+0

diese Abfrage ist nicht 100% richtig - es sollte eine Einschränkung angefügt werden - 'dep .classid = 1259' –

3
SELECT c.relname,u.usename 
    FROM pg_class c, pg_user u 
WHERE c.relowner = u.usesysid and c.relkind = 'S' 
    AND relnamespace IN (
         SELECT oid 
          FROM pg_namespace 
         WHERE nspname NOT LIKE 'pg_%' 
          AND nspname != 'information_schema' 
         );