我正在尝试在 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)上剪切并粘贴相同的查询,它就可以正常工作。
users 表也存在。我一次又一次尝试了 rake db:reset 和 'rake db:migrate' 但似乎没有帮助。
我还验证了 ActiveRecord::Base.connection 从 Rails-app 中的脚本/控制台成功,这意味着与数据库的连接使用在 database.yml 中配置的凭据。
我迷路了..任何解决这个问题的线索将不胜感激。
三种可能的原因:
search_path
的当前设置。从应用程序查询时,您的表 users
所在的架构可能不在 search_path
中。 search_path
可以按用户或会话进行设置。'myschema.users'::regclass
大写。为什么是
'"users"'::regclass
而不是'users'::regclass
?这是多余的。表的实际名称是“Users”还是什么,并且您在 psql 中使用大写? (如果您确实剪切并粘贴了查询,则不可能是这样。)
连接到错误的数据库。端口错误?