Как создать CSV / Excel файла schema.rb - PullRequest
0 голосов
/ 11 марта 2019

Я хочу создать файл CSV / Excel из файла db / schema.rb. Я могу вывести имя таблицы и имена их атрибутов в файл, но я также хочу сбросить другую информацию, такую ​​как индексы, ограничения для столбцов и т. Д.

Вот мой код

require 'write_xlsx'
Rails.application.eager_load!
# Create a new Excel workbook
workbook = WriteXLSX.new('schema.xlsx')

# Add a worksheet
worksheet = workbook.add_worksheet

# Add and define a format
format = workbook.add_format # Add a format
format.set_bold
format.set_color('red')
format.set_align('center')

# Write a formatted and unformatted string, row and column notation.
col = row = 0
worksheet.write(0, 0, 'Table Name')
worksheet.write(0, 1, 'Attributes')
worksheet.write(0, 2, 'Attribute Type')
worksheet.write(0, 3, 'Attribute constraints')
worksheet.write(0, 4, 'Comments')
ApplicationRecord.descendants.each_with_index do |model, _index|
  row += 1
  worksheet.write(row, 0, model.name)
  worksheet.write(row, 1, '')
  model.attribute_types.each_pair do |attribute, attribute_type|
    row += 1
    worksheet.write(row, 1, attribute)
    worksheet.write(row, 2, attribute_type.type)
    worksheet.write(row, 3, JSON.parse(attribute_type.to_json))
  end
end

workbook.close

Я также попробовал это от администратора PG, но получил ожидаемый результат.

COPY (select * from information_schema.columns) TO '/home/sachin/ruby/profile_service/columns.csv' with delimiter ',' csv header;

1 Ответ

0 голосов
/ 14 марта 2019

Я не знаю, есть ли простой метод "export_to_csv", который вы можете использовать, но если вы хотите расширить свой подход, собирая всю информацию о базе данных через ActiveRecord, чем я думаю в schema_dumper.rb , вы будете найти все, что вам нужно. Просто следуйте, как SchemaDumper#dump собирает всю информацию.

Вы можете получить SchemaDumper объект с

connection = ApplicationRecord.connection
dumper = connection.create_schema_dumper({})

Способ получения информации индекса для таблицы выглядит следующим образом:

table = connection.tables.first
connection.indexes(table)

SchemaDumper.column_spec, вероятно, также полезен для вашего случая использования:

column = connection.columns(table).first
dumper.send(:column_spec, column) # => [:integer, {:null=>"false", :auto_increment=>"true"}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...