标签: rails-postgresql

Rails - PostgreSQL/Heroku上没有保存的布尔字段

有一个奇怪的问题:

布尔字段未保存在Heroku上(本地工作正常)

细节:

  Rails 2.3 on Heroku (bamboo-ree-1.8.7).
Run Code Online (Sandbox Code Playgroud)

移民

  def self.up
   add_column :users, :send_contact_emails, :boolean, :default => false
  end
Run Code Online (Sandbox Code Playgroud)

在Heroku上:

>> u = User.last
=> #<User id: 100, ......
>> u.send_contact_emails = true
=> true
>> u.save
=> true

>> x = User.last
=> #<User id: 100, ...
>> x.send_contact_emails
=> nil  <---------------------------- Why is this ?
Run Code Online (Sandbox Code Playgroud)

当我在本地执行此操作(Postgresql 8.4)时,它按预期工作.

有任何想法吗 ?

编辑:

直接在DB上进行一些测试:

>> ActiveRecord::Base.connection.execute("SELECT send_contact_emails from users where id = 100")[0]
=> {"send_contact_emails"=>nil}

>> ActiveRecord::Base.connection.execute("UPDATE users SET send_contact_emails=FALSE where …
Run Code Online (Sandbox Code Playgroud)

postgresql activerecord ruby-on-rails heroku rails-postgresql

3
推荐指数
2
解决办法
2481
查看次数

在Rails 4中使用postgres数组,如何返回数组中所有唯一项的数组?

我的迁移看起来像这样:

create table :posts do |t|
    t.string :tags, array: true, default: []
end
Run Code Online (Sandbox Code Playgroud)

如何在所有帖子中获取存储在标签下的所有唯一标签的数组?

ruby postgresql ruby-on-rails rails-postgresql ruby-on-rails-4

3
推荐指数
1
解决办法
1245
查看次数

仅比较 postgres 中两个时间戳的时间

在 PostgreSQL 中,我需要一种方法来确定当前时间是否在具有 opens_at 和 closes_at 时间戳的某个模型的操作小​​时内。这样做的有效 Postgres 方式是什么。

对于 Sqlite3,我有:

                        (opens_at > closes_at AND
                        (TIME(opens_at) > :now OR :now < TIME(closes_at)))
                        OR
                        (closes_at > opens_at AND
                        (TIME(opens_at) < :now AND TIME(closes_at) > :now))
Run Code Online (Sandbox Code Playgroud)

我忘了提到这正在运行,ActiveRecord所以:now实际上等于当前的 UTC 时间。

sql postgresql rails-postgresql rails-activerecord

3
推荐指数
1
解决办法
5549
查看次数

Postgres可以默默地忽略列约束冲突吗?

我有一个Postgres 9.6表,其中某些列必须是唯一的.如果我尝试插入重复的行,我希望Postgres简单地忽略插入并继续,而不是失败或中止.如果插入包含在事务中,则不应中止事务或影响事务中的其他更新.

我假设有一种方法来创建如上所述的表,但我还没有想出来.

如果您可以告诉我如何在Rails中执行此操作,可以获得奖励积分.

postgresql rails-postgresql postgres-9.6

3
推荐指数
1
解决办法
2198
查看次数

3
推荐指数
1
解决办法
272
查看次数

ActiveRecord列不存在

我有一个使用Postgres数据库的Rails应用程序,其中有一个名为geolite_blocks的表.如果我像这样调用ActiveRecord:

GeoliteBlock.find_by_startIpNum 2776360991
Run Code Online (Sandbox Code Playgroud)

查询完美无缺.但是,如果我这样做的查询:

GeoliteBlock.where("startIpNum >= ?", 2776360991)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

ActiveRecord::StatementInvalid: PGError: ERROR:  column "startipnum" does not exist
LINE 1: ... "geolite_blocks".* FROM "geolite_blocks"  WHERE (startIpNum...
                                                             ^
: SELECT "geolite_blocks".* FROM "geolite_blocks"  WHERE (startIpNum >= 2776360991)
Run Code Online (Sandbox Code Playgroud)

但我知道该列存在,因为我只是用第一个代码示例查询它.关于为什么会发生这种情况的任何想法,以及我如何消除它?谢谢你的帮助!

postgresql activerecord ruby-on-rails rails-postgresql

2
推荐指数
1
解决办法
1332
查看次数

Rails字符串数组和PostgreSQL

我有一个名为Container列的Rails模型products.它是Postgres和'postgres_ext'gem支持的字符串数组.

GEMFILE的相关部分是:

gem 'rails', '3.2.9'
gem 'pg'
gem 'postgres_ext'
gem 'activerecord-postgres-hstore', git: 'git://github.com/engageis/activerecord-postgres-hstore.git'
Run Code Online (Sandbox Code Playgroud)

迁移的相关部分是:

 t.string :products, array: true
Run Code Online (Sandbox Code Playgroud)

我正在我的Container模型中编写一个公共方法,它将产品添加到此数组中.该方法如下所示:

 attr_accessible :products

 def add_to_products(product)

  if products.blank? || products.size == 0 ## product array is either uninstantiated or blank
    products = [product.id]
  else  

    unless products.include? product.id
      products << product.id
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这些是irb/console中的结果:

pry(main)> c = Container.first
=> #<Container id: "2765cc19-98f8-4e42-a1be-538788424ec7", name:....
pry(main)> p = Product.first
=> #<Product id: "319a25ae-87fe-4769-a9de-1a8e0db9e84f", name: ....
pry(main)> c.add_to_products(product)
pry(main)> c.products …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails rails-postgresql postgres-ext

2
推荐指数
1
解决办法
2679
查看次数

Heroku rake db:migrate使用'PG :: Error:'中止

我正在尝试在Heroku上运行我的应用程序,我无法通过'rake db:migrate'命令.我一直收到这个错误:rake aborted!发生错误,此以及所有后续迁移都已取消:

PG ::错误:错误:必须是扩展名plpgsql的所有者

任何的想法?

ps这是完整的错误日志:http://pastebin.com/iYeiMD2y

postgresql heroku ruby-on-rails-3 rails-postgresql

2
推荐指数
1
解决办法
860
查看次数

重新启动Heroku数据库

我正在使用由亚马逊托管的postgres数据库在heroku上运行一个rails应用程序.我尝试了一个永远不会结束的迁移(超过40分钟)并且运行了太多次.现在我有20个连接打开数据库,这是最大的,不知道如何关闭这些连接.

我能做什么?

ruby-on-rails heroku rails-postgresql heroku-postgres

2
推荐指数
1
解决办法
1980
查看次数

在Rails中选择Distinct的PostgreSQL错误

在Mysql上它可以正常工作.

PG ::错误:错误:对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表LINE 1中:) ORDER BY programs.rating DESC,program_sc ... ^:

查询:

SELECT DISTINCT"programs".*FROM"programs"INNER JOIN"program_schedules"ON"program_schedules"."program_id"="programs"."id"WHERE(programs.rating> = 5 AND program_schedules.start> ='2012-11 -03 23:14:43.457659')AND(ptype ='movie')ORDER BY programs.rating DESC,program_schedules.start DESC

Rails代码:

@data = Program.joins(:program_schedules).where('programs.rating> =?AND program_schedules.start> =?',5,Time.now).order('programs.rating DESC,program_schedules.start DESC') .uniq

我试过了

Program.select("programs.*,program_schedules.*).join(:program_schedules).where(...

但是,就这样,当我要读书的时候

@ data.program_schedules

我得到一个零值(当我知道没有零值)

PostgreSQL 9.2(Heroku),Ruby 1.9.2

关于我的DB的一些信息:

class Program < ActiveRecord::Base
   has_many :program_schedules
end


class ProgramSchedule < ActiveRecord::Base
  belongs_to :program
end
Run Code Online (Sandbox Code Playgroud)

Schema.db

 create_table "program_schedules", :force => true do |t|
        t.integer  "program_id"
        t.datetime "start"
  end

  create_table "programs", :force => true …
Run Code Online (Sandbox Code Playgroud)

postgresql ruby-on-rails ruby-on-rails-3 rails-postgresql

1
推荐指数
1
解决办法
462
查看次数