Sembra che tu stia utilizzando un database condiviso piuttosto che dedicato, quindi devi farlo nel modo più difficile. Se disponi di un database dedicato, puoi ottenere heroku pg:psql
e poi \di
and assorted other psql
commands per ottenere quello che stai cercando.
C'è sempre il modo difficile però e che coinvolge le tabelle del catalogo interno. Ci sono alcuni blocchi di SQL che ti serviranno, puoi metterli nelle chiamate ActiveRecord::Base.connection.select_rows
e accedere ai risultati dalla tua console di Rails.
È possibile ottenere un elenco delle tabelle e dei loro indici con questo:
select c2.relname as table, c2.oid as table_oid, c.relname as name, c.oid as index_oid
from pg_catalog.pg_class c
join pg_catalog.pg_index i on i.indexrelid = c.oid
join pg_catalog.pg_class c2 on i.indrelid = c2.oid
left join pg_catalog.pg_user u on u.usesysid = c.relowner
left join pg_catalog.pg_namespace n on n.oid = c.relnamespace
where c.relkind = 'i'
and n.nspname <> 'pg_catalog'
and pg_catalog.pg_table_is_visible(c.oid)
order by c2.relname, c.relname
quindi è possibile utilizzare il index_oid
per ottenere una descrizione dell'indice in questione con questo:
select c.relname, c.oid, i.indisprimary, i.indisunique, i.indisclustered, i.indisvalid, pg_catalog.pg_get_indexdef(i.indexrelid, 0, true), c.reltablespace
from pg_catalog.pg_class c
join pg_catalog.pg_index i on c.oid = i.indexrelid
where c.oid = '#{index_oid}'
Oppure è possibile utilizzare lo table_oid
per ottenere un elenco di indici per tale tabella con questo:
select ci.relname, ci.oid, i.indisprimary, i.indisunique, i.indisclustered, i.indisvalid, pg_catalog.pg_get_indexdef(i.indexrelid, 0, true), ci.reltablespace
from pg_catalog.pg_index i
join pg_catalog.pg_class ci on i.indexrelid = ci.oid
where i.indrelid = '#{table_oid}'
order by ci.relname
che vorreste probabilmente per avvolgere tutta questa roba in una classe di utilità per un facile accesso:
class PGInfo
def self.list_indexes
data = ActiveRecord::Base.connection.select_rows(%Q{
select c2.relname as table, c.relname as name, c.oid as oid
...
})
# do something pretty with the array of arrays that is in data
end
# etc.
end
Non ho provato questi con un database condiviso a Heroku (scusate, ho solo un database dedicato per giocare con). Ci potrebbero essere modi più semplici ma questi dovrebbero portare a termine il lavoro e saranno facili da usare se li avvolgi in una classe PGInfo.
Tutto ciò che fornisce le informazioni sull'indice necessarie, quindi è possibile utilizzare le normali migrazioni per aggiungere, rimuovere o modificare gli indici.
Sono gli $ 15/mese postgres, 20 concerti. Non sono sicuro se è condiviso o dedicato. – Brand