Parece que está utilizando una base de datos compartida en lugar de dedicada, por lo que tiene que hacerlo de la manera difícil. Si tiene una base de datos dedicada, entonces puede heroku pg:psql
y luego \di
and assorted other psql
commands para obtener lo que está buscando.
Sin embargo, siempre existe la manera más difícil y eso involucra las tablas de catálogo interno. Hay pocos fragmentos de SQL que necesitará, puede envolverlos en llamadas ActiveRecord::Base.connection.select_rows
y acceder a los resultados desde la consola de Rails.
Usted puede obtener una lista de sus tablas y sus índices con esto:
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
continuación, puede utilizar la index_oid
para obtener una descripción del índice en cuestión con esto:
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}'
O puede usar el table_oid
para obtener una lista de índices para esa tabla con esto:
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
Usted probablemente querrá para envolver todo esto en una clase de utilidad para facilitar el acceso:
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
No he probado esto con una base de datos compartida en Heroku (lo siento, sólo tengo una base de datos dedicada para jugar con). Puede haber formas más sencillas pero estas deberían hacer el trabajo y serán fáciles de usar si las finaliza en una clase de PGInfo.
Todo lo que le da la información de índice que necesita, entonces puede usar las migraciones normales para agregar, eliminar o modificar sus índices.
Es el postgres de $ 15/mes, 20 gigas. No estoy seguro si es compartido o dedicado. – Brand