ruby-on-rails - rails SQL 查询报告使用 postgres 失败但从 psql 命令行工具成功

标签 ruby-on-rails postgresql

我正在尝试在 Ubuntu 上使用带有 Postgres9.1 的 Rails 2.3.5 应用程序(使用 Phusion Passenger 部署在 Apache2 上)。当我尝试访问它时,该应用程序抛出此错误,提示该表不存在:

PGError: ERROR:  relation "users" does not exist
LINE 4:              WHERE a.attrelid = '"users"'::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 = '"users"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum

但是,如果我在 psql(cmdline-client)上剪切并粘贴相同的查询,它就可以正常工作。 用户表也存在。我一次又一次地尝试了 rake db:reset 和 'rake db:migrate',但它似乎没有帮助。
我还验证了 ActiveRecord::Base.connection 从 rails-app 中的脚本/控制台成功,这意味着与数据库的连接使用 database.yml 中配置的凭据。

我迷路了.. 任何解决这个问题的线索都将不胜感激。

最佳答案

三个可能的原因。

1) special cast ::regclass采用 search_path 的当前设置考虑到。 从您的应用查询时,您的表 users 所在的模式可能不在 search_path 中。 search_path 可以按用户或 session 设置。
解决方案是像这样对表名进行模式限定:

'myschema.users'::regclass

2) 资本化。为什么是 '"users"'::regclass 而不是 'users'::regclass?这是多余的。表的实际名称是“用户”还是什么,你在 psql 中使用大写? (如果您实际上剪切并粘贴了查询,则不可能。)

3) 连接到错误的数据库。错误的端口? (请参阅@a_horse 的评论。)

关于ruby-on-rails - rails SQL 查询报告使用 postgres 失败但从 psql 命令行工具成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8001786/

相关文章:

ruby-on-rails - ActionView::Template::Error ('twitter/bootstrap/bootstrap.less' 未找到

mysql - 如何从查询中选择最后一个值?

mysql - rails 4 : Combining two DB variables into a conditional statement for display

ruby-on-rails - 我的应用找不到我的图片路径

ruby-on-rails - 如何使用 Thinking Sphinx 暂时禁用增量索引?

javascript - 每 n 秒刷新部分结果为 "Stack Level Too Deep"

performance - Redis 在插入方面似乎比 PostgreSQL 慢

postgresql - 将 PostgreSQL 配置为仅适用于 LOCALHOST 或指定的 ip + 端口

java - 使用 nativeQuery = true 在 JPA Reposity 中执行 @Query 时出现 ResultSet 错误

postgresql - 如何修复错误 “aggregate functions are not allowed in WHERE”