【问题标题】:How to get column name for primary_key at database level?如何在数据库级别获取 primary_key 的列名?
【发布时间】:2019-05-14 15:07:36
【问题描述】:

我需要在数据库级别获取包含主键的列名。

Model.primary_key 返回models_id 列名,它不是数据库级别的主键。无论如何我都无法更改迁移或修改表。

我目前可以通过 MySqlAdapter 使用 ActiveRecord::Base.connection.primary_key('table_name') 获得它

但这不适用于具有复合主键的表。如果表包含复合主键,则返回nil

有什么方法可以通过编程实现这一点?

【问题讨论】:

  • “我有什么办法可以做到这一点吗?” 检查 INFORMATION_SCHEMA 数据库和KEY_COLUMN_USAGE 视图,确定它就在其中。
  • 这需要以编程方式完成。我会更新我的问题@RaymondNijland
  • 另外,如果您建议运行原始查询 rails 端,我宁愿不这样做 :)

标签: mysql ruby-on-rails ruby-on-rails-3 activerecord


【解决方案1】:

ActiveRecord 不支持开箱即用的复合主键。

您需要安装composite_primary_keys gem,然后如果主键是复合的,ActiveRecord::Base.connection.primary_key('table_name') 将返回一个列名数组。

【讨论】:

  • 谢谢,这是我不想要但绝对有效的答案
【解决方案2】:
  1. 执行查询:

    SHOW COLUMNS FROM table_name;
    

然后查看所有返回的行,其中名为 KEY 的列的值为 'PRI'。然后列 Field 将为您提供表中构成表主键一部分的列名。

  1. 或者:

    SELECT COLUMN_NAME FROM information_schema
    WHERE TABLE_SCHEMA='database_name'
          AND TABLE_NAME = 'table_name'
          AND COLUMN_KEY = 'PRI';
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 2022-01-12
    • 2013-11-01
    • 1970-01-01
    • 2016-08-08
    相关资源
    最近更新 更多