Skip to content
This repository was archived by the owner on May 26, 2022. It is now read-only.

Commit 8736a8e

Browse files
committed
hstore, dblink and ltree
1 parent ff9cd5d commit 8736a8e

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed

extensions/hstore.tex

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,82 @@ \section{HStore}
33

44
HStore~-- расширение, которое реализует тип данных для хранения ключ/значение в пределах одного значения в PostgreSQL (например в одном текстовом поле). Это может быть полезно в различных ситуациях, таких как строки с многими атрибутами, которые редко вибираются, или полу-структурированные данные. Ключи и значения являются простыми текстовыми строками.
55

6+
\subsection{Пример использования}
7+
Для начала активируем расширение:
8+
\begin{lstlisting}[label=lst:hstore1,caption=Активация hstore]
9+
# CREATE EXTENSION hstore;
10+
\end{lstlisting}
11+
12+
Проверим работу расширения:
13+
\begin{lstlisting}[label=lst:hstore2,caption=Проверка hstore]
14+
# SELECT 'a=>1,a=>2'::hstore;
15+
hstore
16+
----------
17+
"a"=>"1"
18+
(1 row)
19+
\end{lstlisting}
20+
21+
Как видно на листинге~\ref{lst:hstore2} ключи в hstore уникальны. Создадим тоблицу и заполним её данными:
22+
23+
\begin{lstlisting}[label=lst:hstore3,caption=Проверка hstore]
24+
CREATE TABLE products (
25+
id serial PRIMARY KEY,
26+
name varchar,
27+
attributes hstore
28+
);
29+
INSERT INTO products (name, attributes)
30+
VALUES (
31+
'Geek Love: A Novel',
32+
'author => "Katherine Dunn",
33+
pages => 368,
34+
category => fiction'
35+
),
36+
(
37+
'Leica M9',
38+
'manufacturer => Leica,
39+
type => camera,
40+
megapixels => 18,
41+
sensor => "full-frame 35mm"'
42+
),
43+
( 'MacBook Air 11',
44+
'manufacturer => Apple,
45+
type => computer,
46+
ram => 4GB,
47+
storage => 256GB,
48+
processor => "1.8 ghz Intel i7 duel core",
49+
weight => 2.38lbs'
50+
);
51+
\end{lstlisting}
52+
53+
Теперь можно производить поиск по ключу:
54+
\begin{lstlisting}[label=lst:hstore4,caption=Поиск по ключу]
55+
# SELECT name, attributes->'pages' as page FROM products WHERE attributes ? 'pages';
56+
name | page
57+
--------------------+------
58+
Geek Love: A Novel | 368
59+
(1 row)
60+
\end{lstlisting}
61+
62+
Или по значению ключа:
63+
\begin{lstlisting}[label=lst:hstore5,caption=Поиск по значению ключа]
64+
# SELECT name, attributes->'manufacturer' as manufacturer FROM products WHERE attributes->'type' = 'computer';
65+
name | manufacturer
66+
----------------+--------------
67+
MacBook Air 11 | Apple
68+
(1 row)
69+
\end{lstlisting}
70+
71+
Создание индексов:
72+
\begin{lstlisting}[label=lst:hstore6,caption=Индексы]
73+
CREATE INDEX products_hstore_index ON products USING GIST (attributes);
74+
CREATE INDEX products_hstore_index ON products USING GIN (attributes);
75+
\end{lstlisting}
76+
77+
Можно также cоздавать индекс на ключ:
78+
\begin{lstlisting}[label=lst:hstore7,caption=Индекс на ключ]
79+
CREATE INDEX product_manufacturer
80+
ON products ((products.attributes->'manufacturer'));
81+
\end{lstlisting}
82+
83+
\subsection{Заключение}
84+
HStore~--- расширение для удобного и индексируемого хранения слабоструктурированых данных в PostgreSQL.

postgresql_extensions.tex

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,15 @@ \section{Prefix}
6262
Prefix реализует поиск текста по префиксу (prefix @> text).
6363
Prefix используется в приложениях телефонии, где маршрутизация вызовов и расходы зависят от вызывающего/вызываемого префикса телефонного номера оператора.
6464

65+
\section{Dblink}
66+
\textbf{Лицензия}: Open Source
67+
68+
Dblink~-- расширение, которое позволяет выполнять запросы к удаленным базам данных непосредственно из SQL, не прибегая к помощи внешних скриптов.
69+
70+
\section{Ltree}
71+
\textbf{Лицензия}: Open Source
6572

73+
Ltree~-- расширение, которое позволяет хранить древовидные структуры в виде меток, а так же предоставляет широкие возможности поиска по ним. Реализация алгоритма \href{http://en.wikipedia.org/wiki/Materialized\_path}{Materialized Path} (достаточно быстрый как на запись, так и на чтение).
6674

6775
\section{Заключение}
6876
Расширения помогают улучшить работу PostgreSQL в решении специфичеких проблем. Расширяемость PostgreSQL позволяет создавать собственные расширения,

0 commit comments

Comments
 (0)