Tag: postgresql

生产失败/ heroku:WHERE a.attrelid =’“学校”’:: regclass

我在我的本地环境中添加了一个名为schools的表格,它在开发中工作得很好。 实际上它甚至可以在staging(heroku)中正常工作,但是在生产和rake db:migrate失败的时候rake db:migrate抛出错误。 我甚至无法预编译assest(使用RAILS_ENV = production),访问我的应用程序的任何部分,包括生产中的rails控制台(heroku)。 一切都在抛出错误。 我已经失去了几个小时,但我觉得没有更接近我们的想法。 (注意:我对table_name的引用有'”…”‘ ,我认为这是问题的一部分) 我从rails 3.1.0转到3.1.3,这可能与它有关。 PGError: ERROR: relation “schools” does not exist LINE 4: WHERE a.attrelid = ‘”schools”‘::regclass ^ : SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = ‘”schools”‘::regclass AND a.attnum […]

Rails用范围扩展字段,PG不喜欢它

我有一个小部件模型。 窗口小部件属于商店模型,属于区域模型,属于公司。 在公司模型中,我需要找到所有相关的小部件。 简单: class Widget {:area => :company}).where(:companies => {:id => company.id}) end end 这将生成这个美丽的查询: > Widget.in_company(Company.first).count SQL (50.5ms) SELECT COUNT(DISTINCT “widgets”.”id”) FROM “widgets” LEFT OUTER JOIN “stores” ON “stores”.”id” = “widgets”.”store_id” LEFT OUTER JOIN “areas” ON “areas”.”id” = “stores”.”area_id” LEFT OUTER JOIN “companies” ON “companies”.”id” = “areas”.”company_id” WHERE “companies”.”id” = 1 => 15088 […]

Rails:如何在postgres上创建带时区的时间列

我有一个适用于postgres db的rails应用程序。 我有一个名为UserTimings的模型,其中有两个字段from_time和to_time。 t.time “from_time” t.time “to_time” 我预计时间将以完整的UTC格式存储,并带有时区信息。 过了一会儿,我意识到数据库有这种SQL查询来创建表。 from_time time without time zone, to_time time without time zone, 我不想要这个。 我想存放时区 。 我希望在UTC时间里有+0530的东西,我还没想到rails应用程序已被配置为处理它。 请告诉我如何编写迁移以强制数据库使用时区。 谢谢。

Heroku架构加载:数据库“postgres”用户的权限被拒绝

我正在尝试将我的Rails应用程序部署到Heroku,现在我想加载我的架构。 我收到以下错误: Running `bundle exec rake db:schema:load` attached to terminal… up, run.1533 rake aborted! PG::ConnectionBad: FATAL: permission denied for database “postgres” DETAIL: User does not have CONNECT privilege. 这很奇怪,因为postgres不是它应该连接的数据库。 通过ENV可供应用程序使用的数据库URL具有正确的值,而长期显然是随机的名称d3kwlkwlwjwljetc… 搜索此消息可以让我尝试删除或重置数据库的人,这不是我正在做的事情。 我有0行 我试过pg:reset ,甚至删除并放回数据库。 徒劳无功。 我不是在做db:drop ,只是db:schema:load 我傻眼了。 为什么我的应用无法连接? 编辑:显然,我无法schema:load ,但我可以迁移我的所有迁移。 这是为什么?

SQLite到Postgres(Heroku)GROUP BY

以下SQLite代码组按conversation_id分组: @messages=Message.where(“messages.sender_id = (?) OR messages.recipient_id = (?)” , current_user.id, current_user.id).group(“messages.conversation_id”) 在转移到Heroku时,Postgres无法识别此代码。 查看日志,我被告知要将所有Message列添加到GROUP BY – 让我使用这个function代码: @messages=Message.where(“messages.sender_id = (?) OR messages.recipient_id = (?)” , current_user.id, current_user.id).group(“messages.conversation_id , messages.updated_at, messages.id, messages.sender_id , messages.recipient_id, messages.sender_deleted , messages.recipient_deleted, messages.body, messages.read_at , messages.ancestry, messages.ancestry_depth, messages.created_at”) 只有此代码才能正确地按conversation_id分组。 它只输出符合WHERE条件的所有消息。 有任何想法吗?

在PostgreSQL中选择带有DISTINCT的列

