标签: rails-postgresql

PostgreSQL 9中的日历表

我正在建立一个分析数据库(我对数据和业务目标有深刻的理解,只有基本到中等的数据库技能).

我遇到过一些关于构建类似仓库的参考资料,这些仓库实现了"日历表"的概念.这很有意义,而且很容易完成.但是,我看到的大多数示例都是将范围限制为"日"的日历表.我的数据需要分析到小时级别.可能是几分钟.

我的问题:在空间效率和查询/排序速度方面,小时/分钟级别粒度的日历表的实现是否有价值?如果是这样,你能推荐一个表结构和种群方法/例子吗?

我的主要数据表将在任何给定时间包含2千多万行数据,并且用于分析的典型子集在1到5百万范围内.所以,正如你所看到的,那就是很多时间戳字段.

postgresql database-design data-warehouse rails-postgresql

13
推荐指数
2
解决办法
7350
查看次数

连接被拒绝(PGError)(postgresql和rails)

当我尝试使用"$ rails s"运行我的localhost时,我一直收到此错误:

(Mac OSX 10.8.3)(ruby 2.0.0p195(2013-05-14修订版40734)[x86_64-darwin12.3.0])(Rails 3.2.11)(psql(PostgreSQL)9.2.2)**用自制软件安装

我一直在做很多卸载postgresql并重新安装,所以我预感到某些地方可能存在冲突的库...我只是不知道从哪里开始.

我在同一个文件夹中安装了Postgresql 9.1和9.2,只是将9.1移到垃圾箱中.

这是我在终端中运行"rails s"时的输出

