Ho scritto un semplice script per reindicizzare i nostri database PG una volta alla settimana. Ha una semplice logica:Come ottenere la clausola CREATE INDEX completa per l'indice esistente in puro SQL?
- ottenere top 10 indici per quantità di byte gonfio
- ricerca creare clausola indice dalla variabile hashmap (nome di indice -> creare clausola)
- se non c'è nessuno - accedere al stderr e vai all'indice successivo
- creare nuovo indice in concomitanza
- goccia vecchio indice contemporaneamente
- rinominare nuovo indice
E proprio come sviluppatore pigro non mi piace questo concetto che devo aggiornare costantemente la mia hashmap. (D'altra parte, ho trovato due indici inefficienti mentre lo facevo.)
pg_index sembra abbastanza informativo, c'è un modo per ricostruire una clausola di indice di creazione da esso?
È facile ottenere l'elenco di colonne, ma utilizziamo diversi tipi di indice, diverse classi di campi per indici, indici parziali ... E chissà cosa. È importante assicurarsi che otterremo esattamente la stessa clausola utilizzata per creare l'indice in primo luogo.
E 'davvero un peccato che non c'è una funzione equivalente per la definizione di una tabella ('pg_get_tabledef()' sarebbe davvero utile) –
@a_horse_with_no_name Sì, sono d'accordo. Estremamente forte. Capisco la logica (re downgrade) con fare 'pg_dump' uno strumento lato client, ma la mancanza di esportazione DDL lato server come opzione è molto frustrante. –
Wow! Così felice che esista davvero. Anche conoscendo questa descrizione della funzione non posso facilmente google :) – skaurus