Tag: postgresql

与自身可选的has_one关联的范围

我有一个模型缩进。 我正在使用STI。 缩进可以是两种类型的销售和购买。 在购买类中,我使用可选的has_one关联。 class Purchase ‘Sale’, :foreign_key => ‘linked_indent_id’ # Make it work. scope :unsold, lambda {includes(:sale).where(‘id not in (select distinct linked_indent_id from indents)’)} end class Sale ‘Purchase’, :foreign_key => ‘linked_indent_id’ end 我只需要购买类的范围,我可以使用该范围找到所有未与销售相关联的购买。 我使用Rails 3.2和Postgres作为数据库。 更新: 生成的查询如下。 SELECT “indents”.* FROM “indents” WHERE “indents”.”type” IN (‘Purchase’) AND (id not in (select distinct linked_indent_id from indents)) […]

Rails ActiveRecord:如何在jsonb上使用带双引号的绑定变量

我有一个postgres jsonb查询如下: Blog.where(“upload_data @> ‘[ { \”name\”: \”#{name}\” }]'”) 哪个有效,但打破了构建,因为优秀的制动员指出了可能的SQL注入风险。 如果我使用绑定变量: Blog.where(“upload_data @> ‘[ { \”name\”: ? }]'”, name) 它创建一个SQL查询,如: WHERE upload_data @> ‘[ { “name”: ‘name’ }]’ 请注意单引号 – 这是一个无效的查询 如果我使用单引号,我得到: WHERE upload_data @> “[ { ‘name’: ‘name’ }]” 这是无效的 我尝试了一些其他的东西,但我想要的是绑定变量计算为双引号的字符串: WHERE upload_data @> ‘[ { “name”: “name” }]’ 或者一个不同的解决方案 – 除了让刹车手跳过文件。

Rails Postgres架构问题 – 以下架构之一无效:“test”“public”

我已经高低搜索了这个答案,但我很短暂。 我正在尝试使用基于Postgres模式的Rails 4,Devise和Apartment构建多租户应用程序。 对于我当地的Postgres服务器,我决定使用PostgresApp。 我按照Go Rails多租户指南进行操作,当这个错误开始出现时,我有了这个设置(每个租户一个用户)。 当我试图为Devise安装Invitable扩展时,昨天开始在本地显示,我似乎找不到任何关于发生了什么的线索。 以下是我如何得到具体错误: michael$ rake environment db:drop michael$ rake db:create michael$ rake db:migrate == 20160908204559 DeviseCreateUsers: migrating ================================ — create_table(:users) -> 0.0091s — add_index(:users, :email, {:unique=>true}) -> 0.0032s — add_index(:users, :reset_password_token, {:unique=>true}) -> 0.0031s — add_index(:users, :confirmation_token, {:unique=>true}) -> 0.0032s — add_index(:users, :unlock_token, {:unique=>true}) -> 0.0029s == 20160908204559 DeviseCreateUsers: migrated […]

-bash:pg_dump:找不到命令

我正在尝试在本地为我的rails应用程序提取生产数据库。 我的本地postgres版本太低,所以我需要从9.4.1更新到Postgresql 9.6.5。 我通过Homebrew安装了Postgres 9.6.6: brew install postgresql@9.6 然后跑了: brew services start postgresql@9.6 但是,当我尝试执行pg_dump我得到-bash: pg_dump: command not found 。 我也尝试更新我的路径: export PATH=”/usr/local/Cellar/postgresql\@9.6/9.6.6/bin:$PATH” 知道我需要做些什么来让pg_dump工作吗?

在Rails Postgres中使用JSONB数据类型的查询

如何查询具有空的appointment_id的slot_details的日程表。 这是一个示例数据集: id: 98, consulting_location_doctor_id: 498, schedule_date: Thu, 15 Jan 2015 00:00:00 IST +05:30, slot_details: [{“end”=>”2015-01-15T15:00:00.000+00:00”, “start”=>”2015-01-15T14:30:00.000+00:00”, “title”=>” 2:30 pm to 3:00 pm”, appointment_id: “”}, {“end”=>”2015-01-15T15:30:00.000+00:00”, “start”=>”2015-01-15T15:00:00.000+00:00”, “title”=>” 3:00 pm to 3:30 pm”, appointment_id: “”}, {“end”=>”2015-01-15T16:00:00.000+00:00”, “start”=>”2015-01-15T15:30:00.000+00:00”, “title”=>” 3:30 pm to 4:00 pm”, appointment_id: “”}, {“end”=>”2015-01-15T16:30:00.000+00:00”, “start”=>”2015-01-15T16:00:00.000+00:00”, “title”=>” 4:00 pm to 4:30 pm”, appointment_id: “”}, […]

使用Postgres hstore的竞争条件

我有一个表,其中包括许多其他领域的一个hstore DB / schema.rb create_table “requests”, force: true do |t| t.hstore “parameters” end 一些记录具有字段parameters[“company_id”]但不是全部。 我需要做的是确保只使用给定parameters[“company_id”]创建一个Request对象。 可能有多次尝试同时保存记录 – 因此竞争条件。 我在整个表中的hstore寻找唯一的company_id值。 我发现我可以运行一个事务来锁定数据库并检查具有给定parameters[“company_id”]的请求是否存在,如果不创建它。 如果company_id是Request模型上的一个简单字段,我可以这样做: Request.transaction do if Request.find_by(company_id: *id* ) log_duplication_attempt_and_quit else create_new_record log_successful_creation end end 不幸的是它是hstore而我无法改变它。 使用hstore实现这一目标的最佳方法是什么? 我正在寻找快速的东西,因为表中有很多记录。 纯SQL查询没问题 – 遗憾的是我没有足够的SQL背景来弄明白我自己。 这可以为性能编制索引吗? 例: a = Request.new(parameters: {company_id: 567, name: “John”}) b = Request.new(parameters: {name: “Doesn’t have company_id […]

使用PostgreSQL运行rails db迁移的最低权限

我注册了一个网络主机计划,所以我可以发布我的rails应用程序。 他们为我提供了服务器并访问它。 这是一个共享的CentOS Linux服务器,我可以访问它的bash。 我试图将我的数据库模式加载到他们提供的postgres数据库(v8.4)中,但这样做会给我一个错误。 当我执行: RAILS_ENV=production rake db:schema:load 生成以下错误: — enable_extension(“plpgsql”) rake aborted! ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near “EXTENSION” LINE 1: CREATE EXTENSION IF NOT EXISTS “plpgsql” ^ : CREATE EXTENSION IF NOT EXISTS “plpgsql” /home/user/path-to-app/db/schema.rb:17:in `block in ‘ /home/user/path-to-app/db/schema.rb:14:in `’ PG::SyntaxError: ERROR: syntax error at or near “EXTENSION” LINE 1: […]

为什么此ActiveRecord语句在Server中失败但在Console中失败

我有以下查询在特定控制器中的rails s中失败。 在rails c没有失败。 Post.includes(:user).find(:all, :limit => 10, :order => ‘users.display_name ASC’) 在控制台中,它返回正确的数据。 在服务器中,我收到此错误 ActiveRecord::StatementInvalid: PGError: ERROR: column posts.users.display_name does not exist LINE 1: …s_count” AS t0_r7, “posts”.”popularity” AS t0_r8, “posts”.”u… ^ 查询很长,我只想包含一些相关的片段 : SELECT “posts”.”id” AS t0_r0, “posts”.”post_content” AS t0_r1, … “posts”.”popularity” AS t0_r8, “posts”.”users.display_name” AS t0_r9, “posts”.”subtopics.name” AS t0_r10, “posts”.”categories.category_name” AS t0_r11 … […]

Rails 4 / postgresql – 根据另一个表数据在表上插入数据(after_create)

在创建模型交易时,我使用after_create在DealPrize表上创建奖品。 Deal和DealPrize属于/ has_many关系:a Deal有许多Deal奖品,Dealprize属于Deal。 它的工作方式如下:在Deal中,我有一个列’prize-number’,我使用了after_create,以便amdin创建一个新的交易evetytime,应用程序获取此prize_number列,并创建此批量的奖品(插入尽可能多的行必要时)在DealPrize表中。 出于性能考虑,奖品数量可以> 500,000并且为了优化INSERT。 我找到了https://www.coffeepowered.net/2009/01/23/mass-inserting-data-in-rails-without-killing-your-performance/ :我选择了选项2(原始SQL和usi_ng’事务) “)。 事实上,最有效的方式(选项3:’单个质量插入’)在piostgresql中不容易获得(这个人提供了SQL的exmaples)并且对于mee来说太难了(它涉及一些COPY命令……)。 所以这是我的代码优化之前(它工作) 车型/ deals.rb after_create :create_deal_prizes def create_deal_prizes self.prizes_number.times do prizes = DealPrize.create(:deal_id => self.id, :admin_user_id => self.admin_user_id) prizes.save end end 所以我没有在PostgreSQL中应用选项2(带有事务的原始SQL),就像这个用于SQL的人一样 这是’我试过的: 车型/ deals.rb after_create :create_deal_prizes def create_deal_prizes Deal.transaction do self.prizes_number.times do |i| DealPrize.connection.execute “INSERT INTO ‘deal_prizes’ (deal_id) values (self.deal.id)” end end end 但它失败了,我收到错误: […]

计算Active Admin仪表板(Rails,Active admin 1.0,Postgresql数据库,postgres_ext gem)中序列化属性(数组)中值的出现次数

我想要一个基本表来总结数组中值的出现次数。 我的应用程序是一个每日交易应用程序,旨在了解更多Ruby on Rails。 我有一个模型交易,它有一个名为Deal_goal的属性。 它是一个在数组中序列化的多重选择。 这是来自schema.db的deal_goal: t.string “deal_goal”,:array => true 所以交易A可以有交易=目标= [交通,资格]和另一笔交易可以有deal_goal = [品牌,交通,收购] 我想要构建的是我的仪表板中的一个表,它将采用每种类型的目标(数组中的每个值)并计算其deal_goal的数组将包含此类目标并计算它们的交易数。 我的目标是拥有这张桌子: 我怎样才能做到这一点? 我想我需要为每种类型的值对每个deal_goal数组进行分组,然后计算这些目标在数组中出现的次数。 我对RoR很新,无法做到。 这是我到目前为止的代码: column do panel “top of Goals” do table_for Deal.limit(10) do column (“Goal”), :deal_goal ???? # add 2 columns: ‘nb of deals with this goal’ ‘Share of deals with this goal’ end end 任何帮助将非常感激!