我正在尝试在 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/