Tag: postgresql

按JSON数组中的匹配数查询和排序

在Postgres 9.4和Rails的jsonb列中使用JSON数组,我可以设置一个范围,返回包含传递给范围方法的数组中的任何元素的所有行 – 如下所示: scope :tagged, ->(tags) { where([“data->’tags’ ?| ARRAY[:tags]”, { tags: tags }]) } 我还想根据数组中匹配元素的数量来排序结果。 我很欣赏我可能需要超出ActiveRecord的范围才能做到这一点,所以一个vanilla Postgres SQL的答案也很有帮助,但如果它可以包含在ActiveRecord中,那么它可以是一个可链的范围。 根据要求,这是一个示例表。 (实际的架构要复杂得多,但这就是我所关心的。) id | data —-+———————————– 1 | {“tags”: [“foo”, “bar”, “baz”]} 2 | {“tags”: [“bish”, “bash”, “baz”]} 3 | 4 | {“tags”: [“foo”, “foo”, “foo”]} 用例是基于标签查找相关内容。 更多匹配标签更相关,因此结果应按匹配数量排序。 在Ruby中,我有一个像这样的简单方法: Page.tagged([‘foo’, ‘bish’, ‘bash’, ‘baz’]).all 哪个应按以下顺序返回页面: 2, […]

“Rake spec”在大多数测试中失败,但“rails s”在Diaspora源上工作正常

