Выгрузка таблиц Firebird DB с помощью ar_firebird_adapter в Rails schema.rb и не все таблицы выгружаются правильно

#ruby-on-rails #api #schema #firebird

#ruby-on-rails #API #схема #firebird

Вопрос:

Во-первых, я использую ar_firebird_adapter отличный адаптер, который позволяет довольно легко интегрировать Rails и FB (единственный адаптер, совместимый с Rails 6). Проблема, с которой я сталкиваюсь, заключается в том, что как только я подключаюсь к своей базе данных Firebird и запускаю rake db:schema:dump , некоторые таблицы появляются следующим образом:

 # Could not dump table "country" because of following StandardError
#   Unknown type 'VARCHAR' for column 'currency'

# Could not dump table "customer" because of following StandardError
#   Unknown type 'VARCHAR' for column 'customer'

# Could not dump table "department" because of following StandardError
#   Unknown type 'VARCHAR' for column 'department'

# Could not dump table "employee" because of following StandardError
#   Unknown type 'VARCHAR' for column 'phone_ext'

  create_table "employee_project", primary_key: ["proj_id", "emp_no"], force: :cascade do |t|
    t.boolean "emp_no", null: false
    t.boolean "proj_id", null: false
    t.index ["emp_no", "proj_id"], name: "rdb$primary14", unique: true
    t.index ["emp_no"], name: "rdb$foreign15"
    t.index ["proj_id"], name: "rdb$foreign16"
  end

# Could not dump table "job" because of following StandardError
#   Unknown type 'VARCHAR' for column 'job_title'

# Could not dump table "proj_dept_budget" because of following StandardError
#   Unknown type 'INTEGER' for column 'fiscal_year'

# Could not dump table "project" because of following StandardError
#   Unknown type 'VARCHAR' for column 'proj_name'
  

Как вы можете видеть, любая БД, которая является чистой и лишенной «неизвестных» типов, встречается нормально, но вышеуказанные типы отображаются как StandardError (включая TIMESTAMP )

Теперь, я прочитал, что мне нужно использовать rake db:structure:load после того, как я поместил это в свой application.rb :

 config.active_record.schema_format = :sql
  

Проблема в том, что когда я использую rake db:structure:load , я получаю именно эту ошибку:

 rake aborted!
ActiveRecord::Tasks::DatabaseNotSupported: Rake tasks not supported by 'ar_firebird' adapter

Tasks: TOP => db:structure:dump
  

Означает ли это, что адаптер не использует эту команду rake, и если да, то как мне это исправить? Это огромное препятствие, которое мне нужно преодолеть! Я буду в восторге, если кто-нибудь сможет мне помочь.

Комментарии:

1. Вопрос также был отправлен на: github.com/rails-firebird/ar_firebird_adapter/issues/20

2. Похоже, вы используете пример базы данных сотрудников, включенной в Firebird. Имейте в виду, что в этом примере базы данных используются столбцы массива, которые многие инструменты и драйверы для Firebird не поддерживают (хотя, похоже, здесь проблема не в этом).

3. Спасибо за ссылку на эту метку. Да, сэр, вы правы в том, что это пример базы данных. Я хотел убедиться, что смогу успешно выполнить выгрузку в rails, прежде чем перейти к нашей живой базе данных. У вас есть какие-либо идеи?

4. К сожалению, у меня нет опыта работы с rails, поэтому я не могу здесь помочь.

5. Мы можем подсказать вам, что такое Varchar тип данных, какими свойствами он обладает, как интерпретировать вывод FB API или «системных таблиц» — но вам нужно будет закодировать его в библиотеку Ruby, которую вы используете, или попросить какого-нибудь заинтересованного специалиста, который бы это сделал…

Ответ №1:

Итак .. ответ был довольно простым; попробуйте другой адаптер, созданный той же группой парней!

В итоге я использовал firebird_adapter и db:schema:dump работал как шарм.

Мне пришлось учитывать несколько неизвестных типов данных в gem, но в остальном все было хорошо.

Спасибо за тех, кто посмотрел / прокомментировал.

Комментарии:

1. к сожалению, firebird_adapter не работает с Rails 6…

2. Да, к сожалению, вы правы. Я остановился на Rails 5.1, что вполне подходит для моего варианта использования.