Domanda

con un moderato installazione di PostgreSQL abbiamo accumulato un bel paio di stored procedure, funzioni e tipi.

Ora il livello più basso di tipo composito (cioè3 tipi sono costruiti con esso e una miriade di funzioni, fare riferimento a tutti i tipi) un elemento di un tipo di tipo sbagliato (cioèsmallint invece di bigint), quindi la gestione è identica, solo la gamma è diverso.

  1. Come faccio a sapere tutti i tipi a seconda un tipo (pg_catalog.pg_type sembra insufficiente)?
  2. Come posso sapere tutto funzioni a seconda del tipo (come argomenti e con ambito locale var)?
  3. Posso refactore un tipo composito (forse cambiare smallint per bigint) senza cadere/ricostruzione di ogni singola funzione a seconda su di esso?
  4. C'è qualche tipo di automazione/strumento/best practice per ad un refactoring?

So che è 4 domande in una, ma atm questo è un po ' frustrante e qualsiasi aiuto sarebbe apprezzato!Molte Grazie!

È stato utile?

Soluzione

Il sistema di catalogo "pg_depend" contiene alcune utili informazioni di dipendenza.Si possono trovare oggetti a seconda di particolari tipi un po ' come questo:

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

Trova gli oggetti dipendono dalla "information_schema.sql_identifier" tipo.Il risultato, classid è l'OID di un catalogo, per esempio, per una colonna a seconda della tipologia di utente, classid è 'pg_class'::regclass, objid è l'OID del pg_class riga, e objsubid è il attnum valore da pg_attribute, quindi per questo caso è possibile formattare i risultati come questo:

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

Così in pg_depend, (classid,objid,objsubid) descrivere un oggetto che dipende dall'oggetto descritto da (refclassid,refobjid).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top