SQL-запрос rails сообщается о сбое с помощью postgres, но успешно из командной строки psql - PullRequest
1 голос
/ 04 ноября 2011

Я пытаюсь использовать приложение Rails 2.3.5 с Postgres9.1 в Ubuntu (развернуто на Apache2 с Phusion Passenger).Приложение выдает эту ошибку, когда я пытаюсь получить к ней доступ, жалуясь на то, что таблица не существует:

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), он прекрасно работает,Таблица пользователей тоже существует.Я пробовал снова и снова грабли db: reset и 'rake db: migrate', но это, похоже, не помогает.
Я также убедился, что ActiveRecord :: Base.connection успешно выполняется из скрипта / консоли в rails-appwhich означает, что соединение с базой данных работает с учетными данными, настроенными в файле database.yml.

Я потерян. Любые подсказки для исправления этой ситуации будут оценены по достоинству.

1 Ответ

1 голос
/ 04 ноября 2011

Три возможных причины.

1) Специальное приведение :: regclass учитывает текущую настройку для search_path.Возможно, ваша таблица users находится в схеме, которой нет в search_path при запросах из вашего приложения.search_path может быть установлено для пользователя или сеанса.
Решение будет состоять в том, чтобы квалифицировать схему имени таблицы следующим образом:

'myschema.users'::regclass

2) Использование заглавных букв.Почему '"users"'::regclass, а не 'users'::regclass?Это избыточно.Это фактическое имя таблицы «Пользователи» или что-то и вы используете верхний регистр в psql?(Если вы на самом деле вырезали и вставляли запрос, это не может быть.)

3) Соединение с неверной базой данных.Неправильный порт?(См. Комментарий @a_horse.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...