activerecord-jdbc-адаптер Проблема с идентификатором приращения zOS DB2
короткий
Столбец ID не увеличивается с INSERT INTO.
Долго
Я с:
- JRuby 1.7.11
- activerecord (3.2.17)
- activerecord-jdbc-адаптер (1.3.6)
- DB2 v10 в z/OS (мэйнфрейм) (драйвер db2jcc4.jar версия 4.15.99)
/config/database.yml:
production:
adapter: jdbc
driver: com.ibm.db2.jcc.DB2Driver
url: jdbc:db2://142.123.123.123:123/D2TZMSTR
connection_alive_sql: "SELECT 1 FROM SYSIBM.SYSDUMMY1 FETCH FIRST 1 ROWS ONLY"
host: 142.123.123.123
port: 123
database: ESTIPROD
tablespace: ESTIMATE
username: monkey
password: business
encoding: unicode
Blockquote
дб / мигрирует /create_bid.rb:
class CreateBids < ActiveRecord::Migration
def self.up
create_table :practices, :primary_key => "practice_id", :force => true do |t|
t.string :practice_no, :null => false, :limit => 3
t.string :practice_name, :null => false, :limit => 50
t.timestamps
end
# Create alternate index for practice_no
add_index :practices, :practice_no
# Populate Practice table with practices who including into BID project
Practice.create(:practice_no => '001',
:practice_name => 'Mainframe'
)
Practice.create(:practice_no => '002',
:practice_name => 'Unix'
)
...
end
Когда я выполняю команду 'rake db:migrate', я получил следующее сообщение от моего мэйнфрейма:
ActiveRecord:: JDBCError: com.ibm.db2.jcc.am.SqlIntegrityConstraintViolationException: ошибка SQL DB2: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=PRAC19S5;0000000201, >DRIVER=4.15.99: практика INSERT INTO_ (INSERT INTO (, имя-практики, имя-практики, обновленное-значение) ЗНАЧЕНИЯ ('2014-03-26 19: 27: 31.749000', 0, 'Unix', '002', '2014-03-26 19: 27: 31.749000')
От IBM:
-803 ВСТРОЕННОЕ ИЛИ ОБНОВЛЕННОЕ ЗНАЧЕНИЕ НЕДОПУСТИМО, ПОТОМУ ЧТО ИНДЕКС В ИНДЕКСНОМ ПРОСТРАНСТВЕ indexspace-name > ОГРАНИЧИВАЕТ КОЛОННЫ ТАБЛИЦЫ, ЧТО НИКАКИЕ ДВЕ РЯДА НЕ МОГУТ СОДЕРЖАТЬ ДУБЛИРОВАННЫЕ ЗНАЧЕНИЯ В ЭТИХ> КОЛОННАХ. Избавиться от существующей строки - X record-id
Мы все понимаем, что значение должно быть:
VALUES ('2014-03-26 19:27:31.749000',
1,
'Unix',
'002',
'2014-03-26 19:27:31.749000')
ВЫБРАТЬ * ИЗ ПРАКТИКИ:
| PRACTICE_ID | PRACTICE_NO | PRACTICE_NAME | CREATED_AT | UPDATED_AT |
1_| 0 | 001 | Mainframe | 2014-03-26-19.27.29.279000 | 2014-03-26-19.27.29.279000 |
Есть идеи?