Tag: postgresql

查询int是否在数组列内,Postgres with Rails

我有一个表格,其中包含整数数组类型的列。 给定一个整数作为输入,我想查询名为tipo_propiedad的列包含输入整数的行。 直接在Postgres中,可以使用&&运算符并将输入int转换为数组。 问题是使用这个: Zone.where(“tipo_propiedad && ?”, [].push(type)).count 其中type是输入整数,给出 SELECT COUNT(*)FROM“zonas”WHERE(tipo_propiedad && 1)PG :: UndefinedFunction:ERROR:operator不存在:integer [] && integer 我也尝试过 Zone.where(“tipo_propiedad && ?”, [5].push(type)) 因为tipo_propiedad里面只有1,2或3个而且给出了 SELECT COUNT(*)FROM“zonas”WHERE(tipo_propiedad && 5,1)PG :: UndefinedFunction:ERROR:operator不存在:integer [] && integer 我也在使用squeel但是gem没有任何操作符来执行此操作。

Rails,其中查询链带有或用于数组输入

我想创建一个查询链,以便找到给定特定filter的机器人用户。 某些filter可以具有多个值。 例如,我的“locale”filter可以有多个值(例如fr_FR,en_US)。 在此示例中,我检查了两个区域设置复选框(fr_FR和en_US)。 我创建了一个查询链,但输出不是我想要的: SELECT“bot_users”。* FROM“bot_users”WHERE(“bot_users”。“core_bot_id”=?AND(locale =’fr_FR’)或“bot_users”。“core_bot_id”=?AND(locale =’fr_FR’)AND(locale =’en_EN’))[[“core_bot_id”,1],[“core_bot_id”,1]] 我想要这样的东西: SELECT“bot_users”。* FROM“bot_users”WHERE(“bot_users”。“core_bot_id”=?AND(locale =’fr_FR’OR’en_EN’))[[“core_bot_id”,1]] 这是代码: @filter = Filter.find_by_letter_id(@letter.id) $i = 1 $a = 1 $s = 1 query = [{first_name: @filter.first_name}, {last_name: @filter.last_name}, {source: @filter.segment}, {gender: @filter.gender}, {timezone: @filter.timezone}, {locale: @filter.locale}, {created_at: [@filter.creation_date_start, @filter.creation_date_finish]}] query_chain = BotUser.where(core_bot_id: @bot.id) query.each do |hash| hash.each_pair do |key, value| […]

ActiveRecord :: Base.connection.exe的受影响的行与Postgres

有没有办法使用ActiveRecord::Base.connection.execute SQL操作产生的受影响行数? 我找到了MySQL适配器的答案 ,但它不适用于Postgres。 或者,如果有办法获得SQL文本响应(例如“UPDATE 126”),那也可以。

通过两个“has_many”子表的总和来排序查询?

