在测试(not生产)数据库上运行此ActiveRecord迁移时,db/structure.sql
个数据库中会出现较大的变化.这是可重现的.更改如下:
- 基于迁移代码的少量预期更改(根据需要).
- 大量与迁移代码无关的意外更改(不需要).这是迁移中的SQL代码中提到的not个.这些重新排列的项与迁移中的SQL代码中的项相关联(例如,通过相关性)not.
What causes these large unrelated differences, and how to prevent them?个
这些问题是否与生产数据库服务器上的PostgreSQL版本与在测试数据库上执行迁移的计算机上的PostgreSQL版本不匹配有关?
这些不相关的更改会降低git diff
输出much的用处.在下面这个极小的示例中,只重新排列了几个表.但在现实生活中的迁移代码中,它改变了几十个表、视图和matview的顺序.
class FixFooBarBaz < ActiveRecord::Migration[5.2]
def up
sql = <<~SQL
DROP VIEW master_foo;
DROP VIEW IF EXISTS bar1;
CREATE OR REPLACE VIEW bar1 AS
SELECT * FROM baz1
UNION ALL
SELECT * FROM baz2;
CREATE OR REPLACE VIEW master_foo AS
SELECT
*,
'bar1' AS bar_type
FROM
bar1
UNION ALL
...
SQL
execute sql
end
def down
sql = <<~SQL
DROP VIEW IF EXISTS master_foo;
DROP VIEW IF EXISTS bar1;
...
SQL
execute sql
end
end
使用的硬件/软件:
执行迁移的计算机:
MacBookPro, Apple M1 Max, macOS Sonoma 14.2.1
ruby 2.7.3p183 (2021-04-05 revision 6847ee089d) [arm64-darwin21]
15.3 psql (PostgreSQL) 15.3 (Homebrew)
生产数据库服务器:
psql (14.9 (Homebrew), server 13.3 (Ubuntu 13.3-1.pgdg20.04+1))