Tag: postgresql

更快地搜索字段的第1个字符与不匹配的记录?

我目前有以下内容: User (id, fname, lname, deleted_at, guest) 我可以通过fname初始查询用户列表,如下所示: User Load (9.6ms) SELECT “users”.* FROM “users” WHERE (users.deleted_at IS NULL) AND (lower(left(fname, 1)) = ‘s’) ORDER BY fname ASC LIMIT 25 OFFSET 0 由于以下索引,这很快: CREATE INDEX users_multi_idx ON users (lower(left(fname, 1)), fname) WHERE deleted_at IS NULL; 我现在要做的是能够查询所有不以字母AZ开头的用户。 我这样做是这样的: SELECT “users”.* FROM “users” WHERE (users.deleted_at IS NULL) […]

validation有条件时,数据库中的唯一性validation

当有多个进程时,在Rails中使用唯一性validation是不安全的,除非在数据库上也强制执行约束(在我的情况下是PostgreSQL数据库,所以请参阅http://robots.thoughtbot.com/the-perils-of-uniqueness-validations )。 在我的例子中,唯一性validation是有条件的:只有当模型中的另一个属性变为真时才应强制执行。 所以我有 class Model < ActiveRecord::Base validates_uniqueness_of :text, if: :is_published? def is_published? self.is_published end end 因此模型有两个属性: is_published (布尔值)和text (文本属性)。 对于Model iff is_published为true的所有模型, text应该是唯一的。 使用http://robots.thoughtbot.com/the-perils-of-uniqueness-validations中建议的唯一索引太过限制,因为无论is_published的值如何,它都会强制执行约束。 是否有人知道PostgreSQL数据库中的“条件”索引? 还是另一种解决方法?

更好的SQL – :group vs.:select =>’DISTINCT’

让我们假设三个模型,标准连接: class Mailbox :addresses end class Address < ActiveRecord::Base belongs_to :mailbox belongs_to :domain end class Domain :addresses end 现在很明显,如果对于任何给定的邮箱,您想知道它在哪个域中有地址,您有两种可能的方法: m = Mailbox.first # either: SELECT DISTINCT domains.id, domains.name FROM “domains” INNER JOIN # “addresses” ON “domains”.id = “addresses”.domain_id WHERE # ((“addresses”.mailbox_id = 1)) m.domains.all(:select => ‘DISTINCT domains.id, domains.name’) # or: SELECT domains.id, domains.name FROM “domains” […]

为什么我的Rails API不能保存数据库中的任何内容?

我正在构建一个带有Rails 4.1的应用程序,它有一个用户控制器和一个单独的API控制器,用于在/v1/users获取和发布基本用户数据(将在生产中的专用子域中提供)。 我的API :: V1:UsersControllerinheritance自ActionController :: Base,并具有以下create方法: # POST /v1/users def create @user = User.create(params[:user]) if @user.save render :json => @user else render :json => { :errors => @user.errors.full_messages }, :status => 422 end end 在我的主UsersController中,create方法如下所示: def create @user = User.new(user_params) @user.save redirect_to @user end private def user_params params.require(:user).permit(:first_name, :last_name, :email, :birthdate) end …而routes.rb将所有内容联系起来: namespace […]

Rails 4 where,order,group,count包括零 – postgresql

这是我的查询: User.where(“created_at >= ? AND created_at <=?", date1,date2).order('DATE(created_at) DESC').group("DATE(created_at)").count 我输出为: {Thu, 15 May 2014=>1} 但我想在剩下的时间里将输出设为0。 对于前者 {Thu, 15 May 2014=>1,Fri, 15 May 2014=>0} 我想得到的是在date range创建的Users , grouped created_at ordered和grouped ,以及每天的此类Users数。 如果特定日期没有用户,则应返回0,当前查询不返回。

计算月统计

我有一个捐款表,我正在尝试计算每个月的总金额。 没有任何捐款的几个月,我希望结果返回0。 这是我当前的查询: Donation.calculate(:sum, :amount, :conditions => { :created_at => (Time.now.prev_year.all_year) }, :order => “EXTRACT(month FROM created_at)”, :group => [“EXTRACT(month FROM created_at)”]) 返回: {7=>220392, 8=>334210, 9=>475188, 10=>323661, 11=>307689, 12=>439889} 任何想法如何抓住空虚的月份?

Rails 3查询:使用’select’和’order’时出错

我试图回答这个问题 ,我得到了这个问题。 我有一个具有id , email和first_name列的用户模型。 因此,在单个查询中,我想选择具有不同first_name用户,通过email对其进行排序并获取其ID 。 我怎样才能做到这一点? 什么行不通: User.select(:first_name).uniq.pluck(:id) 因为它触发了这个SQL SELECT DISTINCT “users”.”id” FROM “users” 。 这是从用户中选择不同的id。 但是我们想要选择不同的first_name User.order(“email DESC”).pluck(:id).uniq SQL生成: SELECT “users”.”id” FROM “users” ORDER BY email DESC 。 这不起作用,因为生成的sql不检查first_name的唯一性。

PG ::错误:错误:编码“UTF8”的无效字节序列:0xfc

当某些字符串保存到数据库时,我收到以下ActiveRecord错误。 ActiveRecord::StatementInvalid: PG::Error: ERROR: invalid byte sequence for encoding “UTF8”: 0xfc 我觉得这个字符串是Mühldorf 。 我已经尝试将# encoding: utf-8到我的ruby文件的顶部来解决这个问题,但似乎没有做任何事情。 我正在使用Ruby Geocoder提取位置数据,这就是字符串的来源。 我在Heroku上的Postgres数据库上运行Ruby 1.9.3。

user first_name last_name字段用于创建full_name字段

我的rails中有我的模型中当前表示的first_name和last_name字段。 我想在我的数据库中添加另一个名为full_name字段,并想知道无缝地执行此操作的最佳方法是什么。 请注意,我还有一个生产服务器,并希望这样做,以便我不仅在迁移中添加一列,而且还可以使用现有数据填充新字段。 编辑: 这是我的控制器 def followers @title = “Followers” @user = User.find(params[:id]) @users = @user.followers.paginate(page: params[:page]) @followers = @user.followers.find(:all, :select => ‘users.id, users.first_name, users.last_name’, :conditions => [“users.first_name like ?”,”%” + params[:q] + “%”]) respond_to do |format| format.html {render ‘show_follow’} format.json {render :json => @followers} end end 我希望能够1. select: ‘users.id, users.full_name和select: ‘users.id, users.full_name :condition =>[“users.full_name […]

带有Postgres数据的Rails不按顺序返回

我刚刚将我的应用程序从MySQL转换为Postgres。 以前,对.all的请求以id顺序返回所有行。 在Postgres上,行无序返回。 同样, Person.first 用于返回id为1的记录,现在它有时会返回另一条记录。 如果我添加这样的订单子句: Person.order(“id”).first 查询成功并返回第一行。 这是预期的行为吗?