Ich verwende "ALTER SEQUENCE-Sequenz OWNED BY table.column", um die Sequenzzuordnung in Postgres zu ändern. Gibt es eine Möglichkeit, diese neuen Informationen mit \ ds oder ähnlichem anzuzeigen? \ ds zeigt immer noch den Tabellenbesitzer als Sequenzbesitzer an.Wie sehen Sie nach der Verwendung von ALTER SEQUENCE neue Sequenzbesitzinformationen in Postgres?
2
A
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';
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'
);
diese Abfrage ist nicht 100% richtig - es sollte eine Einschränkung angefügt werden - 'dep .classid = 1259' –