我正在从数据库查询公交车站,我希望每个公交线路/方向只返回1站。 这个查询只是这样: Stop.select(“DISTINCT line_id, direction”) 除了它不会给我任何其他属性,除了那些2.我尝试了几个其他查询,让它返回除了line_id和direction字段之外的id (理想情况下它将返回所有列),没有运气: Stop.select(“DISTINCT line_id, direction, id”) 和 Stop.select(“DISTINCT(line_id || ‘-‘ || direction), id”) 在这两种情况下,查询都会丢失其distinct子句,并返回所有行。 一些很棒的家伙帮助我,并建议使用子查询让它返回所有的ID: Stop.find_by_sql(“SELECT DISTINCT a1.line_id, a1.direction, (SELECT a2.id from stops a2 where a2.line_id = a1.line_id AND a2.direction = a1.direction ORDER BY a2.id ASC LIMIT 1) as id FROM stops a1 然后,我可以提取所有ID并执行第二个查询以获取每个停靠点的完整属性。 有没有办法在1个查询中拥有它并让它返回所有属性?

如何将表列转换为另一种数据类型

我的Postgres数据库中有一个Varchar类型的列,我想要整数…现在我想要更改它们,不幸的是,这似乎不能使用我的rails迁移。 change_column :table1, :columnB, :integer 这似乎输出这个SQL: ALTER TABLE table1 ALTER COLUMN columnB TYPE integer 所以我试着这样做: execute ‘ALTER TABLE table1 ALTER COLUMN columnB TYPE integer USING CAST(columnB AS INTEGER)’ 但是在这个实例中,强制转换不起作用,因为某些列为空… 有任何想法吗? 错误: PGError: ERROR: invalid input syntax for integer: “” : ALTER TABLE table1 ALTER COLUMN columnB TYPE integer USING CAST(columnB AS INTEGER) Postgres v8.3

没有ActiveRecord :: Base的连接池

我正在尝试使用rails 4.2.6开发应用程序。 我正在尝试将postgres用于数据库。 服务器启动正常,但是当我尝试加载页面时,它会抛出“ActiveRecord :: Base没有连接池”错误。 会是什么呢? 编辑 pg gem无法正常工作。 我必须在启动服务器之前对其进行评论,然后在我的GemFile中取消注释。 我意识到我使用的是Ruby 2.3而不是Ruby 2.0(如预期的那样)。 我删除了ruby 2.3并在ruby 2.0环境下设置了所有内容。 它现在正常工作。 我曾经读过某个地方,在较新的Rails版本中有’pg’gem存在一些问题,要求人们使用’gem install pg –pre’代替安装gem。 我试过了,但后来我的应用程序在我的GemFile中需要’pg’gem,而且,上面提到的问题再次出现了。 这是我的database.yml文件的结果: default: &default adapter: postgresql encoding: unicode host: localhost username: ——- password: ——- pool: 5 development: <<: *default database: myDbName

如何通过SQL函数使属性设置器发送值

我试图让一个ActiveRecord模型中的属性设置器在rails生成其sql查询之前将其值包装在text2ltree()postgres函数中。 例如, post.path = “1.2.3” post.save 应该产生类似的东西 UPDATE posts SET PATH=text2ltree(‘1.2.3’) WHERE id = 123 # or whatever 这样做的最佳方法是什么?

升级到Rails 4后,postgresql服务器上的内存泄漏

我们在Heroku上的Rails应用程序上遇到了一个奇怪的问题。 从Rails 3.2.17迁移到Rails 4.0.3之后的Juste我们的postgresql服务器显示内存使用量的无限增加,然后它在每个请求上返回以下错误: ERROR: out of memory DETAIL: Failed on request of size xxx Juste用rails 4释放应用程序后,postgresql内存开始增加。 正如您在下面的屏幕截图中看到的,它在3小时内从500 MO增加到3,5 Go以上 同时,每秒提交加倍。 它从每秒120次提交传递: 每秒280次提交: 值得注意的是,当我们重新启动应用程序时,内存会下降到正常值600 Mo,然后上升到3个以上后几个小时(然后每个sql请求显示“内存不足”错误)。 这就像杀死ActiveRecord连接在postgresql服务器上释放内存一样。 我们可能在某处有内存泄漏。 但是: 它与Rails 3.2一起工作得非常好。 也许这个问题是我们为了使我们的代码适应Rails 4和Rails 4代码本身所做的更改之间的联系。 在Rails 4升级后,每秒提交的数量增加似乎很奇怪。 我们的堆栈是: Heroku,x2 dynos Postgresql,Ika计划在heroku上 独角兽,每个实例3名工人 Rails 4.0.3 Redis缓存。 值得注意的gem:延迟工作(4.0.0),活动管理员(在主分支上),舒适的墨西哥沙发(1.11.2) 在我们的代码中似乎没什么特别的东西。 我们的postgresql配置是: work_mem:100MB shared_buffers:1464MB max_connections:500 maintenance_work_mem:64MB 有人在切换到Rails 4时遇到过这样的行为吗? 我正在寻找重现的想法。 非常欢迎所有帮助。 提前致谢。