Danny$ rails s
^[b=> Booting Thin
=> Rails 3.2.11 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Exiting
/Users/Danny/.rvm/gems/ruby-2.0.0-p195/gems/activerecord-3.2.11/lib/active_record/connection_adapters/postgresql_adapter.rb:1208:in `initialize': could        not connect to server: Connection refused (PGError)
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5433?
could not connect to server: Connection refused
Is the server running on host "localhost" (::1) …
Run Code Online (Sandbox Code Playgroud)

postgresql ruby-on-rails rails-postgresql postgresql-9.1 postgresql-9.2

13
推荐指数
2
解决办法
2万
查看次数

Rails迁移总是插入空格或更改模式中列的顺序

我的rails迁移使用空格和表列的位置更新架构,这是一个令人沮丧的问题.

因此,大多数情况下,当我运行bundle exec rake db:migrate它时,将执行以下方案之一.当我将它合并到我们的主分支中并且其他开发人员解决这个问题时,他们的rails迁移会恢复标签和位置排序.

我们注意到,如果我是模式的最后一个提交者,那么团队中的所有三个开发人员在运行迁移时都会遇到相同的问题.

我刚刚更新postgres to v9.2.4了与其他开发者相同的内容.还有什么我可以尝试的想法?

例子

下面是git diffs来演示正在发生的事情.

重新排序模式的示例:

   create_table "accounts", :force => true do |t|
     t.integer  "organisation_id"
-    t.boolean  "active",             :default => false
     t.text     "notes"
+    t.boolean  "active",             :default => false
   end
Run Code Online (Sandbox Code Playgroud)

向标志添加标签的示例:

   create_table "comments", :force => true do |t|
-    t.integer  "commentable_id",   :default => 0
-    t.string   "commentable_type", :default => ""
+    t.integer  "commentable_id",     :default => 0
+    t.string   "commentable_type",   :default => ""
-    t.datetime "created_at",                       :null => false
- …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails pg rails-postgresql ruby-on-rails-3.2 postgresql-9.2

13
推荐指数
2
解决办法
1346
查看次数

如何在Rails之外使用ActiveRecord?

我正在构建一个基于六边形架构的Rails应用程序.

我的一个适配器是存储适配器(作为gem维护),它管理对数据库的访问,并为rails应用程序提供了简单的接口,以便在数据库中存储和查询数据.

我想ActiveRecord在这个gem中使用所有rake任务(创建,迁移,删除,回滚)来管理数据库.

我如何在轨道外使用AR,但是所有的rake任务?

ruby activerecord ruby-on-rails rails-postgresql ruby-on-rails-4

13
推荐指数
1
解决办法
7322
查看次数

同一个表上的两个"SELECT FOR UPDATE"语句会导致死锁吗?

假设两个并发事务在Postgresql DB上执行以下查询:

交易A:

SELECT * FROM mytable WHERE id IN (1, 2, 3, 4) FOR UPDATE
Run Code Online (Sandbox Code Playgroud)

交易B:

SELECT * FROM mytable WHERE id IN (6, 3, 2, 1) FOR UPDATE
Run Code Online (Sandbox Code Playgroud)

由于Postgresql以不一致的顺序获取行锁,是否可能发生死锁?例如,如果Postgresql按照此示例中给出的id的顺序获取行锁,则可能存在死锁.

或者Postgresql内部是否足够智能,以便始终SELECT FOR UPDATE以同一个表上的同时离散语句不会相互死锁的方式获取行锁(例如,始终按主键顺序获取行锁)?

如果PostgreSQL的自动防止此类死锁的发生,是否有修改,以防止这种情况的查询方式(例如,如果事实上PostgreSQL的收购顺序行锁被赋予的标识,并始终如一地分拣ID应该防止死锁)?

谢谢你的帮助!

postgresql database-deadlocks rails-postgresql

12
推荐指数
1
解决办法
2541
查看次数

rspec返回"PG ::错误:错误:关系"table_name"不存在"

环境是REE(2011.12),rvm,rspec 2.8.0,rails 3.0.6和pg 0.13.2.在CentOS 5.6上使用PostgreSQL 8.3.17.db:migrate可以正常工作.但是rspec有以下错误.

1) ApiController articles OK
 Failure/Error: Unable to find matching line from backtrace
 ActiveRecord::StatementInvalid:
   PG::Error: ERROR:  relation "table_name" does not exist
   : DELETE FROM "table_name"
Run Code Online (Sandbox Code Playgroud)

我正在使用rspec 1.x系列将我的项目从rails 2.3.5更新为使用rspec2的rails 3.0.复制了所有的rspec测试,我合并了旧的spec_helper.rb和新的(生成它rails g rspec:install).

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|

  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true

end
Run Code Online (Sandbox Code Playgroud)

我读到了关于这个错误的类似问题.所以我试过rake db:test:prepare或者rake db:test:load,但它没有解决.你有什么主意吗?看起来测试没有在测试数据库上运行......我该怎么办?:(

postgresql rspec rspec2 ruby-on-rails-3 rails-postgresql

11
推荐指数
1
解决办法
9505
查看次数

Rails:在Postgres中按日期排序,返回错误的订单

我有一个模型叫做Story我试图按created_at日期排序.由于我在使用Postgresql的Heroku上托管了我的应用程序,因此我的控制器中有以下内容:

@stories = Story.find( :all, :order => "DATE(created_at) DESC" , :limit => 11)
Run Code Online (Sandbox Code Playgroud)

我希望这能够按照创作日期排列我的前11首故事,并以最新的故事开头.

不幸的是,这不起作用.大多数故事都会正确地返回,但前两个是翻转的.也就是说,最新的故事在列表中排在第二位.

为什么会这样?我有一种偷偷摸摸的怀疑,我的结果根本没有排序或者是在错误的列上排序(也许是id?)而且直到现在它恰好按照我的预期在我的索引页面上显示时进行了排序.如何按照我的预期订购?

如果有人关心,索引视图只是按顺序显示故事.那是(HAML):

- @stories.each do |story|
  = render :partial => "event", :locals => { :event => story }
Run Code Online (Sandbox Code Playgroud)

编辑

我怀疑created_at是一个datetime列,该DATE(...)函数忽略了时间部分.因此它以随机顺序返回在同一日期创建的元素.由于前两个故事是在同一天创建的,但相隔几个小时,这可以解释为什么它们似乎是"逆转"的.如果是这种情况,那么按日期和时间排序的正确语法是什么?

ruby-on-rails rails-postgresql

11
推荐指数
2
解决办法
2万
查看次数

使用Ruby on Rails 3.2.14/Ruby 2.0.0/PostgreSQL 9.2.4中的activerecord从序列中检索nextval

这应该很简单.我想检索序列的nextval ...它不是默认值...它不是主键...它不是外键.在极少数情况下,我需要一个用户提供的值的序列号.

我尝试过以下方法:

@nextid = ActiveRecord::Base.connection.execute("SELECT nextval('xscrpt_id_seq')")
Run Code Online (Sandbox Code Playgroud)

而我得到的是:

#<PG::Result:0x007fe668a854e8 @connection=#<PG::Connection:0x00000003aeff30>>
Run Code Online (Sandbox Code Playgroud)

并通过使用

@nextid[0]["nextval"]
Run Code Online (Sandbox Code Playgroud)

我可以得到正确的值,但它似乎不是解决问题的正确方法.我搜索过,我读了"Pro Active Record",据说使用:

M_script.find_by_sql("SELECT nextval('xscript_id_seq')")
Run Code Online (Sandbox Code Playgroud)

但是,那没用.

任何关于"正确"(Rails方式)的提示,以从ROR中的序列中检索nextval,将非常感激!

rails-postgresql ruby-on-rails-3.2 postgresql-9.2 rails-activerecord

11
推荐指数
2
解决办法
4472
查看次数

我应该忽略schema.rb,因为扩展在开发/生产操作系统上有所不同吗?

我的数据库使用PostgreSQL.我在Mac上开发,需要这一行:

  # db/schema.rb on Mac environment
  enable_extension "plpgsql"
Run Code Online (Sandbox Code Playgroud)

但是,Linux上不需要扩展.

在这种情况下,我们应该忽略schema.rb并通过db:migrate为开发环境和生产环境生成吗?

ruby rake ruby-on-rails pg rails-postgresql

11
推荐指数
1
解决办法
3155
查看次数

Postgresql通过自制程序与山狮OS X.

这让我烦恼不已.

我在我的Mac上用OS 10.8.2(Mountain Lion)在Postgresql上建立了一个Rails 3.2环境.

我基本上遵循了Railscast中的指示,并通过Homebrew安装了postgresql版本9.2.0.但每当我这样做

which psql
Run Code Online (Sandbox Code Playgroud)

psql --version
Run Code Online (Sandbox Code Playgroud)

它总是显示预装了Mountain Lion(/usr/bin/psql和版本9.1.4)的系统postgresql 的位置和版本,而不是我用Homebrew(/usr/local/bin和版本9.2.0分别安装)的Postgresql的位置和版本).

我还设置了一个启动代理程序,以便在启动系统时postgresql自动启动.

我甚至试过按照这个博客的指示,当我跑步时我仍然得到相同的结果which psql.

但是,当我这样做时:

ps -ef | grep postgres
Run Code Online (Sandbox Code Playgroud)

我收到以下结果:

501   556   120   0 Fri02AM ??         0:00.12 /usr/local/bin/postgres -D /usr/local/var/postgres -r /usr/local/var/postgres/server.log
Run Code Online (Sandbox Code Playgroud)

这是否意味着我正在运行postgresql的自制版本?

我是否必须卸载系统postgresql?

homebrew ruby-on-rails-3 rails-postgresql osx-mountain-lion

10
推荐指数
2
解决办法
9672
查看次数