【发布时间】:2021-05-27 11:16:08
【问题描述】:
首先,为现有应用程序设置数据库。它在 Advantage 数据库服务器上,我无法更改表结构。
某些表的“主键”设置为伪列ROWID,它始终存在于所有表中,但默认情况下从不选择。
我已经说服适配器让它总是在columns 中宣布ROWID 的存在,这样我现在就可以愉快地运行annotate 和rake db:schema:dump,但它仍然会导致问题对于我的模型,ROWID 不包含在标准选择的select * 中:
Worksheet.last
=> #<Worksheet ROWID: nil, FILENAME: "2130002", CREATED: "2021-03-04", ANALYST: "CJH", WKSTATUS: "PURGED", DETS: "02535", FIRSTSAMP: 0.106499e6, CHECKDATE: nil, CHECKTIME: "", CHECKEDBY: "", EXCEL: false>
Worksheet.last.ROWID
=> nil
Worksheet.select("ROWID, WKSHEET.*").last
=> #<Worksheet ROWID: "CFTquNBaHrvwAAAAAF", FILENAME: "2130002", CREATED: "2021-03-04", ANALYST: "CJH", WKSTATUS: "PURGED", DETS: "02535", FIRSTSAMP: 0.106499e6, CHECKDATE: nil, CHECKTIME: "", CHECKEDBY: "", EXCEL: false>
Worksheet.select("ROWID, WKSHEET.*").last.ROWID
=> "CFTquNBaHrvwAAAAAF"
有没有办法设置“默认范围”或类似的方法,以便表自动包含ROWID 列(至少在使用它作为“主键”的特定表上)? ...最好不使用表名,因为这并不总是合乎逻辑的
为了完整性而缩减模型:
class Worksheet < ApplicationRecord
self.table_name = 'WKSHEET'
self.sequence_name = :autogenerated
self.primary_key = 'ROWID'
end
对于喜欢轻松阅读数据库内部结构的任何人,this link 解释了 ADS ROWID 伪列
【问题讨论】:
标签: ruby-on-rails advantage-database-server