Ruby on rails 使用Rails 4.2在TimescaleDB数据库上运行RSpec测试套件

Ruby on rails 使用Rails 4.2在TimescaleDB数据库上运行RSpec测试套件,ruby-on-rails,rspec,timescaledb,Ruby On Rails,Rspec,Timescaledb,我有一个Rails 4.2.11.1应用程序,我正试图与TimescaleDB数据库一起使用 我已经解决了大多数问题(使用composite\u primary\u键gem来绕过Timescale的限制,即惟一索引应该始终包含表的timestamp列) 这使我的应用程序功能齐全,但每当我尝试写入时间刻度表时,我的测试套件就会失败,错误如下: PG::FeatureNotSupported: ERROR: invalid INSERT on the root table of hypertabl

我有一个Rails 4.2.11.1应用程序,我正试图与TimescaleDB数据库一起使用

我已经解决了大多数问题(使用
composite\u primary\u键
gem来绕过Timescale的限制,即惟一索引应该始终包含表的timestamp列)

这使我的应用程序功能齐全,但每当我尝试写入时间刻度表时,我的测试套件就会失败,错误如下:

PG::FeatureNotSupported: ERROR:  invalid INSERT on the root table of hypertable "events"
HINT:  Make sure the TimescaleDB extension has been preloaded.
据我所知,Rails没有在测试数据库中启用扩展;这适用于我正在使用的任何模式转储模式(无论是
:sql
还是
:ruby
)。使用
bundle exec rails dbconsole
手动连接到数据库,我可以看到扩展已启用

我不确定这是我的代码、时间尺度还是Rails的一个bug,但它阻止了我发布这一更改


我希望其他人以前遇到过这种情况,并且能够提供帮助

您确定为您的测试数据库启用了扩展吗

尝试运行:
RAILS\u ENV=testbundle exec RAILS dbconsole


如果您编写了一个迁移来启用扩展,我希望它也会针对您的测试数据库运行,除非您专门针对开发运行它。

您确定为您的测试数据库启用了扩展吗

尝试运行:
RAILS\u ENV=testbundle exec RAILS dbconsole


如果您编写了一个迁移来启用扩展,那么我希望它也能针对您的测试数据库运行,除非您专门针对开发运行它。

我在Rails 6.0.2.2/TimescaleDB 1.7.0(在Minitest上)上也遇到了同样的问题

当我从sql模式转储切换回ruby模式转储时,问题就解决了

config.active_record.schema_format=:ruby#(在application.rb中)
显然,sql格式的模式转储包含错误/是部分的,从中进行准备会引入错误(db:test:clone)


希望对你的案子有帮助

我在Rails 6.0.2.2/TimescaleDB 1.7.0(在Minitest上)上也遇到了同样的问题

当我从sql模式转储切换回ruby模式转储时,问题就解决了

config.active_record.schema_format=:ruby#(在application.rb中)
显然,sql格式的模式转储包含错误/是部分的,从中进行准备会引入错误(db:test:clone)


希望对你的案子有帮助

听起来架构转储文件缺少扩展名enable命令

如果
config.active\u record.schema\u format=:ruby
,则
schema.rb
将包含
启用扩展名“timescaledb”

如果
config.active\u record.schema\u format=:sql
,则
structure.sql
将包含
创建扩展名(如果不存在),timescaledb具有公共模式

如果模式转储中存在这些行,则可能必须对测试数据库模式进行干净的恢复

#小心删除测试数据库,确保数据库配置正确
RAILS_ENV=测试rake db:drop
RAILS\u ENV=测试rake db:create
RAILS_ENV=test rake db:schema:load 35; RAILS_ENV=test rake db:structure:load if:sql

然后,您应该能够运行测试,扩展将通过上面的架构还原过程启用。

听起来架构转储文件丢失了,而扩展启用命令丢失了

如果
config.active\u record.schema\u format=:ruby
,则
schema.rb
将包含
启用扩展名“timescaledb”

如果
config.active\u record.schema\u format=:sql
,则
structure.sql
将包含
创建扩展名(如果不存在),timescaledb具有公共模式

如果模式转储中存在这些行,则可能必须对测试数据库模式进行干净的恢复

#小心删除测试数据库,确保数据库配置正确
RAILS_ENV=测试rake db:drop
RAILS\u ENV=测试rake db:create
RAILS_ENV=test rake db:schema:load 35; RAILS_ENV=test rake db:structure:load if:sql

然后,您应该能够运行测试,并且将通过上面的模式还原过程启用扩展。

您可以查看从Ruby到PostgreSQL的连接字符串,查看它连接的数据库吗?您是否尝试过从其他工具连接并尝试插入TimescaleDB表?你能看到实际的INSERT语句吗?如果有人处理了您的问题,您也可以询问TimescaleDB社区。您是否创建了一个迁移来启用扩展,以便将其列在
schema.rb
中?@max是的,已经完成了。@k\rus我有一些INSERT语句的转储,是的。还有连接字符串。我加入了TimescaleDB Slack,看看是否有人能帮上忙。@SteveHill你明白了吗?你能看到从Ruby到PostgreSQL的连接字符串吗?看看它连接了哪个数据库?您是否尝试过从其他工具连接并尝试插入TimescaleDB表?你能看到实际的INSERT语句吗?如果有人处理了您的问题,您也可以询问TimescaleDB社区。您是否创建了一个迁移来启用扩展,以便将其列在
schema.rb
中?@max是的,已经完成了。@k\rus我有一些INSERT语句的转储,是的。还有连接字符串。我加入了TimescaleDB Slack,看看是否有人能帮上忙。@SteveHill你弄明白了吗?是的,我就是这么做的。我也希望如此,但这里确实发生了一些奇怪的事情。是的,我就是这么做的。我也希望如此,但这里肯定发生了一些奇怪的事情。不幸的是,我的投票已经被锁定了,