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

问题描述 投票:0回答:1

我正在尝试在 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 中配置的凭据。

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

ruby-on-rails postgresql
1个回答
1
投票

三种可能的原因:

  1. 特殊转换::regclass考虑了

    search_path
    的当前设置。从应用程序查询时,您的表
    users
    所在的架构可能不在
    search_path
    中。
    search_path
    可以按用户或会话进行设置。
    解决方案是对表名进行模式限定,如下所示:

    'myschema.users'::regclass

  2. 大写。为什么是

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

  3. 连接到错误的数据库。端口错误?

© www.soinside.com 2019 - 2024. All rights reserved.