首页 > 解决方案 > Ruby Sequel Gem 无法查找具有不同所有者的表

问题描述

我正在使用 odbc 适配器通过 Sequel Gem 连接到我公司的数据库。

DB = Sequel.odbc('myserver', :user => "USER1", :password => "1234")

我连接得很好,但我无法从属于其他用户的表中获取数据集。

当我使用 Interactive SQL 连接到数据库时,我看到了下表。

USER1.TABLE1
USER1.TABLE2
USER1.TABLE3
USER2.TABLE4
USER2.TABLE5

在交互式 SQL 中时。因为 user1 是超级用户,所以我完全有权对所有表执行任何操作。但是,当我尝试使用 Sequel gem 拉 table4 或 table5 时。

dataset = DB[:TABLE4].all.count

我收到以下错误。

Traceback (most recent call last):
       16: from C:/Ruby26-x64/bin/irb:23:in 'load'
       15: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/irb-1.2.0/exe/irb:11:in '<top (required)>'
       14: from (irb):17
       13: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.29.0/lib/sequel/dataset/actions.rb:51:in 'all'
       12: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.29.0/lib/sequel/dataset/actions.rb:1006:in `_all'
       11: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.29.0/lib/sequel/dataset/actions.rb:51:in 'block in all'
       10: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.29.0/lib/sequel/dataset/actions.rb:152:in 'each'
        9: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.29.0/lib/sequel/adapters/odbc.rb:90:in 'fetch_rows'
        8: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.29.0/lib/sequel/dataset/actions.rb:1089:in 'execute'
        7: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.29.0/lib/sequel/adapters/odbc.rb:40:in 'execute'
        6: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.29.0/lib/sequel/database/connecting.rb:270:in 'synchronize'
        5: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.29.0/lib/sequel/connection_pool/threaded.rb:92:in 'hold'
        4: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.29.0/lib/sequel/adapters/odbc.rb:42:in 'block in execute'
        3: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.29.0/lib/sequel/database/logging.rb:38:in 'log_connection_yield'
        2: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.29.0/lib/sequel/adapters/odbc.rb:42:in 'block (2 levels) in execute'
        1: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/sequel-5.29.0/lib/sequel/adapters/odbc.rb:42:in 'run'
Sequel::DatabaseError (ODBC::Error: S0002 (-141) [Sybase][ODBC Driver][SQL Anywhere]Table 'TABLE4' not found)

但是,当使用相同的代码拉 TABLE1 时,2 或 3 就可以了。

dataset = DB[:TABLE1].all.count

=>999

也许是因为我没有正确查找表 4 或表 5?或者我必须以某种方式指定这些表的所有者?在 Interactive SQL 中,我必须执行 USER2.TABLE4 来识别表。

非常感谢!

标签: rubysequel-gem

解决方案


您需要在 Sequel 中使用限定标识符,就像在 SQL 中一样:

dataset = DB[Sequel[:USER2][:TABLE4]].all.count

有关更多信息,请参阅:


推荐阅读