Ошибка с Postgresql

Уже исправленные репорты или принятые предложения
Ответить
alu
Сообщения: 16
Зарегистрирован: 2011.10.26, 09:55
Контактная информация:

Ошибка с Postgresql

Сообщение alu » 2012.07.07, 01:53

Есть БД на Постгресе, создал модель и контроллер через gii
таблица на странице Manage отображается, но не работает поиск, Алертом выдает ошибку

Код: Выделить всё

Error 500: <h1>CDbException</h1>
<p>CDbCommand failed to execute the SQL statement: SQLSTATE[42703]: Undefined column: 7 ERROR:  column "country" does not exist
LINE 1: SELECT COUNT(*) FROM "Countries" "t" WHERE Country LIKE '%A%...
                                                   ^. The SQL statement executed was: SELECT COUNT(*) FROM "Countries" "t" WHERE Country LIKE :ycp0 (/xxx/framework/db/CDbCommand.php:528)</p><pre>#0 /xxx/framework/db/CDbCommand.php(425): CDbCommand->queryInternal('fetchColumn', 0, Array)
#1 /xxx/framework/db/ar/CActiveRecord.php(1536): CDbCommand->queryScalar()
Суть ошибки в том, что название поля не заключается в двойные кавычки ("), а для Постгреса это обязательно. Те вместо запроса
SELECT COUNT(*) FROM "Countries" "t" WHERE Country LIKE '%A%...

должен быть запрос
SELECT COUNT(*) FROM "Countries" "t" WHERE "Country" LIKE '%A%...

Что делать и как быть? в интернете решений особо не нашел. :?: :?: :?:

niklazer
Сообщения: 1
Зарегистрирован: 2012.02.02, 23:03

Re: Ошибка с Postgresql

Сообщение niklazer » 2012.07.07, 20:58

На мой взгляд, самое простой вариант решения - избавиться от необходимости ставить кавычки. Их использование не является обязательным для postgresql (как и для длбой другой СУБД). Дело в том, что IDE (например EMS SQL Manager) для postgresql могут при создании таблиц через визуальный интерфейс формировать DDL с использованием кавычек:
create table "Table" (
"Id" serial primary key,
"Caption" varchar(512)
);
Такой скрипт лучше заменить на следующий:
create table Table1 (
Id serial primary key,
Caption varchar(512)
);
В этом случае при формировании запроса будет неважен регистр именования полей.

alu
Сообщения: 16
Зарегистрирован: 2011.10.26, 09:55
Контактная информация:

Re: Ошибка с Postgresql

Сообщение alu » 2012.07.09, 06:58

niklazer писал(а):На мой взгляд, самое простой вариант решения - избавиться от необходимости ставить кавычки. Их использование не является обязательным для postgresql (как и для длбой другой СУБД). Дело в том, что IDE (например EMS SQL Manager) для postgresql могут при создании таблиц через визуальный интерфейс формировать DDL с использованием кавычек:
create table "Table" (
"Id" serial primary key,
"Caption" varchar(512)
);
Такой скрипт лучше заменить на следующий:
create table Table1 (
Id serial primary key,
Caption varchar(512)
);
В этом случае при формировании запроса будет неважен регистр именования полей.
Таблицы уже были созданы давно и залезать в их структуру (заноно их создавать) это плохая идея, слишком много данных и завязки там сложные.
Выход вообще есть другой? Просто нужно чтобы все поля и таблицы в запросах поиска и во всех остальных ставились в кавычках, иначе ничего работать не будет

alu
Сообщения: 16
Зарегистрирован: 2011.10.26, 09:55
Контактная информация:

Re: Ошибка с Postgresql

Сообщение alu » 2012.07.09, 07:50

Может, как-то можно определить список имен полей, как их надо использовать в запросах?

alu
Сообщения: 16
Зарегистрирован: 2011.10.26, 09:55
Контактная информация:

Re: Ошибка с Postgresql

Сообщение alu » 2012.07.09, 08:53

Причем в самой медели поля rawName Описаны правильно
[Country] => CPgsqlColumnSchema Object
(
[name] => Country
[rawName] => "Country"
Так почему же она их не использует?

alu
Сообщения: 16
Зарегистрирован: 2011.10.26, 09:55
Контактная информация:

Re: Ошибка с Postgresql

Сообщение alu » 2012.07.09, 11:12

Для поиска проблема снята!
просто в Модели нужно было прописать поля для поиска в кавычках
public function search()
.....
$criteria->compare('"Country"',$this->Country,true);
.....

и вроде поиск работает нормально, дальше посмотрим что где всплывет еще.

flame
Сообщения: 7
Зарегистрирован: 2013.01.21, 09:05

Re: Ошибка с Postgresql

Сообщение flame » 2013.04.02, 12:00

Товарищи, столкнулся с данной проблемой. Запись названия полей таблицы в двойные кавычки в методе search, не исправило ошибку. Какие есть еще варианты решения ошибки для работы с PostgreSQL ?

Аватара пользователя
diselop
Сообщения: 240
Зарегистрирован: 2013.01.29, 14:56

Re: Ошибка с Postgresql

Сообщение diselop » 2013.05.05, 16:50

Попробуй так

Код: Выделить всё

$Countries=' "Countries" '
И подставляй переменную в запрос!

Ответить