在我的应用程序中, Invoice has_many item_numbers和Invoice has_many payments 。 每张发票都有一个余额,它是ItemNumber金额属性的总和,减去付款金额属性的总和。 在发票模型中很容易计算余额,但我正在尝试编写一个按余额对发票进行排序的查询,这在ActiveRecord / SQL中更难实现。 我已成功设法使用以下查询在item_numbers的总数上订购发票(感谢Daniel Rikowski): Invoice.where(user_id: 1, deleted: false, status: ‘Sent’) .joins(:item_numbers) .select(‘invoices.*, sum(item_numbers.amount)’) .group(‘invoices.id’) .order(‘sum(item_numbers.amount) asc’) .limit(20) 我试图通过下面的平衡来扩展这个顺序; Invoice.where(user_id: 1, deleted: false, status: ‘Sent’) .joins(:item_numbers) .joins(“FULL OUTER JOIN payments ON payments.invoice_id = invoices.id”) .select(“invoices.*, sum(item_numbers.amount_with_gst) – COALESCE(sum(payments.amount), 0)”) .group(“invoices.id”) .order(“sum(item_numbers.amount_with_gst) – COALESCE(sum(payments.amount), 0) #{dir}”)/ 此查询存在两个问题。 首先,它非常丑陋,其次,它不起作用。 […]

显示消息数组中的最后一条消息

关于我上一次尝试的答案 ,我可以实现我想要的。 一旦应用程序正常工作,我发现有些不同之处:只有创建消息并发送消息的人才会显示。 如果我回复,我没有看到答复,我知道问题。 我的消息模型有表: [:id, :user_id, :to, :body, …] :user_id与用于确定创建消息的人类似。 User 1是客户端, User 2是学生。 学生向客户发送消息。 只有我的客户端代码是这样的: #Controller Index: @messages = Message.where(to: current_user.id) # My replies are not included here .order(user_id: :asc, created_at: :desc) .select(‘distinct on (user_id) *’) 我说给我发给我的所有消息( :to )id为1 。 由于:to列,我不会看到我的回复。 我的(客户端)回复如下所示: to: #student id user_id: #client id 和学生留言: to: #client id user_id: […]

Postgres HStore错误 – 未知运算符

我的ruby代码: Portfolio.where(“data @> (:key => :value)”, :key => ‘CSJ’, :value => ‘0.1’) 生成以下SQL: “SELECT \”portfolios\”.* FROM \”portfolios\” WHERE (data @> (‘CSJ’ => ‘0.1’))” 想出这个错误: Error: PG::Error: ERROR: operator does not exist: unknown => unknown LINE 1: …olios”.* FROM “portfolios” WHERE (data @> (‘CSJ’ => ‘0.1’)) HINT: No operator matches the given name and argument type(s). […]

在Postgres的一张巨大的桌子上,Kaminari的COUNT(*)很慢

我正在使用Kaminari gem在大表(~1.5MM行)上分页查询。 虽然获取实际结果页面非常快(~20ms),但kaminari添加了SELECT COUNT(*) WHERE ….非常慢,并且在执行时间上增加了几秒钟。 有没有办法估算结果的数量?

需要将Postgres(== String)中的布尔值转换为Ruby布尔值

我正在使用Postgres和Rails。 有一个带有subselect的查询返回一个布尔值,但Postgres总是返回一个像’t’或’f’的字符串。 但是在生成的JSON中我需要一个真正的布尔值。 这是我的查询: SELECT *, EXISTS ( SELECT TRUE FROM measurement JOIN experiment ON measurement.experiment_id = experiment.id JOIN location ON experiment.location_id = location.id WHERE location.map_id = map.id LIMIT 1 ) AS measurements_exist FROM “map” 无论我是使用THEN true还是THEN 1或THEN ‘true’都没关系,我总会得到一个字符串。 所以我的JSON响应总是这样: [ {“id”:8, …, “measurements_exist”:”f”}, {“id”:9, …, “measurements_exist”:”t”} ] 但它应该(!)看起来像那样: [ {“id”:8, …, “measurements_exist”:false}, {“id”:9, …, […]

Rails:从MySQL转换为PostGres打破了Geokit距离计算?

我最近将我的数据库从MySQL切换到PostGres。 我也使用GeoKit。 当我使用已经播种的新数据库启动我的应用程序时,我收到以下错误: PGError: ERROR: function radians(character varying) does not exist LINE 1: …COS(0.661045389762993)*COS(-2.12957994527573)*COS(RADIANS(ti… ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. 任何人都知道为什么现在这会破裂? 我知道GeoKit仍然有效,因为当数据库被播种时,它仍然在每张票的模型中执行地理编码,它只是不能正确地进行距离计算。

在Hash中保存错误排序后的activerecord-postgres-hstore

使用Hstore存储为哈希表,在保存后在哈希中输入错误 class Service 1, “zz” => 2, “cc” => 3, “d” => 4 } #=> { “aaa” => 1, “zz” => 2, “cc” => 3, “d” => 4 } service.save reload! service = Service.find(:id) service.properties #=> { “d” => “4”, “cc” => “3”, “zz” => 2, “aaa” => 1 } Bug::: wrong ordering after save […]