1 <!DOCTYPE html PUBLIC
"-//W3C//DTD html 4.01 transitional//EN">
4 <!-- DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN" -->
7 <META name=
"generator" content=
"HTML Tidy, see www.w3.org">
8 <META http-equiv=
"Content-Type" content=
"text/html; charset=utf8">
9 <TITLE>PostgreSQL FAQ
</TITLE>
12 <BODY bgcolor=
"#ffffff" text=
"#000000" link=
"#ff0000" vlink=
"#a00000" alink=
"#0000ff">
13 <H1>Ответы на часто задаваемые вопросы по PostgreSQL
</H1>
15 <P>Дата последнего обновления: Среда
25 июня
23:
54:
14 EDT
2008</P>
17 <P>Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (
<A href=
18 "mailto:bruce@momjian.us">bruce@monjian.us
</A>)
20 <P>Перевёл на русский: Виктор Вислобоков (
<A href=
21 "mailto:admin@postgresql.ru.net">admin@postgresql.ru.net
</A>)
<BR>
24 <P>Самую свежую английскую версию документа можно найти на
25 <A href=
"http://www.postgresql.org/files/documentation/faqs/FAQ.html">http://www.postgresql.org/files/documentation/faqs/FAQ.html
</A>.
</P>
27 <P>Самую свежую русскую версию документа можно найти на
28 <A href=
"http://postgresql.ru.net/docs/FAQ_russian.html">http://postgresql.ru.net/docs/FAQ_russian.html
</A>.
</P>
30 <P>Ответы на вопросы специфичные для конкретных платформ можно найти на
31 <A href=
"http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/
</A>.
</P>
34 <H2 align=
"center">Общие вопросы
</H2>
35 <A href=
"#item1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название? Что такое Postgres?
<BR>
36 <A href=
"#item1.2">1.2</A>) Кто управляет PostgreSQL?
<BR>
37 <A href=
"#item1.3">1.3</A>) Каковы авторские права на PostgreSQL?
<BR>
38 <A href=
"#item1.4">1.4</A>) На каких платформах работает PostgreSQL?
<BR>
39 <A href=
"#item1.5">1.5</A>) Где можно взять PostgreSQL?
<BR>
40 <A href=
"#item1.6">1.6</A>) Какая версия наиболее свежая?
<BR>
41 <A href=
"#item1.7">1.7</A>) Где получить поддержку?
<BR>
42 <A href=
"#item1.8">1.8</A>) Как мне сообщить об ошибке?
<BR>
43 <A href=
"#item1.9">1.9</A>) Как найти информацию об известных ошибках или отсутствующих
45 <A href=
"#item1.10">1.10</A>) Какая документация имеется в наличии?
<BR>
46 <A href=
"#item1.11">1.11</A>) Как научиться
<SMALL>SQL
</SMALL>?
<BR>
47 <A href=
"#item1.12">1.12</A>) Как мне отправить исправление или присоединится к команде разработчиков?
<BR>
48 <A href=
"#item1.13">1.13</A>) Как сравнить PostgreSQL с другими
49 <SMALL>СУБД
</SMALL>? Может ли PostgreSQL быть встроенной?
<BR>
50 <A href=
"#item1.14">1.14</A>) Будет ли PostgreSQL работать с последними изменениями, в разных страных,
51 касающимися дневного времени?
<BR>
52 <A href=
"#item1.15">1.15</A>) Как мне отписаться от списков рассылки PostgreSQL?
53 Как избежать получения дублирующихся сообщений?
<BR>
55 <H2 align=
"center">Вопросы пользователей по клиентской части
</H2>
56 <A href=
"#item2.1">2.1</A>) Какие интерфейсы есть для PostgreSQL?
<BR>
57 <A href=
"#item2.2">2.2</A>) Какие инструменты существуют для использования
58 PostgreSQL через Web?
<BR>
59 <A href=
"#item2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс
63 <H2 align=
"center">Вопросы администрирования
</H2>
64 <A href=
"#item3.1">3.1</A>) Как мне установить PostgreSQL в место отличное
65 от
<I>/usr/local/pgsql
</I>?
<BR>
66 <A href=
"#item3.2">3.2</A>) Как мне управлять соединениями от других
68 <A href=
"#item3.3">3.3</A>) Какие настройки мне нужно сделать для улучшения
69 производительности?
<BR>
70 <A href=
"#item3.4">3.4</A>) Какие возможности для отладки есть в наличии?
<BR>
71 <A href=
"#item3.5">3.5</A>) Почему я получаю сообщение
<I>"Sorry, too many
72 clients"</I> когда пытаюсь подключиться к базе?
<BR>
73 <A href=
"#item3.6">3.6</A>) Как выполнить обновление PostgreSQL?
<BR>
74 <A href=
"#item3.7">3.7</A>) Какое компьютерное
"железо" я должен
78 <H2 align=
"center">Вопросы эксплуатации
</H2>
79 <A href=
"#item4.1">4.1</A>) Как выполнить
<SMALL>SELECT
</SMALL> только
80 для нескольких первых строчек запроса? Для произвольной строки?
<BR>
81 <A href=
"#item4.2">4.2</A>) Как мне найти какие таблицы, индексы,
82 базы данных и пользователи существуют? Как мне увидеть запросы,
83 которые использует
<I>psql
</I> для получения этой информации?
<BR>
84 <A href=
"#item4.3">4.3</A>) Как изменить тип данных колонки?
<BR>
85 <A href=
"#item4.4">4.4</A>) Каковы максимальные размеры для строк в таблице,
86 таблиц и базы данных?
<BR>
87 <A href=
"#item4.5">4.5</A>) Как много дискового пространства в базе данных
88 нужно для сохранения данных из обычного текстового файла?
<BR>
89 <A href=
"#item4.6">4.6</A>) Почему мои запросы работают медлено? Почему
90 они не используют мои индексы?
<BR>
91 <A href=
"#item4.7">4.7</A>) Как посмотреть на то, как оптимизатор выполняет
93 <A href=
"#item4.8">4.8</A>) Как мне выполнить поиск регулярного выражения
94 и поиск независимый от регистра букв поиск регулярного выражения?
95 Как мне использовать индекс для поиска независимого от регистра букв?
<BR>
96 <A href=
"#item4.9">4.9</A>) Как мне определить, что значение поля в каком-либо
97 запросе равно
<SMALL>NULL
</SMALL>? Как мне соединить возможные
98 <SMALL>NULL
</SMALL>? Могу я сортировать поля
<SMALL>NULL
</SMALL> или нет?
<BR>
99 <A href=
"#item4.10">4.10</A>) Каковы отличия между разными символьными
101 <A href=
"#item4.11.1">4.11.1</A>) Как мне создать поле serial/с-авто-увеличением?
<BR>
102 <A href=
"#item4.11.2">4.11.2</A>) Как мне получить значение при вставке
103 <SMALL>SERIAL
</SMALL>?
<BR>
104 <A href=
"#item4.11.3">4.11.3</A>) Не может ли получиться так, что
105 использование
<I>currval()
</I> и
<I>nextval()
</I> приведет к
106 зациклированию с другими пользователями?
<BR>
107 <A href=
"#item4.11.4">4.11.4</A>) Почему числа из моей последовательности
108 не используются снова при отмене транзакции? Почему создаются разрывы
109 при нумерации в колонке, где я использую последовательность/SERIAL?
<BR>
110 <A href=
"#item4.12">4.12</A>) Что такое
<SMALL>OID
</SMALL>? Что такое
111 <SMALL>CTID
</SMALL>?
<BR>
112 <A href=
"#item4.13">4.13</A>) Почему я получаю ошибку
<I>"ERROR: Memory
113 exhausted in AllocSetAlloc()"</I>?
<BR>
114 <A href=
"#item4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL
116 <A href=
"#item4.15">4.15</A>) Как мне создать колонку которая по умолчанию
117 будет содержать текущее время?
<BR>
118 <A href=
"#item4.16">4.16</A>) Как выполнить внешнее связывание?
<BR>
119 <A href=
"#item4.17">4.17</A>) Как выполнять запросы, использующие несколько
121 <A href=
"#item4.18">4.18</A>) Как мне вернуть из функции несколько строк таблицы?
<BR>
122 <A href=
"#item4.19">4.19</A>) Почему я получаю ошибку
"relation with OID ####
123 не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?
<BR>
124 <A href=
"#item4.20">4.20</A>) Какие есть решения для репликации?
<BR>
125 <A href=
"#item4.21">4.21</A>) Почему имена таблицы и колонок не
126 распознаются в в моём запросе? Почему не сохраняются заглавные буквы?
<BR>
130 <H2 align=
"center">Общие вопросы
</H2>
132 <H3><A name=
"item1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название? Что такое Postgres?
</H3>
134 <P>PostgreSQL произносится
<I>Post-Gres-Q-L (Пост-Грес-Кью-Эл)
</I>.
135 (Для особо любопытствующих как произносить
"PostgreSQL", существует
136 <A href=
"http://www.postgresql.org/files/postgresql.mp3">аудио-файл
</A>).
139 <P>PostgreSQL - это объектно-реляционная система управления базами
140 данных (СУБД), которая имеет традиционные возможности коммерческих
141 <small>СУБД
</small> с расширениями, которые есть в
<small>СУБД
</small>
142 нового поколения. PostgreSQL - это свободное и полностью открытое
143 программное обеспечение.
</P>
145 <P>Разработку PostgreSQL выполняет команда разработчиков, разбросанная
146 по всему миру и связанная через Интернет. Разработка является
147 общественным проектом и не управляется какой-либо компанией.
148 Подробности смотрите в FAQ для разработчиков,
149 <A href=
"http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
150 http://www.postgresql.org/docs/faqs.FAQ_DEV.html
</A>
153 <P>Postgres
— это широко используемое сокращение для PostgreSQL.
154 Первоначальным именем проекта в Беркли было Postgres и этот ник теперь
155 наиболее популярен в разговорах о PostgreSQL по сравнению с другими.
156 Если вам трудно полностью проговаривать 'PostgreSQL', можно просто
157 говорить 'Postgres'.
</P>
159 <H3><A name=
"item1.2">1.2</A>) Кто управляет PostgreSQL?
</H3>
161 <P>Если вы ищите какого-то особенного человека, центральный
162 комитет или управляющую компанию, то напрасно --- их нет.
163 У нас есть ядро комитета и разработчиков, работающих с CVS,
164 но эти группы служат больше для административных целей, чем
165 для управления. Проект напрямую функционирует с помощью
166 сообщества разработчиков и пользователей, к которому может
167 присоединится каждый. Всё что нужно -- это подписаться на
168 списки рассылки и участвовать в дискуссиях. (Подробности о
169 том как включиться в разработку PostgreSQL смотрите в
170 <a href=
"http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
171 FAQ для разработчиков
</A>.)
</P>
173 <H3><A name=
"item1.3">1.3</A>) Каковы авторские права на PostgreSQL?
</H3>
175 <P>PostgreSQL распространяется по классической лицензии BSD. Эта
176 лицензия не содержит ограничений на то, как будет использоваться
177 исходный код. Нам нравится эта лицензия и у нас нет намерений её
178 менять. Вот эта лицензия BSD, которую мы используем:
</P>
180 <P>Система Управления Базами Данных PostgreSQL
</P>
182 <P>Portions copyright (c)
1996-
2008, PostgreSQL Global Development
183 Group Portions Copyright (c)
1994-
1996 Regents of the University of
186 <P>Предоставляются права на использование, копирование, изменение
187 и распространение данного программного обеспечения и его документации
188 для любых целей, бесплатно и без подписания какого-либо соглашения,
189 при условии что для каждой копии будут предоставлены данное выше
190 замечание об авторских правах, текущий параграф и два следующих
193 <P>КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ
194 ЗА ЛЮБЫЕ ПОВРЕЖДЕНИЯ, ВКЛЮЧАЯ ПОТЕРЮ ДОХОДА, НАНЕСЕННЫЕ ПРЯМЫМ
195 ИЛИ НЕПРЯМЫМ, СПЕЦИАЛЬНЫМ ИЛИ СЛУЧАЙНЫМ ИСПОЛЬЗОВАНИЕМ ДАННОГО
196 ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ЕГО ДОКУМЕНТАЦИИ, ДАЖЕ ЕСЛИ
197 КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ БЫЛ ИЗВЕЩЕН О ВОЗМОЖНОСТИ ТАКИХ
200 <P>КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ СПЕЦИАЛЬНО ОТКАЗЫВАЗЫВАЕТСЯ ПРЕДОСТАВЛЯТЬ
201 ЛЮБЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ТОЛЬКО ЭТИМИ ГАРАНТИЯМИ:
202 НЕЯВНЫЕ ГАРАНТИИ ПРИГОДНОСТИ ТОВАРА ИЛИ ПРИГОДНОСТИ ДЛЯ ОТДЕЛЬНОЙ ЦЕЛИ.
203 ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ НА ОСНОВЕ ПРИЦИПА
204 "КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ
205 СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.
</P>
207 <H3><A name=
"item1.4">1.4</A>) На каких платформах работает PostgreSQL?
</H3>
209 <P>Обычно, PostgreSQL может работать на любой современной платформе
210 совместимой с Unix. В инструкции по установке, вы найдете список
211 тех платформ, на которых были проведены тестовые запуски PostgreSQL
212 к моменту выхода данной версии.
</P>
214 <P>PostgreSQL также работает на операционных системах Microsoft
215 Windows, основанных на NT, таких как Win2000 SP4, WinXP и Win2003.
216 Пакет инсталлятора доступен по адресу
217 <A href=
"http://www.postgresql.org/download/windows">
218 http://www.postgresql.org/download/windows
</A>. Версии Windows,
219 основанные на MS-DOS (Win95, Win98, WinMe) могут запускать
220 PostgreSQL с помощью Cygwin.
</P>
222 <P>Также существует версия спортированная под Novell Netware
6 на
223 <A href=
"http://developer.novell.com/wiki/index.php/Postgresql">http://developer.novell.com/wiki/index.php/Postgresql
</A>,
224 и версия для OS/
2 (eComStation) на
225 <A href=
"http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">
226 http://hobbes.nmsu.edu/cgi-bin/h-search?sh=
1&button=Search
&key=postgreSQL
&stype=all
&sort=type
&dir=%
2F
</A>.
</P>
228 <H3><A name=
"item1.5">1.5</A>) Где можно взять PostgreSQL?
</H3>
230 <P>Через браузер, используя
<a href=
"http://www.postgresql.org/ftp/">
231 http://www.postgresql.org/ftp/
</a> и через ftp, используя
232 <A href=
"ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.postgresql.org/pub/
</A>.
</P>
235 <H3><A name=
"item1.6">1.6</A>) Какая версия наиболее свежая?
</H3>
237 <P>Последний выпуск PostgreSQL - это версия
8.3.3</P>
239 <P>Мы планируем выпускать новые старшие версии каждый год,
240 а младшие версии каждые несколько месяцев.
</P>
243 <H3><A name=
"item1.7">1.7</A>) Где получить поддержку?
</H3>
245 <P>Сообщество PostgreSQL предоставляет помощь множеству пользователей
246 через E-mail. Основной web-сайт для подписки на списки рассылки по
247 E-mail это:
<A href=
"http://www.postgresql.org/community/lists/">
248 http://www.postgresql.org/community/lists/
</A>. Хорошим местом для
249 того, чтобы начать задавать вопросы являются списки
<i>general
</i>
250 (общие вопросы) или
<i>bugs
</i> (ошибки).
</P>
252 <P>Главным IRC каналом является
<I>#postgreql
</I>,
253 расположенный на сервере Freenode (
<I>irc.freenode.net
</I>). Чтобы
254 подключиться, вы можете использовать в Unix вызов программы
255 <code>irc -c '#postgresql'
"$USER" irc.freenode.net
</code> или
256 любой другой IRC клиент. На этом же сервере существуют каналы на
257 испанском (
<I>#postgresql-es
</I>), французском (
<I>#postgresqlfr
</I>)
258 и бразильском (
<I>#postgresql-br
</I>) языках. Также существует канал
259 по PostgreSQL на сервере EFNet.
</P>
261 <P>Список коммерческой поддержки компаний доступен на
262 <A href=
"http://www.postgresql.org/support/professional_support">
263 http://www.postgresql.org/support/professional_support
</A>.
</P>
266 <H3><A name=
"item1.8">1.8</A>) Как мне сообщить об ошибке?
</H3>
268 <P>Посетите страничку со специальной формой отчёта об ошибке в
269 PostgreSQL по адресу:
270 <A HREF=
"http://www.postgresql.org/support/submitbug">
271 http://www.postgresql.org/support/submitbug
</A>.
272 Также проверьте наличие более свежей версии PostgreSQL на нашем
273 FTP сайте
<A href=
"ftp://ftp.postgresql.org/pub/">
274 ftp://ftp.postgresql.org/pub/
</A>.
</P>
276 <P>На ошибки, уведомление о которых были сделаны через специальную
277 форму или отправленные в какой-либо список рассылки PostgreSQL,
278 обычно генерируется один из следующих ответов:
</P>
280 <LI>Это не ошибка и почему
</LI>
281 <LI>Это известная ошибка и она уже есть в списке
282 <A HREF=
"http://www.postgresql.org/docs/faqs.TODO.html">TODO
</A></LI>
283 <LI>Данная ошибка была исправлена в текущем выпуске
</LI>
284 <LI>Данная ошибка была исправлена, но исправление пока не попало в
285 официальный выпуск
</LI>
286 <LI>Запрашивается более детальная информация:
288 <LI>Операционная система
</LI>
289 <LI>Версия PostgreSQL
</LI>
290 <LI>Тест, воспроизводящий ошибку
</LI>
291 <LI>Отладочная информация
</LI>
292 <LI>Вывод backtrace отладчика
</LI>
295 <LI>Это новая ошибка. Может произойти следующее:
297 <LI>Будет создано исправление, которое будет включено в следующий
299 <LI>Ошибка не может быть исправлена немедленно и будет добавлена в список
300 <A HREF=
"http://www.postgresql.org/docs/faqs.TODO.html">TODO
</A></LI>
305 <H3><A name=
"1.9">1.9</A>) Как найти информацию об известных ошибках
306 или отсутствующих возможностях?
</H3>
308 <P>PostgreSQL поддерживает расширенный подкласс
<SMALL>SQL:
2003</SMALL>.
309 Смотрите наш список
<A href=
"http://www.postgresql.org/docs/faqs.TODO.html">TODO
</A>
310 на предмет известных ошибок, отсутствующих возможностей и будущих
313 <P>На запрос какой-либо возможности обычно приходят следующие ответы:
</P>
315 <LI>Данная возможность уже есть в списке
316 <A href=
"http://www.postgresql.org/docs/faqs.TODO.html">TODO
</A></LI>
317 <LI>Данная возможность нежелательна потому что:
319 <LI>Она дублирует существующую функциональность, которая следует
321 <LI>Данная возможность сильно усложнила бы код, но дала бы маленькую
323 <LI>Данная возможность небезопасна или ненадёжна
</LI>
326 <LI>Данная новая возможность добавлена в список
327 <A href=
"http://www.postgresql.org/docs/faqs.TODO.html">TODO
</A>
331 <P>PostgreSQL не использует какую-либо систему отслеживания ошибок,
332 потому что мы обнаружили, что использование прямого обращения по
333 электронной почте и обновляемого списка
334 <A href=
"http://www.postgresql.org/docs/faqs.TODO.html">TODO
</A>
335 является более эффективным. На практике, ошибки в программном
336 обеспечении сохраняются очень недолго, а ошибки, которые важны
337 большому количеству пользователей исправляются моментально. Есть
338 только одно место, где можно найти все изменения, улучшения и
339 исправления, сделанные в выпуске PostgreSQL - это журналы сообщений
340 системы контроля версий
341 <A HREF=
"http://www.postgresql.org/developer/sourcecode/">CVS
</A>.
342 Даже замечания к выпускам не содержат все изменения, сделанные
343 в программном обеспечении.
</P>
346 <H3><A name=
"item1.10">1.10</A>) Какая документация имеется в наличии?
</H3>
348 <P>PostgreSQL содержит много документации, включая большое руководство,
349 страницы электронного руководства man и некоторые маленькие тестовые
350 примеры. Смотрите в каталог
<I>/doc
</I>. Вы также можете просматривать
351 документацию в Интернет по адресу
<A href=
"http://www.postgresql.org/docs">
352 http://www.postgresql.org/docs
</A>.
</P>
354 <P>Существует две книги по PostgreSQL доступные по адресам
<A href=
355 "http://www.PostgreSQL.org/docs/books/awbook.html">http://www.PostgreSQL.org/docs/books/awbook.html
</A>
356 и
<a href=
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/
</a>.
357 Есть несколько книг по PostgreSQL, которые можно купить.
358 Одну из наиболее популярных написал Корри Дуглас (Korry Douglas).
359 Список обзоров по этим книгам доступен по адресу
360 <a href=
"http://www.postgresql.org/docs/books/">http://www.postgresql.org/docs/books/
</a>.
361 Кроме того, по адресу
<a href=
"http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides%2C_and_Documentation">http://wiki.postgresql.org/wiki/Community_Generated_Articles%
2C_Guides%
2C_and_Documentation
</a>
362 вы можете найти коллекцию технических статей, посвещенных PostgreSQL.
</P>
364 <P>Клиент командной строки
<I>psql
</I> имеет несколько команд \d для
365 отображения информации по типам, операторам, функциям, агрегатам и т.д. -
366 используйте \? для получения списка доступных команд.
</P>
368 <P>Наш сайт содержит еще больше информации.
</P>
371 <H3><A name=
"item1.11">1.11</A>) Как мне научиться
<SMALL>SQL
</SMALL>?
</H3>
373 <P>Во-первых, возьмите одну из книг по PostgreSQL, о которых говорилось
374 выше. Многим из наших пользователей также нравится книга
375 <I>The Practical SQL Handbook
</I>,
376 Bowman, Judith S., et al., Addison-Wesley. Другим нравится
<I>The
377 Complete Reference SQL
</I>, Groff et al., McGraw-Hill.
</P>
379 <P>Существует также множество прекрасных учебников доступных в online:
381 <LI><A href=
"http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,
</A>
383 <LI><A href=
"http://sqlcourse.com/">http://sqlcourse.com.
</A>
385 <LI><A href=
"http://www.w3schools.com/sql/default.asp">http://www.w3school.com/sql/default.asp
</A>
387 <LI><A href=
"http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html
</A>
392 <H3><A name=
"item1.12">1.12</A>) Как мне прислать исправление или присоединится к команде разработчиков?
</H3>
394 <P>Смотрите
<a href=
"http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
395 FAQ для разработчиков
</A>.
</P>
398 <H3><A name=
"item1.13">1.13</A>) Как сравнить PostgreSQL с другими
399 <SMALL>СУБД
</SMALL>? Может ли PostgreSQL быть встроенным?
</H3>
402 Существует несколько методов сравнения программного обеспечения:
403 возможности, производительность, надежность, поддержка и цена.
</P>
406 <DT><B>Возможности
</B></DT>
408 <DD>PostgreSQL имеет большинство возможностей представленных
409 в больших коммерческих
<SMALL>СУБД
</SMALL>, такие как: транзакции,
410 подзапросы, триггеры, представления, ссылочной
411 целостности вторичного ключа и разные блокировки. У нас есть некоторые возможности,
412 которых нет у них: типы, определяемые пользователем, механизм
413 наследования, правила и конкуретное многоверсионное управление
414 для работы с содержимым блокировок.
<BR>
418 <DT><B>Производительность
</B></DT>
420 <DD>Производительность PostgreSQL сходна с другими коммерческими
421 СУБД и с СУБД с открытым исходным кодом. В каких-то вещах мы быстрее,
422 в каких-то медленнее. Наша производительности обычно +/-
10% по
423 сравнению с другими СУБД.
427 <DT><B>Надежность
</B></DT>
429 <DD>Мы понимали, что наша
<SMALL>СУБД
</SMALL> должна быть надежной
430 или она ничего не будет стоить. Мы стараемся выпускать хорошо проверенный,
431 стабильный код, который содержит минимум ошибок. Каждый выпуск
432 проходит стадию бета-тестирования по крайней мере в течении одного
433 месяца и наша история выпусков показывает что мы можем предоставлять
434 стабильные, монолитные выпуски, которые готовы к продуктивному
435 использованию. Мы верим, что мы производим проверку не хуже,
436 чем у других СУБД.
<BR>
440 <DT><B>Поддержка
</B></DT>
442 <DD>Наш список рассылки предоставляет возможможность общения с
443 большой группой разработчиков и пользователей, которые могут помочь решить
444 любые возникшие проблемы. В то же время, мы не гарантируем какие-либо
445 исправления, но и разработчики коммерческих
<SMALL>СУБД
</SMALL> не всегда
446 делают исправления. Прямой доступ к разработчикам, сообществу
447 пользователей, руководствам и исходным текстам часто делают поддержку
448 PostgreSQL превосходящей другие
<SMALL>СУБД
</SMALL>. Существует
449 коммерческая поддержка по результам возникших инцидентов, которая
450 доступна для тех кому она нужна. (Смотрите
<A href=
"#item1.7">Секцию
1.7</A>.)
<BR>
456 <DD>Наш продукт бесплатен как для коммерческого так, и не для
457 коммерческого использования. Вы можете добавлять свой код в наш
458 продукт без ограничений, за исключением тех, что описываются в
459 нашей лицензии стиля BSD, которая приведена выше.
<BR>
464 <P>PostgreSQL разрабатывается по архитектуре клиент/сервер, которая
465 требует отдельных процессов для каждого клиента и сервера, а также
466 несколько вспомогательных процессов. Многие встраиваемые архитектуры
467 могут соответствовать таким требованиям. Однако, если ваша встраиваемая
468 архитектура требует сервер баз данных для запуска внутри прикладного
469 процесса, вы не можете использовать Postgres и вам лучше бы выбрать
470 для базы данных какое-либо другое облегченное решение.
</P>
472 <H3><A name=
"item1.14">1.14</A>) Будет ли PostgreSQL работать с
473 последними изменениями, в разных страных, касающимися дневного времени?
</H3>
475 <P>Изменения в сохранении дневного времени в США включены в PostgreSQL версии
476 8.0.[
4+] и во все следующие выпуски, например в
8.1. Изменения по Канаде
477 и Западной Австралии включены в
8.0.[
10+],
8.1.[
6+] и все следующие
478 выпуски. Выпуски PostgreSQL до
8.0 используют информацию о сохранении
479 дневного времени из базы данных временных зон в операционной системе.
</p>
482 <H3 id=
"item1.15">1.15) Как мне отписаться от списков рассылки PostgreSQL?
483 Как избежать получения дублирующих сообщений?
</H3>
486 href=
"http://mail.postgresql.org/mj/mj_wwwusr/domain=postgresql.org?user=&passw=&func=login">Majordomo
</a>
487 на сайте PostgreSQL позволяет подписаться или отписаться от любого из списков
488 рассылки PostgreSQL. (Вам может понадобится ваш пароль для Majordomo, который
489 отправляется на ваш E-mail, чтобы войти в управление вашими подписками.)
</P>
491 <P>Все списки рассылки PostgreSQL настариваются так, чтобы групповой ответ уходил
492 на адрес списка
<I>и
</I> на адрес автора сообщения. Так сделано, чтобы пользователи
493 получали ответы на E-mail как можно быстрее. Если вы не хотите получать дублирующие
494 E-mail сообщения из списка, в случаях когда вы уже получили эти сообщения напрямую,
495 установите флажок
<I>eliminatecc
</I> на странице
<I>Change Settings
</I> в
496 Majordomo. Вы также можете избежать получения копий своих сообщений для самого себя,
497 если снимите флажок
<I>selfcopy
</I>.
</P>
501 <H2 align=
"center">Вопросы пользователей по клиентской части
</H2>
503 <H3><A name=
"item2.1">2.1</A>) Какие интерфейсы есть для PostgreSQL?
</H3>
505 <P>Установка PostgreSQL включает только
<small>C
</small> и встроенный
506 (embedded)
<small>C
</small> интерфейсы. Все другие интерфейсы
507 являются независимыми проектами и загружаются отдельно; самостоятельность
508 проектов позволяет им организовать собственное расписание выпусков
509 новых версий и иметь собственную команду разработчиков.
</P>
511 <P>Некоторые языки программирования, такие как
<small>PHP
</small>
512 включают в себя интерфейс к PostgreSQL. Интерфейсы для таких языков
513 как Perl,
<small>TCL
</small>, Python и многих других, доступны на
514 <a href=
"http://pgfoundry.org">http://pgfoundry.org
</A>.
</P>
516 <H3><A name=
"item2.2">2.2</A>) Какие инструменты существуют для использования
517 PostgreSQL через Web?
</H3>
519 <P>Прекрасное введение во взаимодействие баз данных и Web можно найти на:
520 <A href=
"http://www.webreview.com">http://www.webreview.com
</A></P>
522 <P>Для интеграции с Web, PHP
<A href=
"http://www.php.net">
523 http://www.php.net
</A> является неплохим интерфейсом.
</P>
525 <P>В сложных случаях, многие пользуются Perl и DBD::Pg с CGI.pm
528 <H3><A name=
"item2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс
531 <P>Для PostgreSQL существует большое количество инструментов с
532 графическим интерфейсом как коммерческих, так и открытых. Подробности
533 можно найти в
<A href=
"http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools">
534 Документации сообщества для GUI иструментов PostgreSQL
</A></P>
538 <H2 align=
"center">Вопросы администрирования
</H2>
540 <H3><A name=
"item3.1">3.1</A>) Как мне установить PostgreSQL в место отличное
541 от
<I>/usr/local/pgsql
</I>?
</H3>
543 <P>Задайте опцию
<I>--prefix
</I> когда запускаете
<I>configure
</I>.
</P>
545 <H3><A name=
"item3.2">3.2</A>) Как мне управлять соединениями от других
548 <P>По умолчанию, PostgreSQL разрешает только соединения на локальной
549 машине через сокеты домена Unix или TCP/IP соединения. Для того, чтобы
550 другие машины смогли подключиться к базе вы должны изменить
551 <I>listen_addresses
</I> в
<I>postgresql.conf
</I>, разрешить
552 host-авторизация в файле
<I>$PGDATA/pg_hba.conf
</I> и перестартовать
555 <H3><A name=
"item3.3">3.3</A>) Какие настройки мне нужно сделать для улучшения
556 производительности?
</H3>
558 <P>Существует три главных области, которые потенциально могут
559 увеличить производительность:
</P>
562 <DT><B>Изменение запроса
</B></DT>
563 <DD>Это означает модификацию запросов для получения лучшей
566 <LI>Создание индексов, включая индексы выражений и частичные индексы
</LI>
567 <LI>Использование COPY вместо множества
<small>INSERT
</small></LI>
568 <LI>Группировка нескольких операторов в единую транзакцию для
569 уменьшения нагрузки при выполнении завершения транзакции
</LI>
570 <LI>Использование
<small>CLUSTER
</small>, когда из индекса берётся
572 <LI>Использование
<small>LIMIT
</small> для того, чтобы возвращалась
573 только часть вывода от запроса
</LI>
574 <LI>Использование Подготовленных (Prepared) запросов
</LI>
575 <LI>Использование
<small>ANALYZE
</small> для обслуживания статистики
577 <LI>Регулярное использование
<small>VACUUM
</small> или
<I>pg_autovacuum
</I></LI>
578 <LI>Удаление индексов во время больших изменений данных
</LI>
583 <DT><B>Настройка сервера
</B></DT>
585 <DD>Некоторые установки в
<I>postgresql.conf
</I> влияют на
586 производительность. Подробный полный список установок см. в
587 <A href=
"http://www.postgresql.org/docs/current/static/runtime-config.html">
588 Administration Guide/Server Run-time Environment/Run-time Configuration
</A>,
589 а комментарии см. в
<A href=
"http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">
590 http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html
</A>
591 и
<A href=
"http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">
592 http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html
</A>.
596 <DT><B>Выбор
"железа" - аппаратного обеспечения
</B></DT>
598 <DD>Влияние
"железа" на производительность подробно описано в
599 <A href=
"http://www.powerpostgresql.com/PerfList/">
600 http://www.powerpostgresql.com/PerfList/
</A> и
601 <A href=
"http://momjian.us/main/writings/pgsql/hw_performance/index.html">
602 http://momjian.us/main/writings/pgsql/hw_performance/index.html
</A>.
608 <H3><A name=
"item3.4">3.4</A>) Какие возможности для отладки есть в
611 <P>Есть множество установок в настройках сервера, начинающихся
612 на
<code>log_*
</code> на
<a
613 href=
"http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html">http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html
</a>,
614 позволяющих протоколировать запросы и статистику работы процесса,
615 которая очень полезна для отладки и измерения производительности.
</P>
618 <H3><A name=
"item3.5">3.5</A>) Почему я получаю сообщение
<I>"Sorry, too
619 many clients"</I> когда пытаюсь подключиться к базе?
</H3>
621 <P>Вы достигли установленного по умолчанию ограничения в
100 сессий
622 подключения к базе данных. Вам необходимо увеличить лимит на количество
623 конкурентных backend процессов для вашего сервера БД,
624 изменив значение
<I>max_connections
</I> в файле
<I>postgresql.conf
</I>
625 и перестартовать сервер БД.
</P>
628 <H3><A name=
"item3.6">3.6</A>) Как выполнить обновление PostgreSQL?
</H3>
630 <P>См. информацию об обновлении в
<a
631 href=
"http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning
</a>
632 и специальные инструкции в
<a href=
"http://www.postgresql.org/docs/current/static/install-upgrading.html">
633 http://www.postgresql.org/docs/current/static/install-upgrading.html
</a>.
</P>
636 <H3><A name=
"item3.7">3.7</A>) Какое компьютерное
"железо" я должен
639 <P>Поскольку
"железо" персональных компьютеров является наиболее
640 совместимым, люди склонны верить, что такое
"железо" имеет одинаковое
641 качество. Это не так. Память ECC, SCSI и качественные материнские платы
642 являются более надёжными и имеют более лучшую производительность, чем
643 менее дорогое
"железо". PostgreSQL будет работать на любом
"железе",
644 но если для вас важны надёжность и производительность, то с вашей стороны
645 будет мудро поставить соответствующее
"железо". Обсудить разное
"железо"
646 можно в наших списках рассылки.
</P>
650 <H2 align=
"center">Вопросы эксплуатации
</H2>
652 <H3><A name=
"item4.1">4.1</A>) Как выполнить
<SMALL>SELECT
</SMALL> только
653 для нескольких первых строчек запроса? Произвольной строки?
</H3>
655 <P>Для получения только нескольких строк, если вы знаете их количество
656 на момент выполнения
<SMALL>SELECT
</SMALL> используйте
<SMALL>LIMIT
</SMALL>.
</P>
657 Если есть какой-либо индекс, который совпадает с
<SMALL>ORDER BY
</SMALL>,
658 то возможно, что весь запрос выполнен и не будет. Если вы не знаете
659 количества необходимых строк на момент выполнения
<SMALL>SELECT
</SMALL>,
660 используйте курсор и
<SMALL>FETCH
</SMALL>.
</P>
662 <P>To
<small>SELECT
</small> a random row, use:
</P>
670 <H3><A name=
"item4.2">4.2</A>) Как мне найти какие таблицы, индексы,
671 базы данных и пользователи существуют? Как мне увидеть запросы,
672 которые использует
<I>psql
</I> для получения этой информации?
</H3>
674 <P>Чтобы просматривать таблицы в
<I>psql
</I>, используйте команду \dt.
675 Полный список команд в
<I>psql
</I> вы можете получить, используя \?.
676 Кроме того, вы можете посмотреть исходный код
<I>psql
</I> в файле
677 <I>pgsql/src/bin/psql/describe.c
</I>. Он содержит команды
678 <SMALL>SQL
</SMALL> которые генерируются при вводе в
<I>psql
</I> команд,
679 начинающихся с обратной косой черты. Вы также можете запустить
680 <I>psql
</I> с опцией
<I>-E
</I> так, чтобы эта программа выдавала
681 запросы, которые она использует для выполнения заданных вами
682 команд. PostgreSQL также предоставляет
<SMALL>SQL
</SMALL>
683 совместимый с INFORMATION SCHEMA интерфейс, с помощью которого, вы
684 можете сформировать запрос на получение информации о базе данных.
</P>
686 <P>Также существуют системные таблицы, начинающиеся с
<I>pg_
</I>.
</P>
688 <P>Используйте
<I>psql -l
</I> для получения списка всех баз данных.
</P>
690 <P>Также посмотрите файл
<I>pgsql/src/tutorial/syscat.source
</I>.
691 Он показывает многие из операторов
<SMALL>SELECT
</SMALL> необходимых
692 для получения информации из системных таблиц базы данных.
</P>
695 <H3><A name=
"item4.3">4.3</A>) Как изменить тип данных колонки?
</H3>
697 <P>В
8.0 и более поздних версиях, изменение типа колонки выполняется
698 очень легко через
<SMALL>ALTER TABLE ALTER COLUMN TYPE
</SMALL>.
</P>
700 <P>В более ранних версиях сделайте так:
</P>
703 ALTER TABLE tab ADD COLUMN new_col
<i>new_data_type
</i>;
704 UPDATE tab SET new_col = CAST(old_col AS
<i>new_data_type
</i>);
705 ALTER TABLE tab DROP COLUMN old_col;
709 <H3><A name=
"item4.4">4.4</A>) Каковы максимальные размеры для строк в таблице,
710 таблиц и базы данных?
</H3>
712 <P>Существуют следующие ограничения:
</P>
716 <TD>Максимальный размер базы?
</TD>
717 <TD>неограничен (существуют базы на
32 TB)
</TD>
720 <TD>Максимальный размер таблицы?
</TD>
724 <TD>Максимальный размер строки?
</TD>
728 <TD>Максимальный размер поля?
</TD>
732 <TD>Максимальное количество строк в таблице?
</TD>
733 <TD>неограничено
</TD>
736 <TD>Максимальное количество колонок в таблице?
</TD>
737 <TD>250-
1600 в зависимости от типа
</TD>
740 <TD>Максимальное количество индексов в таблице?
</TD>
741 <TD>неограничено
</TD>
746 <P>Разумеется, понятие
"неограничено" на самом деле ограничивается
747 доступным дисковым пространиством и размерами памяти/своппинга.
748 Когда значения перечисленные выше неоправдано большие, может
749 пострадать производительность.
</P>
751 <P>Максимальный размер таблицы в
32 TB не требует чтобы операционная
752 система поддерживала файлы больших размеров. Большие таблицы хранятся
753 как множество файлов размером в
1 GB, так что ограничения, которые
754 накладывает файловая система не важны.
</P>
756 <P>Максимальный размер таблицы и максимальное количество колонок
757 могут быть увеличены в четыре раза, если размер блока по умолчанию будет
760 <P>Существует ограничение, по которому индексы не могут создаваться для
761 колонок длиннее чем
2,
000 символов. К счастью такие индексы вряд ли
762 действительно кому-то нужны. Уникальность гарантируется наилучим образом,
763 с помощью функционального индекса из хэша MD5 длинной колонки, а
764 полнотекстовое индексирование позволяет искать слова внутри колонки.
</P>
766 <H3><A name=
"item4.5">4.5</A>) Как много дискового пространства в базе данных
767 нужно для сохранения данных из обычного текстового файла?
</H3>
769 <P>СУБД PostgreSQL может потребоваться дискового пространства до
5 раз
770 больше для сохранения данных из простого текстового файла.
</P>
772 <P>В качестве примера, рассмотрим файл в
100,
000 строк в каждой, из
773 которых целое число и текстовое описание. При этом длина текста,
774 в среднем, составляет
20 байт. Размер простого файла составит
2.8 MB.
775 Размер базы PostgreSQL, содержащей эти же данные составит приблизительно
776 5.2 MB из которых:
</P>
778 24 байт: на каждый заголовок строки в таблице (приблизительно)
779 +
24 байта: одно поле с целочисленным типом и одно текстовое поле
780 +
4 байта: указатель на странице для всей табличной строки
781 ----------------------------------------
782 56 байт на строку в таблице
784 Размер страницы данных в PostgreSQL составляет
8192 байт (
8 KB), так что:
786 8192 байт на страницу
787 --------------------- =
158 строк в таблице на страницу БД (округлённо)
788 52 байт на строку в таблице
791 ----------------------- =
633 страниц в БД (округлённо)
792 158 строк в таблице на страницу
794 633 страниц БД *
8192 байт на страницу =
5,
185,
536 байт (
5.2 MB)
797 <P>Индексы не требуют так много, но поскольку они создаются для
798 большого количества данных, они также могут быть велики.
</P>
800 <P>Значения
<small>NULL
</small> хранятся как битовые карты и поэтому они
801 занимают очень мало места.
804 <H3><A name=
"item4.6">4.6</A>) Почему мои запросы работают медлено? Почему
805 они не используют мои индексы?
</H3>
807 <P>Индексы не используются для каждого запроса. Они
808 используются только если таблица больше минимального размера и запрос
809 выбирает только маленький процент строк в таблице. Так устроено,
810 потому что доступ к диску с применением рандомизации при сканировании
811 индексов может быть медленнее, чем простое чтение таблицы или ее
812 последовательное сканирование.
</P>
814 <P>Чтобы определить необходимость использования индекса для какой-либо
815 таблицы, PostgreSQL должен иметь статистику по этой таблице. Эта
816 статистика собирается при использовании
<SMALL>VACUUM ANALYZE
</SMALL>
817 или просто
<SMALL>ANALYZE
</SMALL>. Используя статистику, оптимизатор
818 узнает о том как много строк в таблице и если он должен использовать
819 индексы, то он может принимать лучшие решения. Статистика также
820 влияет на определение оптимального порядка связывания и метода связывания.
821 При изменении содержимого таблицы должен периодически выполнятся
824 <P>Обычно индексы не используются для
<SMALL>ORDER BY
</SMALL> или для
825 выполнения связываний. Последовательный перебор следующий за явной
826 сортировкой обычно быстрее, чем поиск по индексам в большой таблице.
827 Однако,
<SMALL>ORDER BY
</SMALL> часто комбинируется с
<SMALL>LIMIT
</SMALL>
828 и в этом случае индекс будет использоваться, поскольку при выполнении
829 будет возвращаться небольшая часть таблицы.
</P>
831 <P>Если вам кажется, что оптимизатор некорректно выбирает последовательный
832 перебор, используйте
<CODE>SET enable_seqscan TO 'off'
</CODE> и
833 запустите запрос снова, чтобы увидеть, действительно ли сканирование
837 <P>Когда используются операции с шаблонами, например
<SMALL>LIKE
</SMALL>
838 или
<I>~
</I>, индексы могут быть использованы в следующих случаях:
</P>
840 <LI>Начало строки поиска должно совпадать с началом искомой строки, т.е.:
842 <LI><small>LIKE
</small> шаблоны не должны начинаться с
<i>%.
</i>.
</LI>
843 <LI><i>~
</i> шаблоны регулярных выражений должна начинаться на
<i>^
</i>.
</LI>
845 <LI>Строка поиска не должна начинаться с символа класса, т.е. [a-e].
</LI>
846 <LI>Поиск независимый от регистра, такой как
<small>ILIKE
</small> и
847 <i>~*
</i> не использует индексы. Вместо него, используйте индексы
848 выражений, которые описываются в секции
<A href=
"#item4.8">4.8</A>.
</LI>
849 <LI>Во время
<i>initdb
</i> должна использоваться локаль по умолчанию
850 <i>C
</i>, потому что не существует возможности узнать следующий наибольший
851 символ для не-C локали. Вы можете для таких случаев создать специальный
852 индекс
<CODE>text_pattern_ops
</CODE> который работает только для
853 <SMALL>LIKE
</SMALL> индексирования. Для поиска слов также можно
854 использовать полнотекстовый индекс.
</LI>
857 <H3><A name=
"item4.7">4.7</A>) Как посмотреть на то, как оптимизатор выполняет
860 <P>Смотрите страницу руководства посвященную
<SMALL>EXPLAIN
</SMALL>.
</P>
863 <H3><A name=
"item4.8">4.8</A>) Как мне выполнить поиск регулярного выражения
864 и поиск независимый от регистра букв поиск регулярного выражения?
865 Как мне использовать индекс для поиска независимого от регистра букв?
</H3>
867 <P>Оператор
<I>~
</I> производит поиск регулярного выражения, а оператор
868 <I>~*
</I> производит независимый от регистра букв поиск регулярного
869 выражения. Независимый от регистра вариант
<SMALL>LIKE
</SMALL> называется
870 <SMALL>ILIKE
</SMALL>.
</P>
872 <P>Независимое от регистра сравнение обычно выражается так:
</P>
876 WHERE lower(col) = 'abc';
879 Эта конструкция не будет использовать стандартный индекс. Однако, если
880 вы создадите индекс выражения, он будет использован:
882 CREATE INDEX tabindex ON tab (lower(col));
884 <P>Если вышеуказанный индекс создаётся как
<SMALL>UNIQUE
</SMALL>, то
885 колонка, для которой он создаётся может хранить символы и в верхнем,
886 и в нижнем регистре, индес не может иметь идентичных значений, которые
887 отличаются только регистром. Чтобы в колонке можно было хранить символы
888 только в определённом регистре, используйте ограничение
889 <SMALL>CHECK
</SMALL> или проверку через триггер.
</P>
891 <H3><A name=
"item4.9">4.9</A>) Как мне определить, что значение поля в каком-либо
892 запросе равно
<SMALL>NULL
</SMALL>? Как мне соединить возможные
893 <SMALL>NULL
</SMALL>? Могу я сортировать поля
<SMALL>NULL
</SMALL> или нет?
</H3>
895 <P>Вы просто сравниваете значение с
<SMALL>IS NULL
</SMALL> и
896 <SMALL>IS NOT NULL
</SMALL>, как здесь:
</P>
903 <P>Чтобы соединить с возможными значениями
<SMALL>NULL
</SMALL>, используйте
904 <I>COALESCE()
</I> как здесь:
</P>
906 SELECT COALESCE(col1, '') || COALESCE(col2, '')
910 <P>Чтобы отсортировать данные по значению
<NULL> используйте модификаторы
911 <SMALL>IS NULL
</SMALL> и
<SMALL>IS NOT NULL
</SMALL> в выражении
912 <SMALL>ORDER BY
</SMALL>. Когда они будут генерировать значения
913 <I>истина
</I>, то при сортировке они будут выше, чем значения
914 <I>ложь
</I>, так что записи с NULL будут в отсортированном списке сверху:
</P>
919 ORDER BY (col IS NOT NULL);
922 <H3><A name=
"item4.10">4.10</A>) Каковы отличия между разными символьными
928 <TH>Внутреннее имя
</TH>
934 <TD>размер задает максимальную длину, нет заполнения
</TD>
939 <TD>заполняется пустотой до фиксированной длины
</TD>
944 <TD>нет задаваемого верхнего ограничения или длины
</TD>
949 <TD>массив байт переменной длины (можно использовать null-байт без опаски)
</TD>
959 <P>Внутреннее имя вы можете увидеть, когда смотрите системные каталоги
960 и в некоторых сообщениях об ошибках.
</P>
962 <P>Первые четыре типа являются
"varlena" типами (т.е., первые
963 четыре байта на диске являются длинной, за которой следуют данные).
964 Таким образом, фактически используемое пространство больше, чем
965 обозначенный размер. Однако, длинные значения также сжимаются,
966 так что занимаемое дисковое пространство может также быть и меньше,
969 <SMALL>VARCHAR(n)
</SMALL> - это лучшее решение, когда нужно хранить
970 строки переменной длины, не превышающие определенного размера.
971 <SMALL>TEXT
</SMALL> - это лучшее решение для строк неограниченной длины,
972 с максимально допустимой длиной в
1 гигабайт.
973 <P><SMALL>CHAR(n)
</SMALL> - это лучшее решение для хранения строк, которые
974 обычно имеют одинаковую длину.
<SMALL>CHAR(n)
</SMALL> заполняется
975 пустотой до заданной длины, в то время как
<SMALL>VARCHAR(n)
</SMALL>
976 хранит только символы, из которых состоит строка.
977 <SMALL>BYTEA
</SMALL> используется для хранения бинарных данных, значения
978 которых могут включать
<SMALL>NULL
</SMALL> байты. Все типы описанные
979 здесь, имеют сходные характеристики производительности.
</P>
981 <H3><A name=
"item4.11.1">4.11.1</A>) Как мне создать поле
982 serial/с-авто-увеличением?
</H3>
984 <P>PostgreSQL поддерживает тип данных
<SMALL>SERIAL
</SMALL>. Он
985 автоматически создает последовательность. Например:
</P>
987 CREATE TABLE person (
993 автоматически транслируется в:
995 CREATE SEQUENCE person_id_seq;
996 CREATE TABLE person (
997 id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
1002 <P>Автоматически созданная последовательность имеет имя вида
1003 <<I>таблица
</I>>_
<<I>колонка_serial
</I>>_
<I>seq
</I>, где
1004 <I>таблица
</I> и
<I>колонка_serial
</I> - это соответственно имена
1005 таблицы и колонки с типом
<SMALL>SERIAL
</SMALL>.
1006 Смотрите подробности о последовательностях на странице руководства
1007 посвященной
<I>create_sequence
</I>.
</P>
1009 <H3><A name=
"item4.11.2">4.11.2</A>) Как мне получить значение при вставке
1010 <SMALL>SERIAL
</SMALL>?
</H3>
1012 <P>Простейший способ получить назначенное значение
<SMALL>SERIAL
</SMALL>
1013 это использовать
<SMALL>RETURNING
</SMALL>. Используя для примера таблицу в
<A
1014 href=
"#item4.11.1">4.11.1</A>, это может выглядеть так:
</P>
1017 INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
1020 Вы также можете вызвать
<I>nextval()
</I> и использовать это значение в
1021 <SMALL>INSERT
</SMALL> или вызвать
<I>currval()
</I> <I>после
</I>
1022 <SMALL>INSERT
</SMALL>.
1025 <H3><A name=
"item4.11.3">4.11.3</A>) Не может ли получиться так, что
1026 использование
<I>currval()
</I> и
<I>nextval()
</I> приведет к
1027 зациклированию с другими пользователями?
</H3>
1029 <P>Нет.
<i>currval()
</i> возвращает текущее значение, назначенное вашей
1030 сессией, а не другими сессиями.
</P>
1032 <H3><A name=
"item4.11.4">4.11.4</A>) Почему числа из моей последовательности
1033 не используются снова при отмене транзакции? Почему создаются разрывы
1034 при нумерации в колонке, где я использую последовательность/SERIAL?
</H3>
1036 <P>Для реализации конкуретности, значения последовательностей, при
1037 необходимости выдаются во время запуска транзакций и не блокируются
1038 до полного выполнения транзакций. Это может вызывать разрывы в
1039 нумерации при отмене транзакций.
</P>
1042 <H3><A name=
"item4.12">4.12</A>) Что такое
<SMALL>OID
</SMALL>? Что такое
1043 <SMALL>CTID
</SMALL>?
</H3>
1045 <P>Если таблица создана с
<SMALL>WITH OIDS
</SMALL>, то каждая строка
1046 получает уникальный индентификатор
<SMALL>OID
</SMALL>.
1047 O
<SMALL>ID
</SMALL> - это автоматически назначаемое уникальное
4-х
1048 байтовое целое число, которое уникально для всей установленной СУБД.
1049 Однако, после того как его значение превысит
4 миллиарда, значения
1050 O
<SMALL>ID
</SMALL> начинают дублироваться. PostgreSQL использует
1051 <SMALL>OID
</SMALL> для связывания своих внутренних таблиц.
</P>
1053 <P>Для уникального значения в строках таблицы пользователя, лучшим
1054 способом является использование
<SMALL>SERIAL
</SMALL> вместо
1055 O
<SMALL>ID
</SMALL>, потому что последовательности
<SMALL>SERIAL
</SMALL>
1056 уникальны только внутри таблицы и таким образом меньше подвержены
1057 переполнению. Для хранения значений
8-ми байтной последовательности
1058 доступен тип
<SMALL>SERIAL8
</SMALL>.
1060 <P>C
<SMALL>TID
</SMALL> используется для идентификации специальных
1061 физических записей с блочными и offset значениями. C
<SMALL>TID
</SMALL>
1062 изменяется после того как строки в таблице были изменены или перегружены.
1063 <P>T
<SMALL>ID
</SMALL> используется индексными записями в качестве
1064 указателя на физические записи.
</P>
1067 <H3><A name=
"item4.13">4.13</A>) Почему я получаю ошибку
<I>"ERROR: Memory
1068 exhausted in AllocSetAlloc()"</I>?
</H3>
1070 <P>Предположительно у вас закончилась виртуальная память
1071 или что ваше ядро имеет маленький лимит на определенные ресурсы.
1072 Попытайтесь перед запуском сервера БД выполнить следующие
1079 В зависимости от командного интерпретатора shell, только одна из данных
1080 команд выполнится успешно, но она позволит вам установить больший
1081 сегмент данных процесса и возможно решит проблему. Эта команда
1082 изменяет параметры текущего процесса и всех его потомков, созданных
1083 после её запуска. Если у вас возникла проблема с
<SMALL>SQL
</SMALL>
1084 клиентом, потому что backend возвращает слишком большой объем данных,
1085 попытайтесь выполнить эту команду перед запуском клиента.
1087 <H3><A name=
"item4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL
1090 <P>Из
<I>psql
</I>, наберите
<CODE>SELECT version();
</CODE></P>
1093 <H3><A name=
"item4.15">4.15</A>) Как мне создать колонку которая по умолчанию
1094 будет содержать текущее время?
</H3>
1096 <P>Используйте
<I>CURRENT_TIMESTAMP
</I>:
</P>
1098 CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
1101 <H3><A name=
"item4.16">4.16</A>) Как мне выполнить внешнее связывание?
</H3>
1103 <P>PostgreSQL поддерживает внешнее связывание,
1104 используя стандартный синтаксис SQL. Вот два примера:
</P>
1107 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1113 FROM t1 LEFT OUTER JOIN t2 USING (col);
1116 <P>Это идентичные запросы связывания t1.col и t2.col, также возвращают
1117 любые несвязанные строки в t1 (которые не совпадают с t2).
1118 <SMALL>RIGHT
</SMALL> связывание должно добавить несвязанные строки
1119 t2.
<SMALL>FULL
</SMALL> связывание должно возвратить совпавшие
1120 строки плюс все несвязанные строки из t1 и t2. Слово
<SMALL>OUTER
</SMALL>
1121 является необязательным и назначается в
<SMALL>LEFT
</SMALL>,
1122 <SMALL>RIGHT
</SMALL> и
<SMALL>FULL
</SMALL> связываниях. Обычные
1123 связывания называются
<SMALL>INNER
</SMALL> связывания.
</P>
1125 <H3><A name=
"item4.17">4.17</A>) Как выполнять запросы, использующие несколько
1128 <P>Не существует способа создать запрос к базам данных отличным от текущей.
1129 Поскольку PostgreSQL загружает системные каталоги специфичные для базы
1130 данных, непонятно даже, как должен себя вести такой межбазовый запрос.
</P>
1132 <P><I>contrib/dblink
</I> позволяет запросы между базами, используя
1133 вызовы функций. Разумеется, клиент может одновременно также устанавливать
1134 соедиенения с различными базами данных и таких образом объединять
1135 информацию из них.
</P>
1137 <H3><A name=
"item4.18">4.18</A>) Как мне вернуть из функции несколько строк таблицы?
</H3>
1139 <P>Вы можете легко использовать функции, возвращающие список,
1140 <a href=
"http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions">
1141 http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions
</a>.
</P>
1143 <H3><A name=
"item4.19">4.19</A>) Почему я получаю ошибку
"relation with OID ####
1144 не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?
</H3>
1146 <P>В PostgreSQL до версии
8.3, PL/PgSQL кэширует сценарии функции и один из
1147 негативных эффектов этого состоит в том, что если функция PL/PgSQL обращается
1148 к временной таблице и эта таблица позднее удаляется и пересоздается, а функция
1149 затем вызывается снова, то ее вызов приведет к ошибке, потому что скэшированное
1150 содержимое функции содержит указатель на старую временную таблицу. Чтобы решить
1151 эту проблему, используйте
<SMALL>EXECUTE
</SMALL> для доступа к временным
1152 таблицам в PL/PgSQL. Использование этого оператора заставит запрос
1153 перегенерироваться каждый раз.
</P>
1155 <P>В PostgreSQL
8.3 и позднее, этой проблемы нет.
</p>
1158 <H3><A name=
"item4.20">4.20</a>) Какие есть решения для репликации?
</H3>
1160 <P>Хотя
"репликация" -- это единый термин, есть несколько разных технологий
1161 для выполнения репликаций с разными особенностями для каждой.
</P>
1163 <P>Репликация Master/slave позволяет иметь один главный (master) сервер
1164 для выполнения запросов чтения/записи, в то время как подчинённые
1165 (slave) сервера могут производить только запросы
1166 чтения/
<SMALL>SELECT
</SMALL>. Наиболее популярным решением для репликации
1167 master-slave в PostgreSQL является
1168 <A href=
"http://main.slony.info/">
1171 <P>Репликация Multi-master позволяет выполнять запросы чтения/записи
1172 на нескольких, реплицируемых друг с другом компьюетрах. Эта особенность
1173 также приводит к потере производительности, потому что необходима
1174 синхронизация изменений между несколькими серверами. Наиболее
1175 популярным решением для такой репликации в PostgreSQL является
1176 <A href=
"http://pgfoundry.org/projects/pgcluster/">PGcluster
</A>.
1178 <H3><A name=
"item4.21">4.21</A>) Почему имена таблицы и колонок не
1179 распознаются в в моём запросе? Почему не сохраняются заглавные буквы?
</H3>
1181 <P>Наиболее часто имена нераспознаются из-за использования двойных кавычек в
1182 имени таблицы или колонки при создании таблицы. При использовании двойных
1183 кавычек, имя таблицы и колонки (которые называют идентификаторами)
1184 сохраняются в
<A href=
"http://www.postgresql.org/docs/current/static/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS">
1185 регистро-зависимом виде
</A>; это означает, что вы должны использовать
1186 двойные кавычки, когда указываете эти имена в запросе. Некоторые
1187 интерфейсы, такие как pgAdmin, во время создания таблицы добавляют
1188 двойные кавычки автоматически. Таким образом, чтобы идентификаторы
1189 распознавались вы должны следовать одному из следующих правил:
1191 <LI>Избегать использования двойных кавычек при создании таблиц
</LI>
1192 <LI>Использовать в идентификаторах только символы нижнего регистра
</LI>
1193 <LI>Использовать двойные кавычки для идентификаторов в запросах
</LI>