如何在数据库级别获取 primary_key 的列名?

How to get column name for primary_key at database level?

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

Model.primary_key returns models_id 列名称 不是 数据库级别的主键。无论如何,我无法更改迁移或修改 tables。

我目前可以使用 ActiveRecord::Base.connection.primary_key('table_name')

通过 MySqlAdapter 获取它

但这不适用于具有复合主键的 table。如果 table 包含复合主键它 returns nil.

有什么方法可以通过编程实现吗?

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

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

  1. 执行查询:

    SHOW COLUMNS FROM table_name;
    

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

  1. 或者:

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