Pregunta

con una moderada PostgreSQL instalación hemos acumulado bastantes procedimientos almacenados funciones y tipos.

Ahora en el nivel más bajo de tipo compuesto (es decir,3 tipos están construidas con ella y una miríada referencia a las funciones de cualquiera de los tipos) uno de los elementos del tipo de tipo equivocado (es decir,smallint en lugar de bigint), con lo que el manejo es idéntico, sólo que el rango es diferente.

  1. ¿Cómo puedo saber todos los tipos, dependiendo un tipo (pg_catalog.pg_type parece insuficiente)?
  2. ¿Cómo puedo saber todos los funciones dependiendo del tipo (como argumentos y de ámbito local vars)?
  3. Puedo refactore un tipo compuesto (tal vez el cambio de tipo smallint a bigint) sin caer/la reconstrucción de cada única función en él?
  4. Hay algún tipo de automatización/herramienta/las mejores prácticas para tal refactorización?

Sé que sus 4 preguntas en una sola, pero cajero esto es frustrante y cualquier ayuda se agradece!Muchas Gracias!

¿Fue útil?

Solución

El catálogo del sistema "pg_depend" contiene información útil dependencia. Se pueden encontrar objetos en función de determinados tipos un poco como esto:

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

Esto encuentra objetos dependientes del tipo "information_schema.sql_identifier". En el resultado, classid es el OID de un catálogo- por ejemplo, para una columna en función de un tipo de usuario, classid es 'pg_class' :: regclass, objid es el OID de la fila pg_class, y objsubid es el valor attnum de pg_attribute , por lo que para este caso puede dar formato a los resultados de la siguiente manera:

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

Así que en pg_depend, (classid,objid,objsubid) describir un objeto que depende del objeto descrito por (refclassid,refobjid).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top