我正在尝试在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中配置的凭据。
我迷失了......任何弥补这一点的线索都将受到极大的赞赏。
答案 0 :(得分:1)
三个可能的原因。
1)special cast ::regclass考虑了search_path
的当前设置。
从您的应用中查询时,您的表格users
可能位于search_path
内的模式中。可以为每个用户或会话设置search_path
解决方案是对表名进行模式限定,如下所示:
'myschema.users'::regclass
2)资本化。为什么'"users"'::regclass
而不是'users'::regclass
?这是多余的。表“用户”的实际名称是什么,你在psql中使用大写? (如果您实际上剪切并粘贴了查询,则不能这样做。)
3)连接到错误的数据库。错误的港口? (见@a_horse的评论。)