为 PostgreSQL GENERATED ALWAYS 列创建 rails 迁移

create rails migration for PostgreSQL GENERATED ALWAYS AS column

如何为如下所示的自动计算列创建 rails 迁移。

    a_column integer,
    b_column integer,
    total1 integer GENERATED ALWAYS AS (a_column+b_column) stored,
    total2 integer GENERATED ALWAYS AS (a_column-b_column) stored,
    total3 integer GENERATED ALWAYS AS (a_column/b_column) stored
); 

我不想使用模型, 因为我想使用来自另一个具有不同技术的系统的相同 table。

您可以在迁移中使用纯 SQL

def up
  execute <<~SQL
    CREATE TABLE table_name (
      a_column integer,
      b_column integer,
      total1 integer GENERATED ALWAYS AS (a_column+b_column) stored,
      total2 integer GENERATED ALWAYS AS (a_column-b_column) stored,
      total3 integer GENERATED ALWAYS AS (a_column/b_column) stored
    );
  SQL
end

def down
  drop_table :table_name
end

使用此类迁移时,为了使数据库模式正确,您需要使用SQL 转储类型(默认类型为Ruby)。要设置此设置,请将行添加到您的 config/application.rb

config.active_record.schema_format = :sql

之后架构将保存到 db/structure.sql

read more