Russian Qt Forum

Qt => Базы данных => Тема начата: RVZ от Январь 28, 2012, 17:42



Название: Запросы к PostgreSQL (кто как пишет???)
Отправлено: RVZ от Январь 28, 2012, 17:42
В общем решил использовать в своих проектах PostgreSQL (раньше юзал MSSQL 2005).
Итак через PgAdminIII нормально отрабатывает....
Код
SQL
SELECT "CurrentVersion", "RegistrationDate" FROM public."CurrentVersion" WHERE "Stat" = TRUE
 
Причем удивляет именно обязательное наличие двойных кавычек при указании имени столбцов.... (может только у меня так???) раньше как то не уделял этому особого внимания ().
А вот из программы запрос в виде
Код
C++ (Qt)
query.exec("SELECT CurrentVersion, RegistrationDate FROM public.CurrentVersion WHERE Stat = TRUE");
 
Работать не хочет... это конечно не особо удивляет. При приведении к следующей форме -
Код
C++ (Qt)
query.exec("SELECT \"CurrentVersion\", \"RegistrationDate\" FROM public.\"CurrentVersion\" WHERE \"Stat\" = TRUE");
 
нормально работает. НО!!!! вот это -
Код
C++ (Qt)
\"...\"....\"
порядком достает.

Хотелось бы узнать кто как оформляет SQL код в своих проектах.... поделитесь опытом.  ???


Название: Re: Запросы к PostgreSQL (кто как пишет???)
Отправлено: asvil от Январь 29, 2012, 16:43
У вас таблицы созданы с идентификаторами столбцов, имена которых были в кавычках, а значит эти идентификаторы регистрозависимы.
Для сохранения регистра при запросах вам теперь также приходится использовать кавычки.

Предпочтительной нотацией для базы является some_column_identifier.



Название: Re: Запросы к PostgreSQL (кто как пишет???)
Отправлено: Disaron от Январь 29, 2012, 17:17
Дело в том что pgadmin при создании столбцов с разными регистрами в имени - взяли Вы их в кавычки или не взяли, создает их регистрозависимыми, а значит требует взятие в кавычки. Вообще разные регистры в именах столбцов - это паразитство МС-стайл. Отучаться надо от этого с ранних лет.


Название: Re: Запросы к PostgreSQL (кто как пишет???)
Отправлено: RVZ от Январь 29, 2012, 22:27
Огромное спасибо!!!
действительно при исключении заглавных букв надобность в двойных кавычках отпала  :D .


Название: Re: Запросы к PostgreSQL (кто как пишет???)
Отправлено: RVZ от Октябрь 08, 2012, 01:42
Всем доброго времени суток.
Продолжаю свое знакомство с PostgreSQL
В общем обрадованный более менее приличной поддержкой функций возвращающих табличные значение в 9.1 дал волю воспаленному мозгу и нарвался на следующие ограничение

Код
SQL
SELECT * FROM me.people AS pe
RIGHT OUTER JOIN (SELECT pe.people_id, mll.doc, mll.stat, mll.prim FROM me.list_people_doc(pe.people_id) AS mll) AS ml
ON pe.people_id = ml.people_id
 
Движок ругается на list_people_doc(pe.people_id) говорит что в этой части я не могу обращаться к pe.people_id хотя очень хочется...

Кто нибудь в курсе с 9.2 тоже не получится? и работал бы подобный код в каких нибудь других движках ??? ?


Название: Re: Запросы к PostgreSQL (кто как пишет???)
Отправлено: cya-st от Октябрь 08, 2012, 23:50
list_people_doc я так понисаю это хранимая процедура, она присутствует в БД? попробуйте задать без me.


Название: Re: Запросы к PostgreSQL (кто как пишет???)
Отправлено: RVZ от Октябрь 09, 2012, 15:41
Если в общем то да.. только list_people_doc это пользовательская функция возвращающая табличное значение (процедур как я понял в PG нет) и да она присутствует и работает (собственно и смысл этого кода заключался в ленивости что бы не писать механизм уже реализованный). без me. не получится это схема а юзверь в public ищет (да и если поставить статическое значение -число например "1" в место pe.people_id то функция запускается).
Как мне кажется проблема гдето с областью видимости пространства pe. (сегодня вечером еще несколько тестов проведу)


Название: Re: Запросы к PostgreSQL (кто как пишет???)
Отправлено: cya-st от Октябрь 09, 2012, 15:51
Цитировать
(процедур как я понял в PG нет)
Функция есть, а процедур нет ;D.
Не хочу вас обидеть, но скорее всего вам нужно изучать с нуля PG


Название: Re: Запросы к PostgreSQL (кто как пишет???)
Отправлено: fte от Октябрь 09, 2012, 17:11
А так?
Код
SQL
SELECT *,(me.list_people_doc(people_id)).* FROM me.people;


Название: Re: Запросы к PostgreSQL (кто как пишет???)
Отправлено: RVZ от Октябрь 10, 2012, 21:21
А так?
Код
SQL
SELECT *,(me.list_people_doc(people_id)).* FROM me.people;

Очень интересный пример. Результат получился как при INNER JOIN а подобный (me.list_people_doc(people_id)).* вызов признаться вижу в первые.
Хотелось бы поподробнее узнать о возможностях такова приема (случайно нет ли ссылки на доку с примерами?)
Есть ли возможность me.list_people_doc(people_id) задать псевдоним (или что то) что бы например поле stat (mll.stat) и pe.stat можно было использовать в WHERE


Название: Re: Запросы к PostgreSQL (кто как пишет???)
Отправлено: fte от Октябрь 11, 2012, 12:19
Ну насчет примеров, обратитесь в специализированные форумы по postgresql..... или , вернее сначала к документации

Код
SQL
SELECT *,(me.list_people_doc(people_id)).* FROM me.people pe WHERE (me.list_people_doc(pe.people_id)).stat = pe.stat;