我有克隆的Diaspora来源,我有一个工作的本地吊舱似乎顺利运行。 但是当我运行$ rake spec一些初始测试通过,然后所有这些都开始失败。 此外,我发现有趣的是,每次运行rake spec时它们都会在不同的点上失败。 他们都失败了,错误: An error occurred in an after hook ActiveRecord::StatementInvalid: PG::ConnectionBad: PQsocket() can’t get socket descriptor: ROLLBACK occurred at /home/darshan/.rvm/gems/ruby-2.0.0-p353@diaspora/gems/activerecord-3.2.16/lib/active_record/connection_adapters/postgresql_adapter.rb:650:in `async_exec’ Postgres的日志说: could not receive data from client: Connection reset by peer unexpected EOF on client connection

将数组值发送到ruby中的sql查询?

我正在努力解决看似ruby的语义问题。 我正在编写一个从表单中获取可变数量的参数并创建Postgresql查询的方法。 def self.search(params) counter = 0 query = “” params.each do |key,value| if key =~ /^field[0-9]+$/ query << "name LIKE ? OR " counter += 1 end end query = query[0..-4] #remove extra OR and spacing from last params_list = [] (1..counter).each do |i| field = "" field << '"%#{params[:field' field << i.to_s field […]

Rails&Postgres:迁移到change_colomn会出现错误“无法转换为没有时区的类型时间戳”

用于将“deleted_at”时间列转换为日期时间列的Rails迁移失败。 关于如何解决这个问题的任何想法? 如果相关的话,这是Postgres的全新安装。 — change_column(:products, :deleted_at, :datetime) PGError: ERROR: column “deleted_at” cannot be cast to type timestamp without time zone : ALTER TABLE “products” ALTER COLUMN “deleted_at” TYPE timestamp

一次通话中多个日期范围的总和?

我有以下查询: SELECT SUM(“balance_transactions”.”fee”) AS sum_id FROM “balance_transactions” JOIN charges ON balance_transactions.source = charges.balance_id WHERE “balance_transactions”.”account_id” = 6 AND (balance_transactions.type = ‘charge’ AND charges.refunded = false AND charges.invoice IS NOT NULL) AND (“balance_transactions”.”created” BETWEEN ‘2013-12-20’ AND ‘2014-01-19’); 这样做会增加这两个日期之间发生的所有“费用”。 大。 工作良好。 问题是我几乎总是需要一次数百个日期范围的费用,这相当于我运行相同的查询数百次。 效率不高。 但有没有办法将其压缩为所有日期范围的单个查询? 例如,我将调用SUM作为一系列范围,如下所示: 2013-12-20 to 2014-01-19 2013-12-21 to 2014-01-20 2013-12-22 to 2014-01-21 2013-12-23 to 2014-01-22 […]

如何在vagranted虚拟机上访问postgresql?

我使用postgresql通过Vagrant虚拟机制作,并希望将其用作我的rails应用程序数据库。 我使用类似的Vagrantfile: Vagrant.configure(“2”) do |config| config.vm.network :private_network, ip: “192.168.33.18” config.vm.provision :chef_solo do |chef| # I take cookbook from https://github.com/opscode-cookbooks/postgresql chef.add_recipe “postgresql::server” chef.json = { postgresql: { config: { ssl: false, listen_addresses: ‘*’ }, password: { postgres: ‘postgres’ } } } end end 接下来我vagrant up并期望下一个database.yml将工作: development: database: app_development adapter: postgresql host: ‘192.168.33.18’ username: root 但这不会发生.. Rake任务失败并出现错误: […]

ProtocolViolation:ERROR:绑定消息提供0个参数,但是准备好的语句“”需要1

我正在尝试根据最先留下最新评论的患者的顺序创建一份留下评论的独特患者列表。 这是我创建列表的Ruby .erb代码: @comment_list.order(“created_at desc”).each_with_index do |comment, index| @comment_list在控制器中定义为: @comments = current_clinician.comments.select(‘ON (patient_id) *’).uniq @comments = @comments.order(“patient_id, created_at DESC”) @comment_list = Comment.select(‘*’).from(“(#{@comments.to_sql}) sub”) 我收到一条ActiveRecord :: StatementInvalid消息: PG :: ProtocolViolation:错误:绑定消息提供0个参数,但是准备好的语句“”需要1:SELECT * FROM(SELECT DISTINCT ON(patient_id)* FROM“comments”WHERE“comments”。“clinician_id”= $ 1 ORDER BY patient_id, created_at DESC)sub ORDER BY created_at desc 我试着按照24619117的答案,我的输出是这个和答案顶部29660396的组合。 $ rails -v Rails 4.1.8 $ ruby -v ruby […]

如何确保不通过activerecords将重复的行添加到我的数据库表中?

所以我有一张叫做投票的桌子。 有三列。 VoterID,VoteforID和投票。 每个单独列的唯一性并不重要,但是同一行不能重复两次 例如。 这是对的 Voter_id | Votefor_id | 投票 1 | 2 | 1 1 | 3 | 1 1 | 4 | 1 2 | 1 | 2 这是错的。 Voter_id | Votefor_id | 投票 1 | 2 | 1 1 | 2 | 1 1 | 4 | 1 2 | 1 […]

以has_many关系订购

我的Articles有很多Metrics 。 当Metric.name =“得分”时,我希望通过特定的Metric.value来订购Articles 。 ( Metric将各种文章统计信息记录为“名称”和“值”对。文章可以有多个度量标准,甚至多个“分数”,尽管我只对最近的排序感兴趣。) class Article has_many :metrics class Metric # name :string(255) # value :decimal(, ) belongs_to :article 我正在努力写一个范围来做这个 – 任何想法? 像这样的东西? scope :highest_score, joins(:metrics).order(‘metrics.value DESC’) .where(‘metrics.name = “score”‘) 更新: 一篇文章可以在metrics量表中存储许多“分数”(因为它们是按周/每月/每年等计算的),但我只对使用任何一篇文章的第一个(最近的)“分数”感兴趣。 Metric模型具有default_scope,可确保DESCending排序。 修复了’metrics.value DESC’报价位置的拼写错误。 与我的手机朋友uber rails hacker交谈,看起来我可能需要一个原始的SQL查询。 现在,我已经超越了我的脑袋……(如果有帮助,我正在使用Postgres。) 谢谢! 更新2: 感谢Erwin的SQL查询建议,我有一个原始的SQL查询,它有效: SELECT a.* FROM articles a LEFT JOIN ( SELECT DISTINCT […]

哪个是Rails应用程序的最佳数据库?

我正在开发一个Rails应用程序,它将访问许多RSS提要或抓取网站以获取数据(主要是新闻)。 它会像谷歌新闻一样,但采用不同的方法,所以我会存储很多新闻(或新闻摘要),将它们分类到不同的类别,并使用排名和推荐技巧。 我应该使用MySQL吗? 是否值得使用IBM DB2 purexml存储doucuments? 如果我选择DB2,也不需要Ruby搜索实现(Ferret,Ultrasphinx等)。 那是对的吗? PostreSQL在这方面有什么优势? 在这种情况下使用Couch DB是否有意义? 我想选择最好的选择,但不要过度复杂化解决方案。 所以我放弃了使用两种不同存储解决方案的想法(一种用于新闻文档,另一种用于其他数据)。 我也只考虑“免费”选项,所以我没看过Oracle或MS SQL Server。 提前致谢。