Tag: postgresql

使用ActiveRecord的哈希数组

ActiveRecord(Rails 4.0)支持PostgreSQL Hstore和Array数据类型,因此理论上可以使用Hashes数组,但我的实现会抛出: PG::InvalidTextRepresentation: ERROR: malformed array literal: 错误很明显(双引号冲突): “{“null”=>”false”,”name”=>”schema_id”,”type”=>”integer”,”null”=>”false”,”name”=>”title”,”type”=>”text”}” : INSERT INTO “entities” (“attribute_hash”, “schema_id”, “title”) VALUES ($1, $2, $3) RETURNING “id” 解决方案对我来说并不明显,我该如何实现? 我的架构: create_table :schemas do |t| t.text :title t.timestamps end create_table :entities do |t| t.integer :schema_id, null: false t.text :title, null: false t.hstore :attribute_hash, array: true end 我的种子: @schema_id = Schema.create!(title: ‘accreu’) […]

rails动态在哪里sql查询

我有一个对象,有一堆属性代表可搜索的模型属性,我想只使用设置的属性动态创建一个SQL查询。 我创建了下面的方法,但我相信它容易受到sql注入攻击。 我做了一些研究并阅读了rails活动记录查询界面指南,但似乎where条件总是需要一个静态定义的字符串作为第一个参数。 我还试图找到一种方法来清理我的方法生成的sql字符串,但似乎没有一种好的方法可以做到这一点。 我怎么能做得更好? 我应该使用where条件还是以某种方式清理这个sql字符串? 谢谢。 def query_string to_return = “” self.instance_values.symbolize_keys.each do |attr_name, attr_value| if defined?(attr_value) and !attr_value.blank? to_return << "#{attr_name} LIKE '%#{attr_value}%' and " end end to_return.chomp(" and ") end

Rails和Postgresql:如何按小时分组查询?

如何在Postgres&Rails中按小时分组? 我已阅读了不少SO答案,但我收到了错误。 这在按日期分组时有效: Model.group(“date(updated_at)”).count 然后我尝试了以下一小时,但他们没有工作: Model.group(“hour(updated_at)”).count Model.group(“date_format(updated_at, ‘%H’)”).count Model.group(“extract(hour from updated_at)”).count 一旦我找到了需要更新的特定时间,我将如何获得那些小时的模型? 即: Model.where(“hour(updated_at) = ?”, 5)

如何查询postgres的UUID

我想使用UUID作为标识符,提供前8位数字以确定它是否存在于数据库中。 通常我可以毫无问题地做到这一点: select * from TABLE where id = ‘e99aec55-9e32-4c84-aed2-4a0251584941’::uuid 但这给了我错误: select * from TABLE where id LIKE ‘e99aec55%@’::uuid 错误: ERROR: invalid input syntax for uuid: “e99aec55%@” LINE 1: select * from TABLE where id LIKE ‘e99aec55… ^ Query failed PostgreSQL said: invalid input syntax for uuid: “e99aec55%@” 有没有办法在postgresql中查询UUID类型的前n位数?

Rails,PostgreSQL和历史触发器

所以… 我正在通过类似的东西添加由触发器填充的历史表,以便在我的项目中进行审计。 execute <<-SQL CREATE OR REPLACE FUNCTION process_history_table() RETURNS TRIGGER AS $history_table$ BEGIN IF (TG_OP = 'DELETE') THEN INSERT INTO history_table VALUES (DEFAULT, 'D', now(), OLD.*); RETURN OLD; ELSIF (TG_OP = 'UPDATE') THEN INSERT INTO history_table VALUES (DEFAULT, 'U', now(), NEW.*); RETURN NEW; ELSIF (TG_OP = 'INSERT') THEN INSERT INTO history_table VALUES (DEFAULT, 'I', […]

如果Record具有Array中的任何ID,则选择所有记录

早安溢出。 我在尝试选择所有具有存储在名为@problem的数组中的ID的处理时@problem 。 这是我的治疗控制器。 @problem = Remedy.find_by_sql([“SELECT id FROM remedies WHERE LOWER(\”remedyName\”) LIKE?”, “%#{params[:searchremedy]}%”.downcase]) query = “SELECT * FROM treatments INNER JOIN remedies_treatments on treatments.id = remedies_treatments.treatment_id WHERE remedies_treatments.treatment_id LIKE ?” @pretreatments = Treatment.find_by_sql([query, @problem]) 这是控制台的错误 ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR: syntax error at or near “,” LINE 1: …d WHERE remedies_treatments.treatment_id LIKE 233,234,224 “LIKE”运算符可能不是我想要做的事情 – 我尝试使用ANY运算符,但也无济于事。 […]

你如何引用Postgres中的字符串

在Rails中我使用MySQL并拥有 SnCl.all(:conditions => “col3=\”xx\””) 但它不适用于Heroku中的Postgres DB

如何在Rails和Postgresql中查找标记有多个标记的post

我有模型Post , Tag和PostTag 。 post通过post标签有很多标签。 我想找到专门标记有多个标签的post。 has_many :post_tags has_many :tags, through: :post_tags 例如,给定此数据集: posts table ——————– id | title | ——————– 1 | Carb overload | 2 | Heart burn | 3 | Nice n Light | tags table ————- id | name | ————- 1 | tomato | 2 | potato | 3 | […]

我如何加入派生表?

sql语句是这样的: select posts.id, posts.title from posts inner join (select distinct post_id,created_at from comments order by created_at DESC limit 5 ) as foo on posts.id=foo.post_id order by foo.created_at DESC; 我想获得一个相当于上面的rails 3 sql语句。 我尝试的内容如下: 以下sql查询给出了类似的结果。 select distinct post_id, created_at from comments order by created_at DESC limit 5 @temp = Comment.select(‘distinct(comments.post_id),created_at’).order(‘created_at DESC’).limit(5) 我试图将这个派生的@temp表加入posts表来获取posts.title 我尝试了这个但失败了。 @temp2 = @temp.joins(‘posts’) 那么,我如何使用派生的@temp表加入posts表? […]

检查Postgres数组中是否存在任何给定值的数组

我正在编写一个Rails 4应用程序,并在我的一个名为identifiers模型上有一个字符串数组列。 当用户传入标识符列表时,获取任何给定标识符与任何存储标识符匹配的行的语法是什么? 我正在尝试where(‘ARRAY[?] == any(identifiers)’, ids) ,但这似乎不起作用。