Có vẻ như bạn đang sử dụng cơ sở dữ liệu được chia sẻ chứ không phải dành riêng để bạn phải làm điều đó một cách khó khăn. Nếu bạn có một cơ sở dữ liệu chuyên dụng thì bạn có thể heroku pg:psql
và sau đó \di
and assorted other psql
commands để có được những gì bạn đang tìm kiếm.
Luôn có một cách khó khăn và liên quan đến các bảng danh mục nội bộ. Có vài khối SQL bạn cần, bạn có thể bọc chúng trong các cuộc gọi ActiveRecord::Base.connection.select_rows
và truy cập kết quả từ bảng điều khiển Rails của mình.
Bạn có thể nhận được một danh sách các bảng của bạn và lập chỉ mục của họ với điều này:
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
Sau đó, bạn có thể sử dụng index_oid
để có được một mô tả về các chỉ số trong câu hỏi với điều này:
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}'
Hoặc bạn có thể sử dụng table_oid
để nhận danh sách các chỉ mục cho bảng đó với điều này:
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
Bạn có thể muốn quấn tất cả các công cụ này trong một lớp tiện ích để dễ dàng truy cập:
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
tôi đã không cố gắng này với một cơ sở dữ liệu được chia sẻ tại Heroku (xin lỗi, tôi chỉ có một cơ sở dữ liệu chuyên dụng để chơi với). Có thể có những cách dễ dàng hơn nhưng những việc này sẽ hoàn thành công việc và chúng sẽ dễ sử dụng nếu bạn gói chúng trong lớp PGInfo.
Tất cả cung cấp cho bạn thông tin chỉ mục bạn cần, sau đó bạn có thể sử dụng di chuyển bình thường để thêm, xóa hoặc sửa đổi chỉ mục của mình.
Đó là $ 15/tháng postgres, 20 hợp đồng biểu diễn. Tôi không chắc chắn nếu nó được chia sẻ hoặc dành riêng. – Brand