ruby-on-rails - structure.sql 文件中的 search_path 被 rails db :migrate 修改

标签 ruby-on-rails postgresql postgresql-9.6 dbmigrate apartment-gem

每次我在我的项目上运行 rake db:migrate 时,db/structure.sql 都会改变,我很高兴。不幸的是,这些更改不仅是对我的表的补充,而且还显式地使用我们的 tenant 关键字和 extensions 关键字。

db/structure.sql | 20278 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------
1 file changed, 9565 insertions(+), 10713 deletions(-)

这是我迁移后有趣的 diff 的一部分:

-CREATE FUNCTION _final_median_function(anyarray) RETURNS double precision
+CREATE FUNCTION extensions._final_median_function(anyarray) RETURNS double precision

这里是表格的例子:

-SET search_path = at, pg_catalog;
-CREATE TABLE advert_all_clicks (
+CREATE TABLE at.advert_all_clicks (

Postgres 9.6.10(也经过测试,它发生在 10.+ 中) 使用 apartment 完成 Multi-Tenancy

有人知道为什么会这样吗?找不到太多,我为此苦苦挣扎了一段时间。

编辑:关于我的问题,我发现了 this但它适用于 postgres < 9.3

最佳答案

这很奇怪,但我会做出回应,以防其他人遇到同样的问题。

如果你在一个使用 db/xx.sql 文件的项目上,那么如果你打开它,你会在第一行看到 pg_dump 的版本和用于生成此转储的 postgres

为了在运行 db:migrate 时成功地从转储中恢复或清理此文件 db/xx.sql,您必须安装完全相同的版本。它不适用于不同的主要/次要/版本(必须完全相同)

在我的例子中,第一行看起来像:

--
-- PostgreSQL database dump
--

-- Dumped from database version 9.6.5
-- Dumped by pg_dump version 9.6.5

我尝试安装 9.6.10(当前是 postgresql@9.6)和其他不同版本。在我从源代码准确编译 9.6.5 之前,它会继续扰乱我的文件。

找不到对此的解释,我在 9.6.x 更新日志中也没有看到更改。

很快我将创建一个自制的 tap 并将其作为示例。

关于ruby-on-rails - structure.sql 文件中的 search_path 被 rails db :migrate 修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52989311/

相关文章:

ruby-on-rails - rails 中的 '&' 是什么?

ruby-on-rails - rails 4 : Factory Girl & Rspec with associated Model

postgresql - 什么相当于 PostgreSQL 中的 Oracle 包

java - 如何在 Jasper 中格式化间隔类型

postgresql - 使用 postgres 中选定列的值添加时间间隔

sql - 查找磁盘上缺少文件的 PostgreSQL 记录,以及磁盘上缺少数据库记录的文件

json - 在 Postgres JSONB 字段中全局替换

ruby-on-rails - 排除属于置顶帖子的评论

json - json 数组元素的总和和百分比

ruby-on-rails - 工厂女孩 : Automatically assigning parent objects