Руководство по созданию эффективных запросов



Download 17,08 Mb.
Pdf ko'rish
bet189/210
Sana25.06.2022
Hajmi17,08 Mb.
#704548
TuriРуководство
1   ...   185   186   187   188   189   190   191   192   ...   210
Bog'liq
OptimizZaprvPostgreSQL

Рис. 13.8 

Результат выполнения
Чтобы обойти эту проблему, мы написали центральную для предлагаемого 
решения функцию. Она представлена в лис тинге 13.6, а также является ча-
стью репозитория NORM на GitHub.
Листинг 13.6 

Функция 
ARRAY_TRANSPORT
CREATE OR REPLACE FUNCTION array_transport (all_items anyarray)
RETURNS SETOF text
RETURNS NULL ON NULL INPUT
LANGUAGE plpgsql
AS $body$
DECLARE
item record;
BEGIN
FOREACH item IN ARRAY all_items
LOOP
RETURN NEXT(to_json(item)::text);
END LOOP;
END;
$body$;
Эта функция принимает в качестве параметра любой массив; таким об-
разом ее можно использовать для обработки результатов любой функции, 
которая возвращает массив любых пользовательских типов, независимо от 
сложности и уровня вложенности этих типов.
Она создает JSON для любой записи всего за один проход, используя стан-
дартную функцию PostgreSQL 
to_json
.


Сложный поиск 

251
После построения массива JSON каждый элемент преобразуется в текс-
товую строку, чтобы его можно было передавать через JDBC. Вернувшись 
к рис. 13.2, вы увидите, что мы реализовали желаемый процесс обмена дан-
ными, по крайней мере в одном направлении. Теперь при выполнении
SELECT * FROM array_transport(booking_leg_select_json(17564910))
результат намного удобнее читать (см. рис. 13.9).
Рис. 13.9 

Текстовое представление JSON
Проницательные читатели могут заметить, что этот результат уже был 
показан на рис. 13.5 как транспортный объект, и задаться вопросом, зачем 
разбивать этот процесс на два шага и почему бы сразу не вернуть набор 
текстовых строк.
Причина состоит в том, что нам нужно сохранить 
строгие
зависимости
типов
. Процесс разработки управляется контрактом; следовательно, сущест-
вует обязательство по возврату объектов указанного типа. У JSON нет типа; 
любая текстовая строка, содержащая грамматически правильные объекты 
JSON, является допустимой. Если тип возвращаемого значения меняется 
из-за смены требований, нам нужно удалить его, а этого не произойдет, если 
не будут каскадно удалены все зависимые объекты, включая все функции, 
возвращающие значения данного типа. По сути, это гарантирует, что база 
данных соблюдает контракт.
Наконец, стоит отметить, что использование вложенных запросов в списке 
SELECT, как показано в лис тинге 13.3, хорошо работает, когда результирую-
щие множества невелики и содержат всего несколько записей. Если ожида-
ется большее количество возвращаемых объектов или сами объекты более 
сложные, могут потребоваться иные методы. В репозитории NORM на GitHub 
есть несколько подходящих примеров; см. 
https://github.com/hettie-d/NORM/
blob/master/sql/account_pkg.sql
.

Download 17,08 Mb.

Do'stlaringiz bilan baham:
1   ...   185   186   187   188   189   190   191   192   ...   210




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish