~ubuntu-branches/ubuntu/lucid/postgresql-8.4/lucid-proposed

« back to all changes in this revision

Viewing changes to doc/src/FAQ/FAQ_russian.html

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2009-09-06 14:11:13 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20090906141113-qf5f3hkw7n036jfy
Tags: 8.4.1-1
* Urgency medium due to security fix.
* New upstream security/bug fix release:
  - Disallow "RESET ROLE" and "RESET SESSION AUTHORIZATION" inside
    security-definer functions. This covers a case that was missed in the
    previous patch that disallowed "SET ROLE" and "SET SESSION
    AUTHORIZATION" inside security-definer functions. [CVE-2007-6600]
  - Fix WAL page header initialization at the end of archive recovery.
    This could lead to failure to process the WAL in a subsequent archive
    recovery.
  - Fix "cannot make new WAL entries during recovery" error.
  - Fix problem that could make expired rows visible after a crash.
    This bug involved a page status bit potentially not being set
    correctly after a server crash.
  - Make "LOAD" of an already-loaded loadable module into a no-op.
    Formerly, "LOAD" would attempt to unload and re-load the module,
    but this is unsafe and not all that useful.
  - Make window function PARTITION BY and ORDER BY items always be
    interpreted as simple expressions.
    In 8.4.0 these lists were parsed following the rules used for
    top-level GROUP BY and ORDER BY lists. But this was not correct per
    the SQL standard, and it led to possible circularity.
  - Fix several errors in planning of semi-joins. These led to wrong query
    results in some cases where IN or EXISTS was used together with another
    join.
  - Fix handling of whole-row references to subqueries that are within
    an outer join. An example is SELECT COUNT(ss.-) FROM ... LEFT JOIN
    (SELECT ...) ss ON .... Here, ss.- would be treated as
    ROW(NULL,NULL,...) for null-extended join rows, which is not the same as
    a simple NULL.  Now it is treated as a simple NULL.
  - Fix locale handling with plperl. This bug could cause the server's
    locale setting to change when a plperl function is called, leading to
    data corruption.
  - Fix handling of reloptions to ensure setting one option doesn't
    force default values for others.
  - Ensure that a "fast shutdown" request will forcibly terminate open
    sessions, even if a "smart shutdown" was already in progress.
  - Avoid memory leak for array_agg() in GROUP BY queries.
  - Treat to_char(..., 'TH') as an uppercase ordinal suffix with
    'HH'/'HH12'.  It was previously handled as 'th'.
  - Include the fractional part in the result of EXTRACT(second) and
    EXTRACT(milliseconds) for time and time with time zone inputs.
    This has always worked for floating-point datetime configurations,
    but was broken in the integer datetime code.
  - Fix overflow for INTERVAL 'x ms' when "x" is more than 2 million
    and integer datetimes are in use.
  - Improve performance when processing toasted values in index scans.
    This is particularly useful for PostGIS.
  - Fix a typo that disabled commit_delay.
  - Output early-startup messages to "postmaster.log" if the server is
    started in silent mode. Previously such error messages were discarded,
    leading to difficulty in debugging.
  - Remove translated FAQs. They are now on the wiki. The main FAQ was moved
    to the wiki some time ago.
  - Fix pg_ctl to not go into an infinite loop if "postgresql.conf" is
    empty.
  - Fix several errors in pg_dump's --binary-upgrade mode. pg_dump
    --binary-upgrade is used by pg_migrator.
  - Fix "contrib/xml2"'s xslt_process() to properly handle the maximum
    number of parameters (twenty).
  - Improve robustness of libpq's code to recover from errors during
    "COPY FROM STDIN".
  - Avoid including conflicting readline and editline header files when
    both libraries are installed.
  - Work around gcc bug that causes "floating-point exception" instead
    of "division by zero" on some platforms.
* debian/control: Bump Standards-Version to 3.8.3 (no changes necessary).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<!DOCTYPE html PUBLIC "-//W3C//DTD html 4.01 transitional//EN">
2
 
 
3
 
<HTML>
4
 
  <!-- DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN" -->
5
 
 
6
 
  <HEAD>
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>
10
 
  </HEAD>
11
 
 
12
 
  <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" alink="#0000ff">
13
 
    <H1>Ответы на часто задаваемые вопросы по PostgreSQL</H1>
14
 
 
15
 
    <P>Дата последнего обновления: Среда 25 июня 23:54:14 EDT 2008</P>
16
 
 
17
 
    <P>Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (<A href=
18
 
    "mailto:bruce@momjian.us">bruce@monjian.us</A>)
19
 
    </P>
20
 
    <P>Перевёл на русский: Виктор Вислобоков (<A href=
21
 
    "mailto:admin@postgresql.ru.net">admin@postgresql.ru.net</A>)<BR>
22
 
    </P>
23
 
 
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>
26
 
 
27
 
    <P>Самую свежую русскую версию документа можно найти на
28
 
    <A href="http://postgresql.ru.net/docs/FAQ_russian.html">http://postgresql.ru.net/docs/FAQ_russian.html</A>.</P>
29
 
 
30
 
    <P>Ответы на вопросы специфичные для конкретных платформ можно найти на
31
 
    <A href="http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</A>.</P>
32
 
    <HR>
33
 
 
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>) Как найти информацию об известных ошибках или отсутствующих
44
 
    возможностях?<BR>
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>
54
 
 
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 графический интерфейс
60
 
    пользователя?<BR>
61
 
     
62
 
 
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>) Как мне управлять соединениями от других
67
 
    компьютеров?<BR>
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>) Какое компьютерное "железо" я должен
75
 
    использовать?<BR>
76
 
     
77
 
 
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>) Как посмотреть на то, как оптимизатор выполняет
92
 
     мой запрос?<BR>
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>) Каковы отличия между разными символьными
100
 
     типами?<BR>
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
115
 
    запущена?<BR>
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>) Как выполнять запросы, использующие несколько
120
 
     баз данных?<BR>
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>
127
 
 
128
 
    <HR>
129
 
 
130
 
    <H2 align="center">Общие вопросы</H2>
131
 
 
132
 
    <H3><A name="item1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название? Что такое Postgres?</H3>
133
 
 
134
 
    <P>PostgreSQL произносится <I>Post-Gres-Q-L (Пост-Грес-Кью-Эл)</I>.
135
 
    (Для особо любопытствующих как произносить "PostgreSQL", существует
136
 
    <A href="http://www.postgresql.org/files/postgresql.mp3">аудио-файл</A>).
137
 
    </P>
138
 
 
139
 
    <P>PostgreSQL - это объектно-реляционная система управления базами
140
 
    данных (СУБД), которая имеет традиционные возможности коммерческих 
141
 
    <small>СУБД</small> с расширениями, которые есть в <small>СУБД</small> 
142
 
    нового поколения. PostgreSQL - это свободное и полностью открытое
143
 
    программное обеспечение.</P>
144
 
 
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>
151
 
    </P>
152
 
 
153
 
    <P>Postgres &mdash; это широко используемое сокращение для PostgreSQL.
154
 
    Первоначальным именем проекта в Беркли было Postgres и этот ник теперь
155
 
    наиболее популярен в разговорах о PostgreSQL по сравнению с другими.
156
 
    Если вам трудно полностью проговаривать 'PostgreSQL', можно просто
157
 
    говорить 'Postgres'.</P>
158
 
 
159
 
    <H3><A name="item1.2">1.2</A>) Кто управляет PostgreSQL?</H3>
160
 
    
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>
172
 
 
173
 
    <H3><A name="item1.3">1.3</A>) Каковы авторские права на PostgreSQL?</H3>
174
 
 
175
 
    <P>PostgreSQL распространяется по классической лицензии BSD. Эта
176
 
    лицензия не содержит ограничений на то, как будет использоваться
177
 
    исходный код. Нам нравится эта лицензия и у нас нет намерений её
178
 
    менять. Вот эта лицензия BSD, которую мы используем:</P>
179
 
 
180
 
    <P>Система Управления Базами Данных PostgreSQL</P>
181
 
 
182
 
    <P>Portions copyright (c) 1996-2008, PostgreSQL Global Development
183
 
    Group Portions Copyright (c) 1994-1996 Regents of the University of
184
 
    California</P>
185
 
 
186
 
    <P>Предоставляются права на использование, копирование, изменение
187
 
    и распространение данного программного обеспечения и его документации
188
 
    для любых целей, бесплатно и без подписания какого-либо соглашения,
189
 
    при условии что для каждой копии будут предоставлены данное выше
190
 
    замечание об авторских правах, текущий параграф и два следующих
191
 
    параграфа.</P>
192
 
 
193
 
    <P>КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ
194
 
    ЗА ЛЮБЫЕ ПОВРЕЖДЕНИЯ, ВКЛЮЧАЯ ПОТЕРЮ ДОХОДА, НАНЕСЕННЫЕ ПРЯМЫМ
195
 
    ИЛИ НЕПРЯМЫМ, СПЕЦИАЛЬНЫМ ИЛИ СЛУЧАЙНЫМ ИСПОЛЬЗОВАНИЕМ ДАННОГО
196
 
    ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ЕГО ДОКУМЕНТАЦИИ, ДАЖЕ ЕСЛИ
197
 
    КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ БЫЛ ИЗВЕЩЕН О ВОЗМОЖНОСТИ ТАКИХ
198
 
    ПОВРЕЖДЕНИЙ.</P>
199
 
 
200
 
    <P>КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ СПЕЦИАЛЬНО ОТКАЗЫВАЗЫВАЕТСЯ ПРЕДОСТАВЛЯТЬ
201
 
    ЛЮБЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ТОЛЬКО ЭТИМИ ГАРАНТИЯМИ:
202
 
    НЕЯВНЫЕ ГАРАНТИИ ПРИГОДНОСТИ ТОВАРА ИЛИ ПРИГОДНОСТИ ДЛЯ ОТДЕЛЬНОЙ ЦЕЛИ.
203
 
    ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ НА ОСНОВЕ ПРИЦИПА
204
 
    "КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ
205
 
    СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.</P>
206
 
 
207
 
    <H3><A name="item1.4">1.4</A>) На каких платформах работает PostgreSQL?</H3>
208
 
 
209
 
    <P>Обычно, PostgreSQL может работать на любой современной платформе
210
 
    совместимой с Unix. В инструкции по установке, вы найдете список
211
 
    тех платформ, на которых были проведены тестовые запуски PostgreSQL
212
 
    к моменту выхода данной версии.</P>
213
 
 
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>
221
 
    
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&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F">
226
 
    http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F</A>.</P>
227
 
 
228
 
    <H3><A name="item1.5">1.5</A>) Где можно взять PostgreSQL?</H3>
229
 
 
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>
233
 
 
234
 
 
235
 
    <H3><A name="item1.6">1.6</A>) Какая версия наиболее свежая?</H3>
236
 
 
237
 
    <P>Последний выпуск PostgreSQL - это версия 8.3.3</P>
238
 
 
239
 
    <P>Мы планируем выпускать новые старшие версии каждый год,
240
 
    а младшие версии каждые несколько месяцев.</P>
241
 
 
242
 
 
243
 
    <H3><A name="item1.7">1.7</A>) Где получить поддержку?</H3>
244
 
 
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>
251
 
 
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>
260
 
 
261
 
    <P>Список коммерческой поддержки компаний доступен на
262
 
    <A href="http://www.postgresql.org/support/professional_support">
263
 
    http://www.postgresql.org/support/professional_support</A>.</P>
264
 
 
265
 
 
266
 
    <H3><A name="item1.8">1.8</A>) Как мне сообщить об ошибке?</H3>
267
 
    
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>
275
 
    
276
 
    <P>На ошибки, уведомление о которых были сделаны через специальную
277
 
    форму или отправленные в какой-либо список рассылки PostgreSQL,
278
 
    обычно генерируется один из следующих ответов:</P>
279
 
    <UL>
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>Запрашивается более детальная информация:
287
 
      <UL>
288
 
      <LI>Операционная система</LI>
289
 
      <LI>Версия PostgreSQL</LI>
290
 
      <LI>Тест, воспроизводящий ошибку</LI>
291
 
      <LI>Отладочная информация</LI>
292
 
      <LI>Вывод backtrace отладчика</LI>
293
 
      </UL>
294
 
    </LI>
295
 
    <LI>Это новая ошибка. Может произойти следующее:
296
 
      <UL>
297
 
      <LI>Будет создано исправление, которое будет включено в следующий
298
 
      выпуск</LI>
299
 
      <LI>Ошибка не может быть исправлена немедленно и будет добавлена в список
300
 
      <A HREF="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A></LI>
301
 
      </UL>
302
 
    </LI>
303
 
    </UL>
304
 
 
305
 
    <H3><A name="1.9">1.9</A>) Как найти информацию об известных ошибках
306
 
    или отсутствующих возможностях?</H3>
307
 
 
308
 
    <P>PostgreSQL поддерживает расширенный подкласс <SMALL>SQL:2003</SMALL>.
309
 
    Смотрите наш список <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A>
310
 
    на предмет известных ошибок, отсутствующих возможностей и будущих
311
 
    планов.</P>
312
 
 
313
 
    <P>На запрос какой-либо возможности обычно приходят следующие ответы:</P>
314
 
    <UL>
315
 
    <LI>Данная возможность уже есть в списке
316
 
    <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A></LI>
317
 
    <LI>Данная возможность нежелательна потому что:
318
 
      <UL>
319
 
      <LI>Она дублирует существующую функциональность, которая следует
320
 
      стандарту SQL</LI>
321
 
      <LI>Данная возможность сильно усложнила бы код, но дала бы маленькую
322
 
      выгоду</LI>
323
 
      <LI>Данная возможность небезопасна или ненадёжна</LI>
324
 
      </UL>
325
 
    </LI>
326
 
    <LI>Данная новая возможность добавлена в список
327
 
    <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A>
328
 
    </LI>
329
 
    </UL>
330
 
    
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>
344
 
    
345
 
 
346
 
    <H3><A name="item1.10">1.10</A>) Какая документация имеется в наличии?</H3>
347
 
 
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>
353
 
 
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>
363
 
 
364
 
    <P>Клиент командной строки <I>psql</I> имеет несколько команд \d для
365
 
    отображения информации по типам, операторам, функциям, агрегатам и т.д. -
366
 
    используйте \? для получения списка доступных команд.</P>
367
 
 
368
 
    <P>Наш сайт содержит еще больше информации.</P>
369
 
 
370
 
 
371
 
    <H3><A name="item1.11">1.11</A>) Как мне научиться <SMALL>SQL</SMALL>?</H3>
372
 
 
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>
378
 
 
379
 
    <P>Существует также множество прекрасных учебников доступных в online:
380
 
    <UL>
381
 
    <LI><A href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
382
 
    </LI>
383
 
    <LI><A href="http://sqlcourse.com/">http://sqlcourse.com.</A>
384
 
    </LI>
385
 
    <LI><A href="http://www.w3schools.com/sql/default.asp">http://www.w3school.com/sql/default.asp</A>
386
 
    </LI>
387
 
    <LI><A href="http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</A>
388
 
    </LI>
389
 
    </UL>
390
 
    </P>
391
 
 
392
 
    <H3><A name="item1.12">1.12</A>) Как мне прислать исправление или присоединится к команде разработчиков?</H3>
393
 
 
394
 
    <P>Смотрите <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
395
 
    FAQ для разработчиков</A>.</P>
396
 
 
397
 
    
398
 
    <H3><A name="item1.13">1.13</A>) Как сравнить PostgreSQL с другими
399
 
    <SMALL>СУБД</SMALL>? Может ли PostgreSQL быть встроенным?</H3>
400
 
 
401
 
    <P>
402
 
    Существует несколько методов сравнения программного обеспечения:
403
 
    возможности, производительность, надежность, поддержка и цена.</P>
404
 
 
405
 
    <DL>
406
 
      <DT><B>Возможности</B></DT>
407
 
 
408
 
      <DD>PostgreSQL имеет большинство возможностей представленных
409
 
      в больших коммерческих <SMALL>СУБД</SMALL>, такие как: транзакции,
410
 
      подзапросы, триггеры, представления, ссылочной
411
 
      целостности вторичного ключа и разные блокировки. У нас есть некоторые возможности,
412
 
      которых нет у них: типы, определяемые пользователем, механизм
413
 
      наследования, правила и конкуретное многоверсионное управление
414
 
      для работы с содержимым блокировок.<BR>
415
 
      <BR>
416
 
      </DD>
417
 
 
418
 
      <DT><B>Производительность</B></DT>
419
 
 
420
 
      <DD>Производительность PostgreSQL сходна с другими коммерческими
421
 
      СУБД и с СУБД с открытым исходным кодом. В каких-то вещах мы быстрее,
422
 
      в каких-то медленнее. Наша производительности обычно +/-10% по
423
 
      сравнению с другими СУБД.
424
 
      <BR>
425
 
      </DD>
426
 
 
427
 
      <DT><B>Надежность</B></DT>
428
 
 
429
 
      <DD>Мы понимали, что наша <SMALL>СУБД</SMALL> должна быть надежной
430
 
      или она ничего не будет стоить. Мы стараемся выпускать хорошо проверенный,
431
 
      стабильный код, который содержит минимум ошибок. Каждый выпуск
432
 
      проходит стадию бета-тестирования по крайней мере в течении одного
433
 
      месяца и наша история выпусков показывает что мы можем предоставлять
434
 
      стабильные, монолитные выпуски, которые готовы к продуктивному
435
 
      использованию. Мы верим, что мы производим проверку не хуже,
436
 
      чем у других СУБД.<BR>
437
 
      <BR>
438
 
      </DD>
439
 
 
440
 
      <DT><B>Поддержка</B></DT>
441
 
 
442
 
      <DD>Наш список рассылки предоставляет возможможность общения с
443
 
      большой группой разработчиков и пользователей, которые могут помочь решить
444
 
      любые возникшие проблемы. В то же время, мы не гарантируем какие-либо
445
 
      исправления, но и разработчики коммерческих <SMALL>СУБД</SMALL> не всегда
446
 
      делают исправления. Прямой доступ к разработчикам, сообществу
447
 
      пользователей, руководствам и исходным текстам часто делают поддержку
448
 
      PostgreSQL превосходящей другие <SMALL>СУБД</SMALL>. Существует
449
 
      коммерческая поддержка по результам возникших инцидентов, которая
450
 
      доступна для тех кому она нужна. (Смотрите <A href="#item1.7">Секцию 1.7</A>.)<BR>
451
 
      <BR>
452
 
      </DD>
453
 
 
454
 
      <DT><B>Цена</B></DT>
455
 
 
456
 
      <DD>Наш продукт бесплатен как для коммерческого так, и не для
457
 
      коммерческого использования. Вы можете добавлять свой код в наш
458
 
      продукт без ограничений, за исключением тех, что описываются в
459
 
      нашей лицензии стиля BSD, которая приведена выше.<BR>
460
 
      <BR>
461
 
      </DD>
462
 
    </DL>
463
 
    
464
 
    <P>PostgreSQL разрабатывается по архитектуре клиент/сервер, которая
465
 
    требует отдельных процессов для каждого клиента и сервера, а также
466
 
    несколько вспомогательных процессов. Многие встраиваемые архитектуры
467
 
    могут соответствовать таким требованиям. Однако, если ваша встраиваемая
468
 
    архитектура требует сервер баз данных для запуска внутри прикладного
469
 
    процесса, вы не можете использовать Postgres и вам лучше бы выбрать
470
 
    для базы данных какое-либо другое облегченное решение.</P>
471
 
 
472
 
    <H3><A name="item1.14">1.14</A>) Будет ли PostgreSQL работать с
473
 
    последними изменениями, в разных страных, касающимися дневного времени?</H3>
474
 
 
475
 
    <P>Изменения в сохранении дневного времени в США включены в PostgreSQL версии
476
 
    8.0.[4+] и во все следующие выпуски, например в 8.1. Изменения по Канаде
477
 
    и Западной Австралии включены в 8.0.[10+], 8.1.[6+] и все следующие
478
 
    выпуски. Выпуски PostgreSQL до 8.0 используют информацию о сохранении
479
 
    дневного времени из базы данных временных зон в операционной системе.</p>
480
 
    <HR>
481
 
 
482
 
    <H3 id="item1.15">1.15) Как мне отписаться от списков рассылки PostgreSQL?
483
 
    Как избежать получения дублирующих сообщений?</H3>
484
 
 
485
 
    <P>Страница <a
486
 
    href="http://mail.postgresql.org/mj/mj_wwwusr/domain=postgresql.org?user=&amp;passw=&amp;func=login">Majordomo</a>
487
 
    на сайте PostgreSQL позволяет подписаться или отписаться от любого из списков
488
 
    рассылки PostgreSQL. (Вам может понадобится ваш пароль для Majordomo, который
489
 
    отправляется на ваш E-mail, чтобы войти в управление вашими подписками.)</P>
490
 
    
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>
498
 
    
499
 
    <HR>
500
 
 
501
 
    <H2 align="center">Вопросы пользователей по клиентской части</H2>
502
 
 
503
 
    <H3><A name="item2.1">2.1</A>) Какие интерфейсы есть для PostgreSQL?</H3>
504
 
 
505
 
    <P>Установка PostgreSQL включает только <small>C</small> и встроенный
506
 
    (embedded) <small>C</small> интерфейсы. Все другие интерфейсы
507
 
    являются независимыми проектами и загружаются отдельно; самостоятельность
508
 
    проектов позволяет им организовать собственное расписание выпусков
509
 
    новых версий и иметь собственную команду разработчиков.</P>
510
 
    
511
 
    <P>Некоторые языки программирования, такие как <small>PHP</small>
512
 
    включают в себя интерфейс к PostgreSQL. Интерфейсы для таких языков
513
 
    как Perl, <small>TCL</small>, Python и многих других, доступны на
514
 
    <a href="http://pgfoundry.org">http://pgfoundry.org</A>.</P>
515
 
 
516
 
    <H3><A name="item2.2">2.2</A>) Какие инструменты существуют для использования
517
 
    PostgreSQL через Web?</H3>
518
 
 
519
 
    <P>Прекрасное введение во взаимодействие баз данных и Web можно найти на:
520
 
    <A href="http://www.webreview.com">http://www.webreview.com</A></P>
521
 
 
522
 
    <P>Для интеграции с Web, PHP <A href="http://www.php.net">
523
 
    http://www.php.net</A> является неплохим интерфейсом.</P>
524
 
 
525
 
    <P>В сложных случаях, многие пользуются Perl и DBD::Pg с CGI.pm
526
 
    или mod_perl.</P>
527
 
 
528
 
    <H3><A name="item2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс
529
 
    пользователя?</H3>
530
 
 
531
 
    <P>Для PostgreSQL существует большое количество инструментов с
532
 
    графическим интерфейсом как коммерческих, так и открытых. Подробности
533
 
    можно найти в <A href="http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools">
534
 
    Документации сообщества для GUI иструментов PostgreSQL</A></P>
535
 
 
536
 
    <HR>
537
 
 
538
 
    <H2 align="center">Вопросы администрирования</H2>
539
 
 
540
 
    <H3><A name="item3.1">3.1</A>) Как мне установить PostgreSQL в место отличное
541
 
    от <I>/usr/local/pgsql</I>?</H3>
542
 
 
543
 
    <P>Задайте опцию <I>--prefix</I> когда запускаете <I>configure</I>.</P>
544
 
 
545
 
    <H3><A name="item3.2">3.2</A>) Как мне управлять соединениями от других
546
 
    компьютеров?</H3>
547
 
 
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> и перестартовать
553
 
    сервер СУБД.</P>
554
 
 
555
 
    <H3><A name="item3.3">3.3</A>) Какие настройки мне нужно сделать для улучшения
556
 
     производительности?</H3>
557
 
 
558
 
    <P>Существует три главных области, которые потенциально могут
559
 
    увеличить производительность:</P>
560
 
    
561
 
    <DL>
562
 
    <DT><B>Изменение запроса</B></DT>
563
 
    <DD>Это означает модификацию запросов для получения лучшей
564
 
    производительности:
565
 
    <UL>
566
 
    <LI>Создание индексов, включая индексы выражений и частичные индексы</LI>
567
 
    <LI>Использование COPY вместо множества <small>INSERT</small></LI>
568
 
    <LI>Группировка нескольких операторов в единую транзакцию для
569
 
    уменьшения нагрузки при выполнении завершения транзакции</LI>
570
 
    <LI>Использование <small>CLUSTER</small>, когда из индекса берётся
571
 
    множество строк</LI>
572
 
    <LI>Использование <small>LIMIT</small> для того, чтобы возвращалась
573
 
    только часть вывода от запроса</LI>
574
 
    <LI>Использование Подготовленных (Prepared) запросов</LI>
575
 
    <LI>Использование <small>ANALYZE</small> для обслуживания статистики
576
 
    оптимизатора</LI>
577
 
    <LI>Регулярное использование <small>VACUUM</small> или <I>pg_autovacuum</I></LI>
578
 
    <LI>Удаление индексов во время больших изменений данных</LI>
579
 
    </UL>
580
 
    <BR><BR>
581
 
    </DD>
582
 
 
583
 
    <DT><B>Настройка сервера</B></DT>
584
 
    
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>.
593
 
    <BR><BR>
594
 
    </DD>
595
 
    
596
 
    <DT><B>Выбор "железа" - аппаратного обеспечения</B></DT>
597
 
    
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>.
603
 
    <BR>
604
 
    <BR>
605
 
    </DD>
606
 
    </DL>
607
 
 
608
 
    <H3><A name="item3.4">3.4</A>) Какие возможности для отладки есть в
609
 
    наличии?</H3>
610
 
 
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>
616
 
    
617
 
 
618
 
    <H3><A name="item3.5">3.5</A>) Почему я получаю сообщение <I>"Sorry, too
619
 
    many clients"</I> когда пытаюсь подключиться к базе?</H3>
620
 
 
621
 
    <P>Вы достигли установленного по умолчанию ограничения в 100 сессий
622
 
    подключения к базе данных. Вам необходимо увеличить лимит на количество
623
 
    конкурентных backend процессов для вашего сервера БД,
624
 
    изменив значение <I>max_connections</I> в файле <I>postgresql.conf</I>
625
 
    и перестартовать сервер БД.</P>
626
 
     
627
 
 
628
 
    <H3><A name="item3.6">3.6</A>) Как выполнить обновление PostgreSQL?</H3>
629
 
    
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>
634
 
    
635
 
 
636
 
    <H3><A name="item3.7">3.7</A>) Какое компьютерное "железо" я должен
637
 
    использовать?</H3>
638
 
    
639
 
    <P>Поскольку "железо" персональных компьютеров является наиболее
640
 
    совместимым, люди склонны верить, что такое "железо" имеет одинаковое
641
 
    качество. Это не так. Память ECC, SCSI и качественные материнские платы
642
 
    являются более надёжными и имеют более лучшую производительность, чем
643
 
    менее дорогое "железо". PostgreSQL будет работать на любом "железе",
644
 
    но если для вас важны надёжность и производительность, то с вашей стороны
645
 
    будет мудро поставить соответствующее "железо". Обсудить разное "железо"
646
 
    можно в наших списках рассылки.</P>
647
 
    
648
 
    <HR>
649
 
 
650
 
    <H2 align="center">Вопросы эксплуатации</H2>
651
 
 
652
 
    <H3><A name="item4.1">4.1</A>) Как выполнить <SMALL>SELECT</SMALL> только
653
 
    для нескольких первых строчек запроса? Произвольной строки?</H3>
654
 
 
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>
661
 
 
662
 
    <P>To <small>SELECT</small> a random row, use:</P>
663
 
<PRE>    SELECT col
664
 
    FROM tab
665
 
    ORDER BY random()
666
 
    LIMIT 1;
667
 
</PRE>
668
 
 
669
 
 
670
 
    <H3><A name="item4.2">4.2</A>) Как мне найти какие таблицы, индексы,
671
 
    базы данных и пользователи существуют? Как мне увидеть запросы,
672
 
    которые использует <I>psql</I> для получения этой информации?</H3>
673
 
 
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>
685
 
    
686
 
    <P>Также существуют системные таблицы, начинающиеся с <I>pg_</I>.</P>
687
 
    
688
 
    <P>Используйте <I>psql -l</I> для получения списка всех баз данных.</P>
689
 
 
690
 
    <P>Также посмотрите файл <I>pgsql/src/tutorial/syscat.source</I>.
691
 
    Он показывает многие из операторов <SMALL>SELECT</SMALL> необходимых
692
 
    для получения информации из системных таблиц базы данных.</P>
693
 
 
694
 
 
695
 
    <H3><A name="item4.3">4.3</A>) Как изменить тип данных колонки?</H3>
696
 
 
697
 
    <P>В 8.0 и более поздних версиях, изменение типа колонки выполняется
698
 
    очень легко через <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P>
699
 
 
700
 
    <P>В более ранних версиях сделайте так:</P>
701
 
<PRE>
702
 
    BEGIN;
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;
706
 
    COMMIT;
707
 
</PRE>
708
 
 
709
 
    <H3><A name="item4.4">4.4</A>) Каковы максимальные размеры для строк в таблице,
710
 
    таблиц и базы данных?</H3>
711
 
 
712
 
    <P>Существуют следующие ограничения:</P>
713
 
<BLOCKQUOTE>
714
 
<TABLE>
715
 
<TR>
716
 
  <TD>Максимальный размер базы?</TD>
717
 
  <TD>неограничен (существуют базы на 32 TB)</TD>
718
 
</TR>
719
 
<TR>
720
 
  <TD>Максимальный размер таблицы?</TD>
721
 
  <TD>32 TB</TD>
722
 
</TR>
723
 
<TR>
724
 
  <TD>Максимальный размер строки?</TD>
725
 
  <TD>400 Gb</TD>
726
 
</TR>
727
 
<TR>
728
 
  <TD>Максимальный размер поля?</TD>
729
 
  <TD>1 GB</TD>
730
 
</TR>
731
 
<TR>
732
 
  <TD>Максимальное количество строк в таблице?</TD>
733
 
  <TD>неограничено</TD>
734
 
</TR>
735
 
<TR>
736
 
  <TD>Максимальное количество колонок в таблице?</TD>
737
 
  <TD>250-1600 в зависимости от типа</TD>
738
 
</TR>
739
 
<TR>
740
 
  <TD>Максимальное количество индексов в таблице?</TD>
741
 
  <TD>неограничено</TD>
742
 
</TR>
743
 
</TABLE>
744
 
</BLOCKQUOTE>
745
 
<BR>
746
 
    <P>Разумеется, понятие "неограничено" на самом деле ограничивается
747
 
    доступным дисковым пространиством и размерами памяти/своппинга.
748
 
    Когда значения перечисленные выше неоправдано большие, может
749
 
    пострадать производительность.</P>
750
 
 
751
 
    <P>Максимальный размер таблицы в 32 TB не требует чтобы операционная
752
 
    система поддерживала файлы больших размеров. Большие таблицы хранятся
753
 
    как множество файлов размером в 1 GB, так что ограничения, которые
754
 
    накладывает файловая система не важны.</P>
755
 
 
756
 
    <P>Максимальный размер таблицы и максимальное количество колонок
757
 
    могут быть увеличены в четыре раза, если размер блока по умолчанию будет
758
 
    увеличен до 32k.</P>
759
 
    
760
 
    <P>Существует ограничение, по которому индексы не могут создаваться для
761
 
    колонок длиннее чем 2,000 символов. К счастью такие индексы вряд ли
762
 
    действительно кому-то нужны. Уникальность гарантируется наилучим образом,
763
 
    с помощью функционального индекса из хэша MD5 длинной колонки, а
764
 
    полнотекстовое индексирование позволяет искать слова внутри колонки.</P>
765
 
 
766
 
    <H3><A name="item4.5">4.5</A>) Как много дискового пространства в базе данных
767
 
     нужно для сохранения данных из обычного текстового файла?</H3>
768
 
 
769
 
    <P>СУБД PostgreSQL может потребоваться дискового пространства до 5 раз
770
 
    больше для сохранения данных из простого текстового файла.</P>
771
 
 
772
 
    <P>В качестве примера, рассмотрим файл в 100,000 строк в каждой, из
773
 
    которых целое число и текстовое описание. При этом длина текста,
774
 
    в среднем, составляет 20 байт. Размер простого файла составит 2.8 MB.
775
 
    Размер базы PostgreSQL, содержащей эти же данные составит приблизительно
776
 
    5.2 MB из которых:</P>
777
 
<PRE>
778
 
    24 байт: на каждый заголовок строки в таблице (приблизительно)
779
 
  + 24 байта: одно поле с целочисленным типом и одно текстовое поле
780
 
  +  4 байта: указатель на странице для всей табличной строки
781
 
   ----------------------------------------
782
 
    56 байт на строку в таблице
783
 
 
784
 
   Размер страницы данных в PostgreSQL составляет 8192 байт (8 KB), так что:
785
 
 
786
 
   8192 байт на страницу
787
 
   ---------------------   =  158 строк в таблице на страницу БД (округлённо)
788
 
     52 байт на строку в таблице
789
 
 
790
 
     100000 строк данных
791
 
   ----------------------- =  633 страниц в БД (округлённо)
792
 
   158 строк в таблице на страницу
793
 
 
794
 
   633 страниц БД * 8192 байт на страницу = 5,185,536 байт (5.2 MB)
795
 
</PRE>
796
 
 
797
 
    <P>Индексы не требуют так много, но поскольку они создаются для
798
 
    большого количества данных, они также могут быть велики.</P>
799
 
    
800
 
    <P>Значения <small>NULL</small> хранятся как битовые карты и поэтому они
801
 
    занимают очень мало места.
802
 
    </P>
803
 
 
804
 
    <H3><A name="item4.6">4.6</A>) Почему мои запросы работают медлено? Почему
805
 
     они не используют мои индексы?</H3>
806
 
 
807
 
    <P>Индексы не используются для каждого запроса. Они
808
 
    используются только если таблица больше минимального размера и запрос
809
 
    выбирает только маленький процент строк в таблице. Так устроено,
810
 
    потому что доступ к диску с применением рандомизации при сканировании
811
 
    индексов может быть медленнее, чем простое чтение таблицы или ее
812
 
    последовательное сканирование.</P>
813
 
    
814
 
    <P>Чтобы определить необходимость использования индекса для какой-либо
815
 
    таблицы, PostgreSQL должен иметь статистику по этой таблице. Эта
816
 
    статистика собирается при использовании <SMALL>VACUUM ANALYZE</SMALL>
817
 
    или просто <SMALL>ANALYZE</SMALL>. Используя статистику, оптимизатор
818
 
    узнает о том как много строк в таблице и если он должен использовать
819
 
    индексы, то он может принимать лучшие решения. Статистика также
820
 
    влияет на определение оптимального порядка связывания и метода связывания.
821
 
    При изменении содержимого таблицы должен периодически выполнятся
822
 
    сбор статистики.</P>
823
 
    
824
 
    <P>Обычно индексы не используются для <SMALL>ORDER BY</SMALL> или для
825
 
    выполнения связываний. Последовательный перебор следующий за явной
826
 
    сортировкой обычно быстрее, чем поиск по индексам в большой таблице.
827
 
    Однако, <SMALL>ORDER BY</SMALL> часто комбинируется с <SMALL>LIMIT</SMALL>
828
 
    и в этом случае индекс будет использоваться, поскольку при выполнении
829
 
    будет возвращаться небольшая часть таблицы.</P>
830
 
 
831
 
    <P>Если вам кажется, что оптимизатор некорректно выбирает последовательный
832
 
    перебор, используйте <CODE>SET enable_seqscan TO 'off'</CODE> и
833
 
    запустите запрос снова, чтобы увидеть, действительно ли сканирование
834
 
    индексов быстрее.
835
 
    </P>
836
 
 
837
 
    <P>Когда используются операции с шаблонами, например <SMALL>LIKE</SMALL>
838
 
    или <I>~</I>, индексы могут быть использованы в следующих случаях:</P>
839
 
    <UL>
840
 
    <LI>Начало строки поиска должно совпадать с началом искомой строки, т.е.:
841
 
    <UL>
842
 
    <LI><small>LIKE</small> шаблоны не должны начинаться с <i>%.</i>.</LI>
843
 
    <LI><i>~</i> шаблоны регулярных выражений должна начинаться на <i>^</i>.</LI>
844
 
    </UL></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>
855
 
    </UL>
856
 
    
857
 
    <H3><A name="item4.7">4.7</A>) Как посмотреть на то, как оптимизатор выполняет
858
 
     мой запрос?</H3>
859
 
 
860
 
    <P>Смотрите страницу руководства посвященную <SMALL>EXPLAIN</SMALL>.</P>
861
 
 
862
 
 
863
 
    <H3><A name="item4.8">4.8</A>) Как мне выполнить поиск регулярного выражения
864
 
     и поиск независимый от регистра букв поиск регулярного выражения?
865
 
     Как мне использовать индекс для поиска независимого от регистра букв?</H3>
866
 
 
867
 
    <P>Оператор <I>~</I> производит поиск регулярного выражения, а оператор
868
 
    <I>~*</I> производит независимый от регистра букв поиск регулярного
869
 
    выражения. Независимый от регистра вариант <SMALL>LIKE</SMALL> называется
870
 
    <SMALL>ILIKE</SMALL>.</P>
871
 
 
872
 
    <P>Независимое от регистра сравнение обычно выражается так:</P>
873
 
<PRE>
874
 
    SELECT *
875
 
    FROM tab
876
 
    WHERE lower(col) = 'abc';
877
 
</PRE>
878
 
 
879
 
    Эта конструкция не будет использовать стандартный индекс. Однако, если
880
 
    вы создадите индекс выражения, он будет использован:
881
 
<PRE>
882
 
    CREATE INDEX tabindex ON tab (lower(col));
883
 
</PRE>
884
 
    <P>Если вышеуказанный индекс создаётся как <SMALL>UNIQUE</SMALL>, то
885
 
    колонка, для которой он создаётся может хранить символы и в верхнем,
886
 
    и в нижнем регистре, индес не может иметь идентичных значений, которые
887
 
    отличаются только регистром. Чтобы в колонке можно было хранить символы
888
 
    только в определённом регистре, используйте ограничение
889
 
    <SMALL>CHECK</SMALL> или проверку через триггер.</P>
890
 
 
891
 
    <H3><A name="item4.9">4.9</A>)  Как мне определить, что значение поля в каком-либо
892
 
     запросе равно <SMALL>NULL</SMALL>? Как мне соединить возможные
893
 
     <SMALL>NULL</SMALL>? Могу я сортировать поля <SMALL>NULL</SMALL> или нет?</H3>
894
 
 
895
 
    <P>Вы просто сравниваете значение с <SMALL>IS NULL</SMALL> и
896
 
    <SMALL>IS NOT NULL</SMALL>, как здесь:</P>
897
 
<PRE>
898
 
   SELECT *
899
 
   FROM tab
900
 
   WHERE col IS NULL;
901
 
</PRE>
902
 
 
903
 
   <P>Чтобы соединить с возможными значениями <SMALL>NULL</SMALL>, используйте
904
 
   <I>COALESCE()</I> как здесь:</P>
905
 
<PRE>
906
 
   SELECT COALESCE(col1, '') || COALESCE(col2, '')
907
 
   FROM tab
908
 
</PRE>
909
 
 
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>
915
 
 
916
 
<PRE>
917
 
   SELECT *
918
 
   FROM tab
919
 
   ORDER BY (col IS NOT NULL);
920
 
</PRE>   
921
 
 
922
 
    <H3><A name="item4.10">4.10</A>) Каковы отличия между разными символьными
923
 
     типами?</H3>
924
 
<BLOCKQUOTE>
925
 
<TABLE>
926
 
<TR>
927
 
  <TH>Тип</TH>
928
 
  <TH>Внутреннее имя</TH>
929
 
  <TH>Замечания</TH>
930
 
</TR>
931
 
<TR>
932
 
  <TD>VARCHAR(n)</TD>
933
 
  <TD>varchar</TD>
934
 
  <TD>размер задает максимальную длину, нет заполнения</TD>
935
 
</TR>
936
 
<TR>
937
 
  <TD>CHAR(n)</TD>
938
 
  <TD>bpchar</TD>
939
 
  <TD>заполняется пустотой до фиксированной длины</TD>
940
 
</TR>
941
 
<TR>
942
 
  <TD>TEXT</TD>
943
 
  <TD>text</TD>
944
 
  <TD>нет задаваемого верхнего ограничения или длины</TD>
945
 
</TR>
946
 
<TR>
947
 
  <TD>BYTEA</TD>
948
 
  <TD>bytea</TD>
949
 
  <TD>массив байт переменной длины (можно использовать null-байт без опаски)</TD>
950
 
</TR>
951
 
<TR>
952
 
  <TD>"char"</TD>
953
 
  <TD>char</TD>
954
 
  <TD>один символ</TD>
955
 
</TR>
956
 
</TABLE>
957
 
</BLOCKQUOTE>
958
 
 
959
 
    <P>Внутреннее имя вы можете увидеть, когда смотрите системные каталоги
960
 
    и в некоторых сообщениях об ошибках.</P>
961
 
 
962
 
    <P>Первые четыре типа являются "varlena" типами (т.е., первые
963
 
    четыре байта на диске являются длинной, за которой следуют данные).
964
 
    Таким образом, фактически используемое пространство больше, чем
965
 
    обозначенный размер. Однако, длинные значения также сжимаются,
966
 
    так что занимаемое дисковое пространство может также быть и меньше,
967
 
    чем ожидалось.</P>
968
 
 
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>
980
 
 
981
 
    <H3><A name="item4.11.1">4.11.1</A>) Как мне создать поле
982
 
    serial/с-авто-увеличением?</H3>
983
 
 
984
 
    <P>PostgreSQL поддерживает тип данных <SMALL>SERIAL</SMALL>. Он
985
 
    автоматически создает последовательность. Например:</P>
986
 
<PRE>
987
 
    CREATE TABLE person ( 
988
 
        id   SERIAL, 
989
 
        name TEXT 
990
 
    );
991
 
</PRE>
992
 
 
993
 
    автоматически транслируется в: 
994
 
<PRE>
995
 
    CREATE SEQUENCE person_id_seq;
996
 
    CREATE TABLE person ( 
997
 
        id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
998
 
        name TEXT 
999
 
    );
1000
 
</PRE>
1001
 
 
1002
 
    <P>Автоматически созданная последовательность имеет имя вида
1003
 
    &lt;<I>таблица</I>&gt;_&lt;<I>колонка_serial</I>&gt;_<I>seq</I>, где
1004
 
    <I>таблица</I> и <I>колонка_serial</I> - это соответственно имена
1005
 
    таблицы и колонки с типом <SMALL>SERIAL</SMALL>.
1006
 
    Смотрите подробности о последовательностях на странице руководства
1007
 
    посвященной <I>create_sequence</I>.</P>
1008
 
 
1009
 
    <H3><A name="item4.11.2">4.11.2</A>) Как мне получить значение при вставке
1010
 
    <SMALL>SERIAL</SMALL>?</H3>
1011
 
 
1012
 
    <P>Простейший способ получить назначенное значение <SMALL>SERIAL</SMALL>
1013
 
    это использовать <SMALL>RETURNING</SMALL>.  Используя для примера таблицу в <A
1014
 
    href="#item4.11.1">4.11.1</A>, это может выглядеть так:</P>
1015
 
 
1016
 
<PRE>
1017
 
    INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
1018
 
</PRE>
1019
 
 
1020
 
    Вы также можете вызвать <I>nextval()</I> и использовать это значение в
1021
 
    <SMALL>INSERT</SMALL> или вызвать <I>currval()</I> <I>после</I>
1022
 
    <SMALL>INSERT</SMALL>.
1023
 
 
1024
 
 
1025
 
    <H3><A name="item4.11.3">4.11.3</A>) Не может ли получиться так, что
1026
 
    использование <I>currval()</I> и <I>nextval()</I> приведет к
1027
 
    зациклированию с другими пользователями?</H3>
1028
 
 
1029
 
    <P>Нет. <i>currval()</i> возвращает текущее значение, назначенное вашей
1030
 
    сессией, а не другими сессиями.</P>
1031
 
 
1032
 
    <H3><A name="item4.11.4">4.11.4</A>) Почему числа из моей последовательности
1033
 
    не используются снова при отмене транзакции? Почему создаются разрывы
1034
 
    при нумерации в колонке, где я использую последовательность/SERIAL?</H3>
1035
 
 
1036
 
    <P>Для реализации конкуретности, значения последовательностей, при
1037
 
    необходимости выдаются во время запуска транзакций и не блокируются
1038
 
    до полного выполнения транзакций. Это может вызывать разрывы в
1039
 
    нумерации при отмене транзакций.</P>
1040
 
 
1041
 
 
1042
 
    <H3><A name="item4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое
1043
 
    <SMALL>CTID</SMALL>?</H3>
1044
 
 
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>
1052
 
 
1053
 
    <P>Для уникального значения в строках таблицы пользователя, лучшим
1054
 
    способом является использование <SMALL>SERIAL</SMALL> вместо
1055
 
    O<SMALL>ID</SMALL>, потому что последовательности <SMALL>SERIAL</SMALL>
1056
 
    уникальны только внутри таблицы и таким образом меньше подвержены
1057
 
    переполнению. Для хранения значений 8-ми байтной последовательности
1058
 
    доступен тип <SMALL>SERIAL8</SMALL>.
1059
 
 
1060
 
    <P>C<SMALL>TID</SMALL> используется для идентификации специальных
1061
 
    физических записей с блочными и offset значениями. C<SMALL>TID</SMALL>
1062
 
    изменяется после того как строки в таблице были изменены или перегружены.
1063
 
    <P>T<SMALL>ID</SMALL> используется индексными записями в качестве
1064
 
    указателя на физические записи.</P>
1065
 
 
1066
 
 
1067
 
    <H3><A name="item4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory
1068
 
    exhausted in AllocSetAlloc()"</I>?</H3>
1069
 
 
1070
 
    <P>Предположительно у вас закончилась виртуальная память
1071
 
    или что ваше ядро имеет маленький лимит на определенные ресурсы.
1072
 
    Попытайтесь перед запуском сервера БД выполнить следующие
1073
 
    команды:</P>
1074
 
<PRE>
1075
 
    ulimit -d 262144
1076
 
    limit datasize 256m
1077
 
</PRE>
1078
 
 
1079
 
    В зависимости от командного интерпретатора shell, только одна из данных
1080
 
    команд выполнится успешно, но она позволит вам установить больший
1081
 
    сегмент данных процесса и возможно решит проблему. Эта команда
1082
 
    изменяет параметры текущего процесса и всех его потомков, созданных
1083
 
    после её запуска. Если у вас возникла проблема с <SMALL>SQL</SMALL>
1084
 
    клиентом, потому что backend возвращает слишком большой объем данных,
1085
 
    попытайтесь выполнить эту команду перед запуском клиента.
1086
 
 
1087
 
    <H3><A name="item4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL
1088
 
    запущена?</H3>
1089
 
 
1090
 
    <P>Из <I>psql</I>, наберите <CODE>SELECT version();</CODE></P>
1091
 
 
1092
 
 
1093
 
    <H3><A name="item4.15">4.15</A>) Как мне создать колонку которая по умолчанию
1094
 
     будет содержать текущее время?</H3>
1095
 
 
1096
 
    <P>Используйте <I>CURRENT_TIMESTAMP</I>:</P>
1097
 
<PRE>
1098
 
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
1099
 
</PRE>
1100
 
 
1101
 
    <H3><A name="item4.16">4.16</A>) Как мне выполнить внешнее связывание?</H3>
1102
 
 
1103
 
    <P>PostgreSQL поддерживает внешнее связывание,
1104
 
    используя стандартный синтаксис SQL. Вот два примера:</P>
1105
 
<PRE>
1106
 
    SELECT *
1107
 
    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1108
 
</PRE>
1109
 
 
1110
 
    или
1111
 
<PRE>
1112
 
    SELECT *
1113
 
    FROM t1 LEFT OUTER JOIN t2 USING (col);
1114
 
</PRE>
1115
 
 
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>
1124
 
 
1125
 
    <H3><A name="item4.17">4.17</A>) Как выполнять запросы, использующие несколько
1126
 
     баз данных?</H3>
1127
 
 
1128
 
    <P>Не существует способа создать запрос к базам данных отличным от текущей.
1129
 
    Поскольку PostgreSQL загружает системные каталоги специфичные для базы
1130
 
    данных, непонятно даже, как должен себя вести такой межбазовый запрос.</P>
1131
 
 
1132
 
    <P><I>contrib/dblink</I> позволяет запросы между базами, используя
1133
 
    вызовы функций. Разумеется, клиент может одновременно также устанавливать
1134
 
    соедиенения с различными базами данных и таких образом объединять
1135
 
    информацию из них.</P>
1136
 
 
1137
 
    <H3><A name="item4.18">4.18</A>) Как мне вернуть из функции несколько строк таблицы?</H3>
1138
 
 
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>
1142
 
 
1143
 
    <H3><A name="item4.19">4.19</A>) Почему я получаю ошибку "relation with OID ####
1144
 
     не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?</H3>
1145
 
     
1146
 
    <P>В PostgreSQL до версии 8.3, PL/PgSQL кэширует сценарии функции и один из
1147
 
    негативных эффектов этого состоит в том, что если функция PL/PgSQL обращается
1148
 
    к временной таблице и эта таблица позднее удаляется и пересоздается, а функция
1149
 
    затем вызывается снова, то ее вызов приведет к ошибке, потому что скэшированное
1150
 
    содержимое функции содержит указатель на старую временную таблицу. Чтобы решить
1151
 
    эту проблему, используйте <SMALL>EXECUTE</SMALL> для доступа к временным
1152
 
    таблицам в PL/PgSQL. Использование этого оператора заставит запрос
1153
 
    перегенерироваться каждый раз.</P>
1154
 
 
1155
 
    <P>В PostgreSQL 8.3 и позднее, этой проблемы нет.</p>
1156
 
    
1157
 
 
1158
 
    <H3><A name="item4.20">4.20</a>) Какие есть решения для репликации?</H3>
1159
 
 
1160
 
    <P>Хотя "репликация" -- это единый термин, есть несколько разных технологий
1161
 
    для выполнения репликаций с разными особенностями для каждой.</P>
1162
 
    
1163
 
    <P>Репликация Master/slave позволяет иметь один главный (master) сервер
1164
 
    для выполнения запросов чтения/записи, в то время как подчинённые
1165
 
    (slave) сервера могут производить только запросы
1166
 
    чтения/<SMALL>SELECT</SMALL>.  Наиболее популярным решением для репликации
1167
 
    master-slave в PostgreSQL является
1168
 
    <A href="http://main.slony.info/">
1169
 
    Slony-I</A>.</P>
1170
 
    
1171
 
    <P>Репликация Multi-master позволяет выполнять запросы чтения/записи
1172
 
    на нескольких, реплицируемых друг с другом компьюетрах.  Эта особенность
1173
 
    также приводит к потере производительности, потому что необходима
1174
 
    синхронизация изменений между несколькими серверами.  Наиболее
1175
 
    популярным решением для такой репликации в PostgreSQL является
1176
 
    <A href="http://pgfoundry.org/projects/pgcluster/">PGcluster</A>.
1177
 
    
1178
 
    <H3><A name="item4.21">4.21</A>) Почему имена таблицы и колонок не
1179
 
    распознаются в в моём запросе? Почему не сохраняются заглавные буквы?</H3>
1180
 
    
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
 
    распознавались вы должны следовать одному из следующих правил:
1190
 
    <UL>
1191
 
    <LI>Избегать использования двойных кавычек при создании таблиц</LI>
1192
 
    <LI>Использовать в идентификаторах только символы нижнего регистра</LI>
1193
 
    <LI>Использовать двойные кавычки для идентификаторов в запросах</LI>
1194
 
    </UL>
1195
 
    
1196
 
  </BODY>
1197
 
</HTML>