繁体   English   中英

Rails SQL查询报告使用postgres失败,但从psql命令行工具成功

[英]rails SQL query reported failing with postgres but succeeds from psql command-line tool

我试图在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) 特殊search_path转换:: regclass考虑了search_path的当前设置。 从您的应用程序查询时,也许您的表users所处的架构不在search_path 可以为每个用户或会话设置search_path
解决方案是像这样对表名进行模式限定:

'myschema.users'::regclass

2)大写。 为什么使用'"users"'::regclass而不是'users'::regclass 这是多余的。 表的实际名称是“ Users”还是其他名称,并且在psql中使用大写字母? (如果您实际剪切并粘贴了查询,就不能这样。)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM