Вопрос

при умеренной установке PostgreSQL мы накопили довольно много хранимых процедур/функций и типов.

Теперь в составном типе самого низкого уровня (т.е.С его помощью создаются 3 типа, и множество функций ссылаются на любой из этих типов). Неправильный тип (т.е.smallint вместо bigint), таким образом, обработка его идентична, отличается только диапазон.

  1. Как я узнаю все типы в зависимости от типа (pg_catalog.pg_type кажется недостаточным)?
  2. Как я могу узнать все функции в зависимости от типа (в качестве аргументов и локально озеленных VAR)?
  3. Могу ли я реформировать композитный тип (возможно, изменить Smallint на Bigint), не сбрасывая/восстанавливая каждую функцию в зависимости от этого?
  4. Есть ли какой -либо вид автоматизации/инструмента/лучшей практики для такого рефакторинга?

Я знаю, что это 4 вопроса в одном, но это немного расстраивает, и любая помощь будет оценена по достоинству!Большое спасибо!

Это было полезно?

Решение

Системный каталог «pg_dependent» содержит полезную информацию о зависимостях.Вы можете найти объекты в зависимости от определенных типов примерно так:

select * from pg_depend where refclassid = 'pg_type'::regclass
    and refobjid = 'information_schema.sql_identifier'::regtype;

Это находит объекты, зависящие от типа «информационная_схема.sql_identifier».В результате classid — это OID каталога. Например, для столбца, зависящего от типа пользователя, classid — это «pg_class»::regclass, objid — это OID строки pg_class, а objsubid — это значение attnum из pg_attribute. , поэтому в этом случае вы можете отформатировать результаты следующим образом:

select objid::regclass, attname from pg_depend
    join pg_attribute on pg_attribute.attrelid = pg_depend.objid and pg_attribute.attnum = pg_depend.objsubid
where refclassid = 'pg_type'::regclass and refobjid = 'information_schema.sql_identifier'::regtype
    and classid = 'pg_class'::regclass
limit 10

Итак, в pg_dependent (classid,objid,objsubid) описать некоторый объект, который зависит от объекта, описываемого (refclassid,refobjid).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top