summaryrefslogtreecommitdiff
path: root/doc/src
diff options
context:
space:
mode:
authorBruce Momjian2005-02-11 04:53:51 +0000
committerBruce Momjian2005-02-11 04:53:51 +0000
commit49c320b19d34e0e8ee5229311631ef827982159f (patch)
tree96cf397db0252011576f283bff83e3117043eefa /doc/src
parent341251f20289a646a04cf3c29cb7017dd5d7d333 (diff)
Update to Russian FAQ, HEAD and 8.0.X.
Diffstat (limited to 'doc/src')
-rw-r--r--doc/src/FAQ/FAQ_russian.html1127
1 files changed, 389 insertions, 738 deletions
diff --git a/doc/src/FAQ/FAQ_russian.html b/doc/src/FAQ/FAQ_russian.html
index c065123f1ce..16f50832dd0 100644
--- a/doc/src/FAQ/FAQ_russian.html
+++ b/doc/src/FAQ/FAQ_russian.html
@@ -12,7 +12,7 @@
<BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" alink="#0000ff">
<H1>Ответы на часто задаваемые вопросы по PostgreSQL</H1>
- <P>Дата последнего обновления: Среда 15 декабря 20:06:34 EST 2004</P>
+ <P>Дата последнего обновления: Среда 2 февраля 12:44:03 EST 2005</P>
<P>Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (<A href=
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
@@ -22,124 +22,101 @@
</P>
<P>Самую свежую английскую версию документа можно найти на
- <A href="http://www.postgresql.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>.</P>
+ <A href="http://www.postgresql.org/files/documentation/faqs/FAQ.html">http://www.PostgreSQL.org/files/documentation/faqs/FAQ.html</A>.</P>
<P>Ответы на вопросы специфичные для конкретных платформ можно найти на
- <A href="http://www.postgresql.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A>.</P>
+ <A href="http://www.postgresql.org/docs/faq/">http://www.PostgreSQL.org/docs/faq/</A>.</P>
<HR>
<H2 align="center">Общие вопросы</H2>
- <A href="#1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название?<BR>
+ <A href="#1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название?<BR>
<A href="#1.2">1.2</A>) Каковы авторские права на PostgreSQL?<BR>
- <A href="#1.3">1.3</A>) На каких Unix платформах работает PostgreSQL?<BR>
- <A href="#1.4">1.4</A>) Существуют ли версии портированные не на Unix системы?<BR>
- <A href="#1.5">1.5</A>) Где можно взять PostgreSQL?<BR>
- <A href="#1.6">1.6</A>) Где получить поддержку?<BR>
+ <A href="#1.3">1.3</A>) На каких платформах работает PostgreSQL?<BR>
+ <A href="#1.4">1.4</A>) Где можно взять PostgreSQL?<BR>
+ <A href="#1.5">1.5</A>) Где получить поддержку?<BR>
+ <A href="#1.6">1.6</A>) Как мне сообщить об ошибке?<BR>
<A href="#1.7">1.7</A>) Какая версия последняя?<BR>
<A href="#1.8">1.8</A>) Какая документация имеется в наличии?<BR>
<A href="#1.9">1.9</A>) Как найти информацию об известных ошибках или отсутствующих
возможностях?<BR>
<A href="#1.10">1.10</A>) Как научиться <SMALL>SQL</SMALL>?<BR>
- <A href="#1.11">1.11</A>) Решена ли в PostgreSQL проблема 2000-го года (Y2K)?<BR>
- <A href="#1.12">1.12</A>) Как присоединится к команде разработчиков?<BR>
- <A href="#1.13">1.13</A>) Как отправить сообщение об ошибке?<BR>
- <A href="#1.14">1.14</A>) Как сравнивать PostgreSQL с другими
+ <A href="#1.11">1.11</A>) Как присоединится к команде разработчиков?<BR>
+ <A href="#1.12">1.12</A>) Как сравнивать PostgreSQL с другими
<SMALL>СУБД</SMALL>?<BR>
- <A href="#1.15">1.15</A>) Как оказать финансовую помощь PostgreSQL?<BR>
-
+
<H2 align="center">Вопросы пользователей по клиентской части</H2>
- <A href="#2.1">2.1</A>) Существуют ли <SMALL>ODBC</SMALL> драйвера для
- PostgreSQL?<BR>
+ <A href="#2.1">2.1</A>) Какие интерфейсы есть для PostgreSQL?<BR>
<A href="#2.2">2.2</A>) Какие инструменты существуют для использования
PostgreSQL через Web?<BR>
<A href="#2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс
пользователя?<BR>
- <A href="#2.4">2.4</A>) Какие языки могут взаимодействовать с
- PostgreSQL?<BR>
<H2 align="center">Вопросы администрирования</H2>
<A href="#3.1">3.1</A>) Как мне установить PostgreSQL в место отличное
от <I>/usr/local/pgsql</I>?<BR>
- <A href="#3.2">3.2</A>) Когда я запускаю <I>postmaster</I>, я получаю
- сообщение <I>Bad System Call</I> или сообщение core dumped. Почему?<BR>
- <A href="#3.3">3.3</A>) Когда я пытаюсь запустить <I>postmaster</I>, я
- получаю ошибки <I>IpcMemoryCreate</I>. Почему?<BR>
- <A href="#3.4">3.4</A>) Когда я пытаюсь запустить <I>postmaster</I>, я
- получаю ошибки <I>IpcSemaphoreCreate</I>. Почему?<BR>
- <A href="#3.5">3.5</A>) Как мне управлять соединениями с других
+ <A href="#3.2">3.2</A>) Как мне управлять соединениями с других
компьютеров?<BR>
- <A href="#3.6">3.6</A>) Какие настройки мне нужно сделать для улучшения
+ <A href="#3.3">3.3</A>) Какие настройки мне нужно сделать для улучшения
производительности?<BR>
- <A href="#3.7">3.7</A>) Какие возможности для отладки есть в наличии?<BR>
- <A href="#3.8">3.8</A>) Почему я получаю сообщение <I>"Sorry, too many
+ <A href="#3.4">3.4</A>) Какие возможности для отладки есть в наличии?<BR>
+ <A href="#3.5">3.5</A>) Почему я получаю сообщение <I>"Sorry, too many
clients"</I> когда пытаюсь подключиться к базе?<BR>
- <A href="#3.9">3.9</A>) Что находится в каталоге <I>pgsql_tmp</I>?<BR>
- <A href="#3.10">3.10</A>) Почему необходимо делать dump и restore при
+ <A href="#3.6">3.6</A>) Почему необходимо делать dump и restore при
обновлении выпусков PostgreSQL?<BR>
- <A href="#3.11">3.11</A>) Какое компьютерное "железо" я должен
+ <A href="#3.7">3.7</A>) Какое компьютерное "железо" я должен
использовать?<BR>
<H2 align="center">Вопросы эксплуатации</H2>
- <A href="#4.1">4.1</A>) В чем отличие между бинарным и нормальным
- курсором?<BR>
- <A href="#4.2">4.2</A>) Как выполнить <SMALL>SELECT</SMALL> только
+ <A href="#4.1">4.1</A>) Как выполнить <SMALL>SELECT</SMALL> только
для нескольких первых строчек запроса? Для произвольной строки?<BR>
- <A href="#4.3">4.3</A>) Как получить список таблиц или других
- компонентов в <I>psql</I>?<BR>
- <A href="#4.4">4.4</A>) Как удалить колонку из таблицы или изменить
- её тип данных?<BR>
- <A href="#4.5">4.5</A>) Каковы максимальные размеры для записей,
- таблиц и базы данных?<BR>
- <A href="#4.6">4.6</A>) Как много дискового пространства в базе данных
+ <A href="#4.2">4.2</A>) Как мне найти какие таблицы, индексы,
+ базы данных и пользователи существуют? Как мне увидеть запросы,
+ которые использует <I>psql</I> для получения этой информации?<BR>
+ <A href="#4.3">4.3</A>) Как изменить тип данных колонки?<BR>
+ <A href="#4.4">4.4</A>) Каковы максимальные размеры для строк в таблице,
+ таблиц и базы данных?<BR>
+ <A href="#4.5">4.5</A>) Как много дискового пространства в базе данных
нужно для сохранения данных из обычного текстового файла?<BR>
- <A href="#4.7">4.7</A>) Как мне убедиться, что существуют нужные мне
- таблицы, индексы, базы данных и пользователи?<BR>
- <A href="#4.8">4.8</A>) У меня медленно работают запросы или не
- происходит использования индексов. Почему?<BR>
- <A href="#4.9">4.9</A>) Как посмотреть на то, как оптимизатор выполняет
+ <A href="#4.6">4.6</A>) Почему мои запросы работают медлено? Почему
+ они не используют мои индексы?<BR>
+ <A href="#4.7">4.7</A>) Как посмотреть на то, как оптимизатор выполняет
мой запрос?<BR>
- <A href="#4.10">4.10</A>) Что такое R-tree индекс?<BR>
- <A href="#4.11">4.11</A>) Что такое Genetic Query Optimizer?<BR>
- <A href="#4.12">4.12</A>) Как мне выполнить поиск регулярного выражения
+ <A href="#4.8">4.8</A>) Как мне выполнить поиск регулярного выражения
и поиск независимый от регистра букв поиск регулярного выражения?
Как мне использовать индекс для поиска независимого от регистра букв?<BR>
- <A href="#4.13">4.13</A>) Как я могу определить, что значение поля равно
+ <A href="#4.9">4.9</A>) Как я могу определить, что значение поля равно
<SMALL>NULL</SMALL> в каком-либо запросе?<BR>
- <A href="#4.14">4.14</A>) Каковы отличия между разными символьными
+ <A href="#4.10">4.10</A>) Каковы отличия между разными символьными
типами?<BR>
- <A href="#4.15.1">4.15.1</A>) Как мне создать поле serial/с-авто-увеличением?<BR>
- <A href="#4.15.2">4.15.2</A>) Как мне получить значение при вставке
+ <A href="#4.11.1">4.11.1</A>) Как мне создать поле serial/с-авто-увеличением?<BR>
+ <A href="#4.11.2">4.11.2</A>) Как мне получить значение при вставке
<SMALL>SERIAL</SMALL>?<BR>
- <A href="#4.15.3">4.15.3</A>) Не может ли получиться так, что
+ <A href="#4.11.3">4.11.3</A>) Не может ли получиться так, что
использование <I>currval()</I> и <I>nextval()</I> приведет к
зациклированию с другими пользователями?<BR>
- <A href="#4.15.4">4.15.4</A>) Почему числа из моей последовательности
+ <A href="#4.11.4">4.11.4</A>) Почему числа из моей последовательности
не используются снова при отмене транзакции? Почему создаются разрывы
при нумерации в колонке, где я использую последовательность/SERIAL?<BR>
- <A href="#4.16">4.16</A>) Что такое <SMALL>OID</SMALL>? Что такое
+ <A href="#4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое
<SMALL>TID</SMALL>?<BR>
- <A href="#4.17">4.17</A>) Что означают некоторые термины используемые в
- PostgreSQL?<BR>
- <A href="#4.18">4.18</A>) Почему я получаю ошибку <I>"ERROR: Memory
+ <A href="#4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory
exhausted in AllocSetAlloc()"</I>?<BR>
- <A href="#4.19">4.19</A>) Как мне узнать, какая версия PostgreSQL
+ <A href="#4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL
запущена?<BR>
- <A href="#4.20">4.20</A>) Почему при работе с моим большим объектом
+ <A href="#4.15">4.15</A>) Почему при работе с моим большим объектом
я получаю ошибку <I>"invalid large obj descriptor"</I>?<BR>
- <A href="#4.21">4.21</A>) Как мне создать колонку которая по умолчанию
+ <A href="#4.16">4.16</A>) Как мне создать колонку которая по умолчанию
будет содержать текущее время?<BR>
- <A href="#4.22">4.22</A>) Почему мои подзапросы, использующие
- <CODE><SMALL>IN</SMALL></CODE> так медленно работаеют?<BR>
- <A href="#4.23">4.23</A>) Как выполнить внешнее связывание?<BR>
- <A href="#4.24">4.24</A>) Как выполнять запросы, использующие несколько
+ <A href="#4.17">4.17</A>) Как выполнить внешнее связывание?<BR>
+ <A href="#4.18">4.18</A>) Как выполнять запросы, использующие несколько
баз данных?<BR>
- <A href="#4.25">4.25</A>) Как мне вернуть из функции несколько записей?<BR>
- <A href="#4.26">4.26</A>) Почему я не могу надежно создавать/удалять
+ <A href="#4.19">4.19</A>) Как мне вернуть из функции несколько строк таблицы?<BR>
+ <A href="#4.20">4.20</A>) Почему я не могу надежно создавать/удалять
временные таблицы в функциях PL/PgSQL?<BR>
- <A href="#4.27">4.27</A>) Какие опции шифрования существуют?<BR>
+ <A href="#4.21">4.21</A>) Какие опции шифрования существуют?<BR>
<H2 align="center">Расширения PostgreSQL</H2>
<A href="#5.1">5.1</A>) Я написал функцию определяемую пользователем.
@@ -147,7 +124,7 @@
<A href="#5.2">5.2</A>) Как я могу внести некоторые классные новые
типы и функции в PostgreSQL?<BR>
<A href="#5.3">5.3</A>) Как мне написать C функцию, возвращающую
- запись?<BR>
+ строку таблицы?<BR>
<A href="#5.4">5.4</A>) Я изменил исходный файл. Почему после
перекомпиляции я не вижу изменений?<BR>
@@ -157,50 +134,35 @@
<H4><A name="1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название?</H4>
- <P>PostgreSQL произносится <I>Post-Gres-Q-L (Пост-Грес-Кью-Эл)</I>.
- По адресу http://www.postgresql.org/postgresql.mp3 доступен звуковой
- файл с примером как это нужно произносить.</P>
-
- <P>PostgreSQL - это расширение СУБД POSTGRES (и поэтому иногда
- говорят просто "Postgres"), исследовательский
- прототип нового поколения <SMALL>СУБД</SMALL>.
- PostgreSQL одновременно сохраняет мощную модель данных и общирное
- количество типов POSTGRES, и замещает язык запросов PostQuel на
- расширенное подмножество <SMALL>SQL</SMALL>. PostgreSQL - это
- свободное и полностью открытое программное обеспечение.</P>
-
- <P>Разработку PostgreSQL выполняет команда разработчиков, все участники
- которой подписаны на список рассылки разработчиков. В настоящее время,
- их координатором является Марк Фурнье (Marc G. Fournier) (<A href=
- "mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A>). (См.
- секцию <A href="#1.6">1.6</A> о том, как подключиться к разработке).
- Эта команда теперь отвечает за всю разработку PostgreSQL. Данный
- проект является общественным и не управляется какой-либо компанией.
- Подробности смотрите в FAQ для разработчиков,
- <A href="http://www.postgresql.org/docs/faqs/FAQ_DEV.html">http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html</A>
- </P>
+ <P>PostgreSQL произносится <I>Post-Gres-Q-L (Пост-Грес-Кью-Эл)</I>,
+ также часто говорят просто <I>Postgres</I>.</P>
- <P>Авторами PostgreSQL 1.01 являются Эндрю Ю (Andrew Yu) и Джоли Чен
- (Jolly Chen). Многие другие внесли свой вклад в перенос на другие
- платформы, тестирование, отладку и расширение этого кода. Первоначальный
- код Postgres, из которого появился PostgreSQL, был итогом усилий многих
- академических студентов, неакадемических студентов и множества
- разных программистов, работавших под руководством профессора
- Майкла Стоунбрейкера (Michael Stonebraker) в Калифорнийском университете,
- Беркли.</P>
+ <P>PostgreSQL - это объектно-реляционная система управления базами
+ данных (СУБД), которая имеет традиционные возможности коммерческих
+ <small>СУБД</small> с расширениями, которые есть в <small>СУБД</small>
+ нового поколения. PostgreSQL - это свободное и полностью открытое
+ программное обеспечение.</P>
- <P>Первоначальное имя, данное в Беркли, было Postgres. Когда
- в 1995 году была добавлена функциональность <SMALL>SQL</SMALL>,
- это имя было изменено на Postgres95. Но и это имя было изменено
- в конце 1996 на PostgreSQL.</P>
+ <P>Разработку PostgreSQL выполняет команда разработчиков, разбросанная
+ по всему миру и связанная через Интернет. Разработка является
+ общественным проектом и не управляется какой-либо компанией.
+ Подробности смотрите в FAQ для разработчиков,
+ <A href="http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">
+ http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html</A>
+ </P>
<H4><A name="1.2">1.2</A>) Каковы авторские права на PostgreSQL?</H4>
- <P>PostgreSQL попадает под действие следующего COPYRIGHT:</P>
+ <P>PostgreSQL распространяется по классической лицензии BSD. Эта
+ лицензия не содержит ограничений на то, как будет использоваться
+ исходный код. Нам нравится эта лицензия и у нас нет намерений её
+ менять.</P>
+
+ <P>Вот эта лицензия BSD, которую мы используем:</P>
<P>Система Управления Базами Данных PostgreSQL</P>
- <P>Portions copyright (c) 1996-2004, PostgreSQL Global Development
+ <P>Portions copyright (c) 1996-2005, PostgreSQL Global Development
Group Portions Copyright (c) 1994-6 Regents of the University of
California</P>
@@ -225,21 +187,13 @@
"КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ
СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.</P>
- <P>Вышеизложенное является BSD лицензией, классической лицензией
- программного обеспечения с открытым кодом. Эта лицензия не накладывает
- ограничений на использование исходного кода. Нам нравится эта лицензия
- и мы не собираемся её менять.</P>
-
- <H4><A name="1.3">1.3</A>) На каких Unix платформах работает PostgreSQL?</H4>
+ <H4><A name="1.3">1.3</A>) На каких платформах работает PostgreSQL?</H4>
<P>Обычно, PostgreSQL может работать на любой современной платформе
совместимой с Unix. В инструкции по установке, вы найдете список
тех платформ, на которых были проведены тестовые запуски PostgreSQL
к моменту выхода данной версии.</P>
- <H4><A name="1.4">1.4</A>) Существуют ли версии перенесенные не на Unix
- системы?</H4>
-
<P>Начиная с версии 8.0, PostgreSQL без всяких ухищрений работает на
операционных системах Microsoft Windows, основанных на NT, таких как
Win2000, WinXP и Win2003. Пакет инсталлятора доступен по адресу
@@ -249,69 +203,30 @@
PostgreSQL с помощью Cygwin.</P>
<P>Также существует версия спортированная под Novell Netware 6 на
- <a href="http://forge.novell.com/">http://forge.novell.com</a>.</P>
+ <A href="http://forge.novell.com/">http://forge.novell.com</A>,
+ и версия для OS/2 (eComStation) на
+ <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">
+ 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>
- <H4><A name="1.5">1.5</A>) Где можно взять PostgreSQL?</H4>
+ <H4><A name="1.4">1.4</A>) Где можно взять PostgreSQL?</H4>
<P>Например, воспользовавшись анонимным доступом на ftp сайт
PostgreSQL <A href=
"ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
Список зеркал вы найдете на нашем основном сайте.</P>
- <H4><A name="1.6">1.6</A>) Где получить поддержку?</H4>
+ <H4><A name="1.5">1.5</A>) Где получить поддержку?</H4>
- <P>Основной список рассылки: <A href=
- "mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>.
- В нем можно обсуждать любые темы, касающиеся PostgreSQL. Чтобы
- подписаться, отправьте письмо по электронной почте, в котором в
- теле письма (не в теме) напишите следующие строки:</P>
-<PRE>
- subscribe
- end
-</PRE>
-
- <P>на адрес <A href=
- "mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P>
-
- <P>Существует дайжест список. Чтобы подписаться на него, отправьте
- письмо по электронной почте на адрес: <A href=
- "mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A>
- и в теле письма напишите строчки строчки:</P>
-<PRE>
- subscribe
- end
-</PRE>
- Дайжесты отправляются подписчикам, когда в основном списке рассылки
- накопится около 30 килобайт сообщений.
-
- <P>Доступен и список рассылки сообщений об ошибках. Чтобы подписаться на этот
- список, отправьте по электронной почте письмо на адрес <A href=
- "mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A>
- и в теле письма напишите строчки строчки:</P>
-<PRE>
- subscribe
- end
-</PRE>
- Также имеется список рассылки с дискуссиями разработчиков. Чтобы подписаться
- на этот список, отправьте по электронной почте письмо на адрес
- <A href=
- "mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>
- и в теле письма напишите строчки строчки:
-<PRE>
- subscribe
- end
-</PRE>
-
- <P>Дополнительные списки рассылки и инфомацию о PostgreSQL можно найти
- на домашней страничке PostgreSQL по адресу:</P>
-
- <BLOCKQUOTE>
- <A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A>
- </BLOCKQUOTE>
+ <P>Сообщество PostgreSQL предоставляет помощь множеству пользователей
+ через E-mail. Основной web-сайт для подписки на списки рассылки по
+ E-mail это: <A href="http://www.postgresql.org/community/lists/">
+ http://www.postgresql.org/community/lists/</A>. Хорошим местом для
+ того, чтобы начать задавать вопросы являются списки <i>general</i>
+ (общие вопросы) или <i>bugs</i> (ошибки).</P>
<P>Главным IRC каналом является <I>#postgreql</I>,
расположенный на сервере Freenode (<I>irc.freenode.net</I>). Чтобы
- подключиться, вы можете использовать команду Unix
+ подключиться, вы можете использовать в Unix вызов программы
<code>irc -c '#postgresql' "$USER" irc.freenode.net</code> или
любой другой IRC клиент. На этом же сервере существуют каналы на
испанском (<I>#postgresql-es</I>) и французском (<I>#postgresqlfr</I>)
@@ -320,19 +235,32 @@
<P>Список коммерческой поддержки компаний доступен на
<A href="http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P>
+
+ <H4><A name="1.6">1.6</A>) Как мне сообщить об ошибке?</H3>
+
+ <P>Посетите страничку со специальной формой отчёта об ошибке в
+ PostgreSQL по адресу:
+ <A HREF="http://www.postgresql.org/support/submitbug">
+ http://www.postgresql.org/support/submitbug</A>.</P>
+
+ <P>Также проверьте наличие более свежей версии PostgreSQL на нашем
+ FTP сайте <A href="ftp://ftp.postgresql.org/pub">
+ ftp://ftp.PostgreSQL.org/pub</A>.
+
+
<H4><A name="1.7">1.7</A>) Какая последняя версия?</H4>
- <P>Последний выпуск PostgreSQL - это версия 7.4.6</P>
+ <P>Последний выпуск PostgreSQL - это версия 8.0.1</P>
- <P>Мы планируем выпускать новые версии каждые 6-8 месяцев.</P>
+ <P>Мы планируем выпускать новые версии каждые 10-12 месяцев.</P>
<H4><A name="1.8">1.8</A>) Какая документация имеется в наличии?</H4>
- <P>В дистрибутив включаются различные руководства, страницы
- электронного руководства man и некоторые маленькие тестовые примеры.
- Смотрите в каталог <I>/doc</I>. Вы также можете просматривать
- документацию в Интернет по адресу
- <A href="http://www.postgresql.org/docs">http://www.PostgreSQL.org/docs</A>.</P>
+ <P>PostgreSQL содержит много документации, включая большое руководство,
+ страницы электронного руководства man и некоторые маленькие тестовые
+ примеры. Смотрите в каталог <I>/doc</I>. Вы также можете просматривать
+ документацию в Интернет по адресу <A href="http://www.postgresql.org/docs">
+ http://www.PostgreSQL.org/docs</A>.</P>
<P>Существует две книги по PostgreSQL доступные по адресам <A href=
"http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
@@ -342,9 +270,9 @@
Кроме того, по адресу <a href="http://techdocs.postgresql.org">http://techdocs.PostgreSQL.org/</a>
вы можете найти коллекцию технических статей посвященных PostgreSQL.</p>
-
- <P><I>psql</I> имеет несколько прекрасных команд \d для отображения
- информации по типам, операторам, функциям, агрегатам и т.д.</P>
+ <P>Клиент командной строки <I>psql</I> имеет несколько команд \d для
+ отображения информации по типам, операторам, функциям, агрегатам и т.д. -
+ используйте \? для получения списка доступных команд.</P>
<P>Наш сайт содержит еще больше информации.</P>
@@ -381,15 +309,11 @@
Bowman, Judith S., et al., Addison-Wesley. Другим нравится <I>The
Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
- <H4><A name="1.11">1.11</A>) Решена ли в PostgreSQL проблема 2000-го года (Y2K)?</H4>
-
- <P>Да, мы легко работаем с датами после 2000 года и перед 2000 годом.</P>
-
- <H4><A name="1.12">1.12</A>) Как присоединится к команде разработчиков?</H4>
+ <H4><A name="1.11">1.11</A>) Как присоединится к команде разработчиков?</H4>
<P>Для начала, скачайте последнюю версию исходных текстов и прочтите
- документацию разработчиков PostgreSQL на нашем сайте или в дистрибутиве.
- Затем, подпишитесь на списки рассылки <I>pgsql-hackers</I> и
+ FAQ и документацию для разработчиков PostgreSQL на нашем сайте или в
+ дистрибутиве. Затем, подпишитесь на списки рассылки <I>pgsql-hackers</I> и
<I>pgsql-patches</I>. Далее, отправляйте исправления (patches) высокого
качества в список pgsql-patches.</P>
@@ -400,16 +324,7 @@
превилегии вносить изменения, и мы уверены, что те исправления, которые
они внесут будут высокого качества.</P>
- <H4><A name="1.13">1.13</A>) Как отправить сообщение об ошибке??</H4>
-
- <P>Заполните форму об ошибке в PostgreSQL, которая расположена на
- <A href="http://www.postgresql.org/bugform.html">http://www.postgresql.org/bugform.html</A>.</P>
-
- <P>Также не забудьте посмотреть на <A href=
- "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>
- на предмет более свежих версий PostgreSQL или заплат.</P>
-
- <H4><A name="1.14">1.14</A>) Как сравнивать PostgreSQL с другими
+ <H4><A name="1.12">1.12</A>) Как сравнивать PostgreSQL с другими
<SMALL>СУБД</SMALL>?</H4>
<P>
@@ -431,24 +346,16 @@
<DT><B>Производительность</B></DT>
- <DD>PostgreSQL имеет производительность сходную с другими коммерческими
- СУБД и с СУБД с открытым исходным кодом, в каких-то аспектах работая
- быстрее чем они, в каких-то медленее. В сравнении с MySQL или обыденнее
- СУБД, мы быстрее, когда пользователей много, а также на комплексных
- запросах и чтении/записи загрузки запроса. MySQL быстрее для простых
+ <DD>Производительность PostgreSQL сходна с другими коммерческими
+ СУБД и с СУБД с открытым исходным кодом. В каких-то вещах мы быстрее,
+ в каких-то медленнее. В сравнении с MySQL или линейной
+ СУБД, мы быстрее, когда пользователей много, а также на сложных
+ запросах и при чтении/записи загрузки запроса. MySQL быстрее для простых
SELECT запросов, выполняемых небольшим количеством пользователей.
И разумеется, MySQL не имеет каких-либо возможностей из
перечисленых выше, в секции <I>Возможности</I>.
Мы делаем упор на надежность и расширенные возможности, но мы также
- продолжаем увеличивать производительность с каждым выпуском. Существует
- интересная страничка в Интернет, сравнивающая PostgreSQL и MySQL на
- <A href="http://openacs.org/philosophy/why-not-mysql.html">
- http://openacs.org/philosophy/why-not-mysql.html</A>. Также, MySQL -
- это компания, которая распространяет свой продукт через открытые
- исходные тексты и требует коммерческую лицензию на закрытое
- программное обеспечение, а не сообщество разработчиков с открытыми
- исходными текстами, как PostgreSQL.<BR>
-
+ продолжаем увеличивать производительность с каждым выпуском. <BR>
<BR>
</DD>
@@ -475,7 +382,7 @@
пользователей, руководствам и исходным текстам часто делают поддержку
PostgreSQL превосходящей другие <SMALL>СУБД</SMALL>. Существует
коммерческая поддержка по результам возникших инцидентов, которая
- доступна для тех кому она нужна. (Смотрите <A href="#1.6">Секцию 1.6</A>.)<BR>
+ доступна для тех кому она нужна. (Смотрите <A href="#1.5">Секцию 1.5</A>.)<BR>
<BR>
</DD>
@@ -489,57 +396,23 @@
</DD>
</DL>
- <H4><A name="1.15">1.15</A>) Как оказать финансовую помощь
- PostgreSQL?</H4>
-
- <P>PostgreSQL имеет одноранговую инфраструктуру с того самого времени
- как мы начали разработку в 1996 году. Мы должны благодарить за
- это Марка Фурнье (Marc Fournier), который создал эту инфраструктуру и
- управляет ей на протяжении этих лет.</P>
-
- <P>Качественная инфраструктура очень важна для проектов с открытым
- исходным кодом. Она предотвращает расколы, которые могут сильно
- задержать поступательное движение проекта.</P>
-
- <P>Разумеется, эта инфраструктура не является дешевой. Существует
- некоторое количество ежемесячных и одноразовых расходов, которые
- требуют денег. Если вы или ваша компания имеет деньги, которые
- можно передать в помощь нашим усилиям, пожалуйста посетите страничку
- <A href="https://store.pgsql.com/shopping/">
- https://store.pgsql.com/shopping/</A>
- и сделайте свой вклад.</P>
-
- <P>Хотя на страничке говорится о PostgreSQL, Inc, пункт
- "contributions" предназначен исключительно для поддержки проекта
- PostgreSQL и не передается какой-либо конкретной компании.
- Если хотите, то можете это проверить, написав письмо на контактный адрес.</P>
- <HR>
- <p>Если у вас есть истории по успешному применению PostgreSQL, пожалуйста,
- присылайте их на наш сайт пропаганды <a href="http://advocacy.postgresql.org/">
- http://advocacy.postgresql.org</a>.</p>
<H2 align="center">Вопросы пользователей по клиентской части</H2>
- <H4><A name="2.1">2.1</A>) Существуют ли <SMALL>ODBC</SMALL> драйвера
- для PostgreSQL?</H4>
-
- <P>Существует два <SMALL>ODBC</SMALL> драйвера, PsqlODBC
- и OpenLink <SMALL>ODBC</SMALL>.</P>
+ <H4><A name="2.1">2.1</A>) Какие интерфейсы есть для PostgreSQL?</H4>
- <P>Вы можете скачать PsqlODBC с <A href="http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">
- http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A>.</P>
-
- <P>OpenLink <SMALL>ODBC</SMALL> можно взять на <A href=
- "http://www.openlinksw.com/">http://www.openlinksw.com</A>. Этот
- драйвер работает с их стандартным клиентским программным обеспечением,
- использующим <SMALL>ODBC</SMALL>, и таким образом, <SMALL>ODBC</SMALL>
- драйверы для PostgreSQL доступны для каждой из поддерживаемых ими
- платформ (Win, Mac, Unix, VMS).</P>
+ <P>Установка PostgreSQL включает только <small>C</small> и встроенный
+ (embedded) <small>C</small> интерфейсы. Все другие интерфейсы
+ являются независимыми проектами и загружаются отдельно; самостоятельность
+ проектов позволяет им организовать собственное расписание выпусков
+ новых версий и иметь собственную команду разработчиков.</P>
+
+ <P>Некоторые языки программирования, такие как <small>PHP</small>
+ включают в себя интерфейс к PostgreSQL. Интерфейсы для таких языков
+ как Perl, <small>TCL</small>, Python и многих других, доступны на
+ <A href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
+ в секции <i>Drivers/Interfaces</I>, а также через поиск в Интернет.</P>
- <P>Возможно они будут продавать свой продукт тем кому нужна коммерческая
- поддержка, но бесплатная версия всегда будет доступна. Пожалуйста,
- направляйте вопросы на адрес <A href=
- "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>
<H4><A name="2.2">2.2</A>) Какие инструменты существуют для использования
PostgreSQL через Web?</H4>
@@ -547,49 +420,25 @@
<P>Прекрасное введение во взаимодействие баз данных и Web можно найти на:
<A href="http://www.webreview.com">http://www.webreview.com</A></P>
- <P>Для интеграции с Web, одним из превосходных инструментов является PHP.
- Домашняя станичка <A href="http://www.php.net">http://www.php.net</A>.</P>
+ <P>Для интеграции с Web, PHP <A href="http://www.php.net">
+ http://www.php.net</A> является неплохим интерфейсом.</P>
- <P>Для комплексных решений, многие пользуются Perl интерфейсом и CGI.pm или mod_perl.</P>
+ <P>В сложных случаях, многие пользуются Perl и CGI.pm или mod_perl.</P>
<H4><A name="2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс
пользователя?</H4>
<P>Да, существует несколько графических интерфейсов для PostgreSQL.
- Это PgAccess (<A href="http://www.pgaccess.org/">http://www.pgaccess.org</A>),
- PgAdmin III (<A href="http://www.pgadmin.org/">http://www.pgadmin.org</A>),
+ Они включают PgAdmin III (<A href="http://www.pgadmin.org/">http://www.pgadmin.org</A>),
+ PgAccess (<A href="http://www.pgaccess.org/">http://www.pgaccess.org</A>),
RHDB Admin (<A href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/</A>),
- TORA (<A href="http://www.globecom.net/tora/">http://www.globecom.net/tora/
- (частично коммерческое ПО)</A>
- и Rekall (<A href="http://www.thekompany.com/products/rekall/">
- http://www.thekompany.com/products/rekall/</A>, коммерческий). Также есть
+ TORA (<A href="http://www.globecom.net/tora/">http://www.globecom.net/tora/</A>
+ частично коммерческое ПО)
+ и Rekall (<A href="http://www.rekallrevealed.org/">
+ http://www.rekallrevealed.org/</A>). Также есть
PhpPgAdmin (<A href="http://phppgadmin.sourceforge.net/">
- http://phppgadmin.sourceforge.net/</A>) - интерфейс к PostgreSQL, основанный
- на Web.</P>
-
- <H4><A name="2.4">2.4</A>) Какие языки могут взаимодействовать с PostgreSQL?</H4>
-
- <P>Какие-либо интерфейсы для PostgreSQL существуют для большинства
- популярных языков программирования. Посмотрите список модулей расширения
- для тех языков программирования, которыми вы пользуетесь.</P>
-
- <P>Следующие интерфейсы включаются в дистрибутив PostgreSQL:</P>
- <UL>
- <LI>C (libpq)</LI>
-
- <LI>Embedded C (ecpg)</LI>
-
- <LI>Java (jdbc)</LI>
-
- <LI>Python (PyGreSQL)</LI>
-
- <LI>TCL (libpgtcl)</LI>
-
- </UL>
- <P>Дополнительные интерфейсы доступны по адресу
- <A href="http://gborg.postgresql.org/">http://gborg.PostgreSQL.org</a>
- в секции <i>Drivers/Interfaces</i>.
- </P>
+ http://phppgadmin.sourceforge.net/</A>) - интерфейс к PostgreSQL,
+ основанный на Web.</P>
<HR>
<H2 align="center">Вопросы администрирования</H2>
@@ -599,144 +448,100 @@
<P>Задайте опцию <I>--prefix</I> когда запускаете <I>configure</I>.</P>
- <H4><A name="3.2">3.2</A>) Когда я запускаю <I>postmaster</I>, я получаю
- сообщение <I>Bad System Call</I> или сообщение core dumped. Почему?</H4>
-
- <P>Это может быть вызвано разными проблемами, но первое, что
- нужно сделать - это убедиться в том, что в вашем ядре установлено
- расширение System V. PostgreSQL требует, чтобы ядро поддерживало
- разделяемую память и семафоры.</P>
-
- <H4><A name="3.3">3.3</A>) Когда я пытаюсь запустить <I>postmaster</I>, я
- получаю ошибки <I>IpcMemoryCreate</I>. Почему?</H4>
-
- <P>Либо у вас в ядре неправильные настройки разделяемой памяти, либо
- вашему ядру нужно большее количество доступной разделяемой памяти.
- Те конкретные действия, которые вам нужно произвести зависят от
- архитектуры вашей машины и от того как много буферов и backend
- процессов вы настроили для <I>postmaster</I>. Для большинства систем,
- с количеством буферов и процессов по умолчанию, необходимый минимум -
- это около 1 мегабайта. Подробности о разделяемой памяти и семафорах
- смотрите в <A href=
- "http://www.postgresql.org/docs/current/static/kernel-resources.html">Руководстве
- администратора PostgreSQL.</A>.</P>
-
- <H4><A name="3.4">3.4</A>) Когда я пытаюсь запустить <I>postmaster</I>, я
- получаю ошибки <I>IpcSemaphoreCreate</I>. Почему?</H4>
-
- <P>Если это сообщение <I>IpcSemaphoreCreate: semget failed (No
- space left on device)</I> то настройки вашего ядра таковы, что ему не
- хватает семафоров. Postgres требует один семафор на потенциальный
- backend процесс. Временным решением является запуск <I>postmaster</I>
- с настройками на мешьшее количество backend процессов. Используйте
- <I>-N</I> с значением меньшим чем 32, которое принято по умолчанию.
- Более правильное решение - это увеличить значения <SMALL>SEMMNS</SMALL>
- и <SMALL>SEMMNI</SMALL> в настрйках ядра.</P>
-
- <P>Неисправные семафоры также могут привести к падению СУБД во время
- доступа к базе данных.</P>
-
- <P>Если вы получили какое-либо другое сообщение об ошибке, то вполне
- возможно, что в вашем ядре вообще не настроена поддержка семафоров.
- Смотрите подробности о разделяемой памяти и семафорах в Руководстве
- Администратора PostgreSQL.</P>
-
- <H4><A name="3.5">3.5</A>) Как мне управлять соединениями с других
+ <H4><A name="3.2">3.2</A>) Как мне управлять соединениями с других
компьютеров?</H4>
<P>По умолчанию, PostgreSQL разрешает только соединения на локальной
- машине через сокеты домена Unix или TCP/IP соединения. Другие машины
- не смогут подключиться к базе пока вы не измените listen_addresses в
- postgresql.conf <B>и</B> пока не будет разрешена host-авторизация в файле
- <I>$PGDATA/pg_hba.conf</I>.</P>
+ машине через сокеты домена Unix или TCP/IP соединения. Для того, чтобы
+ другие машины смогли подключиться к базе вы должны изменить
+ <I>listen_addresses</I> в <I>postgresql.conf</I>, разрешить
+ host-авторизация в файле <I>$PGDATA/pg_hba.conf</I> и перестартовать
+ сервер.</P>
- <H4><A name="3.6">3.6</A>) Какие настройки мне нужно сделать для улучшения
+ <H4><A name="3.3">3.3</A>) Какие настройки мне нужно сделать для улучшения
производительности?</H4>
- <P>Несомненно, индексы могут увеличить скорость выполнения запросов. Команда
- <SMALL>EXPLAIN ANALYZE</SMALL> позволяет вам посмотреть как PostgreSQL
- интерпретирует ваш запрос и какие индексы используются.</P>
-
- <P>Если вы выполняете много операторов <SMALL>INSERT</SMALL>,
- рассмотрите возможность выполнять их в большой пачке, используя
- команду <SMALL>COPY</SMALL>. Это значительно быстрее, чем отдельные
- <SMALL>INSERT</SMALL>. Во-вторых, операторы вне блока транзакции
- <SMALL>BEGIN WORK/COMMIT</SMALL> сами выполняют транзакцию. Подумайте
- над выполнением нескольких операторов в одном блоке транзакции.
- Это уменьшит количество транзакций. Также, задумайтесь над удалением
- и пересозданием индексов, когда вы выполняете большие изменения
- данных.</P>
-
- <P>Существует несколько опций настройки в
- <A href="http://www.postgresql.org/docs/current/static/runtime.html">
- Руководстве Администратора PostgreSQL</A>. Вы можете запретить
- <I>fsync()</I> при старте <I>postmaster</I> с опцией <I>-o -F</I>.
- Это предотвратит вызовы <I>fsync()</I>, которые приводят к сбросу
- данных на диск после каждой транзакции.</P>
-
- <P>Вы можете также использовать опцию <I>shared_buffers</I> <I>-B</I>
- для увеличения количества буферов разделяемой памяти, которая
- используется backend процессами. Если вы сделаете значение этого параметра
- слишком большим, то <I>postmaster</I> может не запустится потому что
- вы исчерпаете ограничение ядра на объем разделяемой памяти. Каждый
- буфер имеет размер в 8 килобайт и по умолчанию выделяется 1000 буферов.</P>
-
- <P>Вы можете также использовать backend опции <I>sort_mem</I> и
- <I>work_mem</I> для увеличения максимального количества памяти, которое
- используется backend процессом для временных сортировок. Значение по
- умолчанию составляет 1024 (т.е. 1MB).</P>
-
- <P>Вы также можете использовать команду <SMALL>CLUSTER</SMALL> для
- группировки данных в таблицах на совпадающий индекс. Подробности смотрите
- на странице руководства по команде <SMALL>CLUSTER</SMALL>.</P>
-
- <H4><A name="3.7">3.7</A>) Какие возможности для отладки есть в
- наличии?</H4>
-
- <P>PostgreSQL имеет несколько возможностей, позволяющие получить
- информацию о состоянии, которая может быть использована в отладочных
- целях.</P>
+ <P>Существует три главных области, которые потенциально могут
+ увеличить производительность:</P>
+
+ <DL>
+ <DT><B>Изменение запроса</B></DT>
+ <DD>Это означает модификацию запросов для получения лучшей
+ производительности:
+ <UL>
+ <LI>Создание индексов, включая индексы выражений и частичные индексы</LI>
+ <LI>Использование COPY вместо множества <small>INSERT</small></LI>
+ <LI>Группировка нескольких операторов в единую транзакцию для
+ уменьшения нагрузки при выполнении завершения транзакции</LI>
+ <LI>Использование <small>CLUSTER</small>, когда из индекса берётся
+ множество строк</LI>
+ <LI>Использование <small>LIMIT</small> для того, чтобы возвращалась
+ только часть вывода от запроса</LI>
+ <LI>Использование Подготовленных (Prepared) запросов</LI>
+ <LI>Использование <small>ANALYZE</small> для обслуживания статистики
+ оптимизатора</LI>
+ <LI>Регулярное использование <small>VACUUM</small> или <I>pg_autovacuum</I></LI>
+ <LI>Удаление индексов во время больших изменений данных</LI>
+ </UL>
+ <BR><BR>
+ </DD>
- <P>Во-первых, при запуске <I>configure</I> с опцией --enable-cassert,
- многие вызовы <I>assert()</I> позволяют отслеживать работу backend
- процесса и остановку программы при возникновении каких-либо
- неожиданностей.</P>
+ <DT><B>Настройка сервера</B></DT>
+
+ <DD>Некоторые установки в <I>postgresql.conf</I> влияют на
+ производительность. Подробный полный список установок см. в
+ <A href="http://www.postgresql.org/docs/current/static/runtime.html">
+ Administration Guide/Server Run-time Environment/Run-time Configuration</A>,
+ а комментарии см. в <A href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">
+ http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</A>
+ и <A href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">
+ http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</A>.
+ <BR><BR>
+ </DD>
+
+ <DT><B>Выбор "железа" - аппаратного обеспечения</B></DT>
+
+ <DD>Влияние "железа" на производительность подробно описано в
+ <A href="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html">
+ http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html</A> и
+ <A href="http://www.powerpostgresql.com/PerfList/">
+ http://www.powerpostgresql.com/PerfList/</A>.
+ <BR><BR>
+ </DD>
+ </DL>
- <P>И <I>postmaster</I>, и <I>postgres</I> имеют несколько отладочных
- опций. Во-первых, при запуске <I>postmaster</I>, убедитесь, что
- стандартный вывод и вывод ошибок осуществляются в файл журнала:</P>
-<PRE>
- cd /usr/local/pgsql
- ./bin/postmaster &gt;server.log 2&gt;&amp;1 &amp;
-</PRE>
+ <H4><A name="3.4">3.4</A>) Какие возможности для отладки есть в
+ наличии?</H4>
- <P>Это приведет к появлению файла server.log в главном каталоге
- PostgreSQL. Этот файл содержит полезную информацию о проблемах или
- ошибках, возникших на сервере. <I>Postmaster</I> имеет опцию <I>-d</I>,
- которая позволяет получать при протоколировании более детальную
- инфрмацию. Для опции <I>-d</I> указывается число, которое задает уровень
- отладки. Будьте осторожны, так как высокий уровень отладки приводит
- к генерации файлов журнала большого размера.</P>
+ <P>Есть множество установок в настройках сервера, начинающихся
+ на <code>log_*</code>, позволяющих протоколировать запросы
+ и статистику работы процесса, которая очень полезна для отладки
+ и измерения производительности.</P>
+
+ <P><B>Для предоставления более детальной информации разработчикам
+ сервера при отладке какой-либо проблемы должны пользоваться
+ следующие инструкции.</B></P>
+
+ <P>Таким же образом можно производить и отладку севера, если он
+ работает неправильно. Во-первых, при запуске <I>configure</I> с
+ опцией --enable-cassert, многие вызовы <I>assert()</I> позволяют
+ отслеживать работу backend процесса и остановку программы при
+ возникновении каких-либо неожиданностей.</P>
<P>Если <I>postmaster</I> не запущен, вы можете запустить
<I>postgres</I> backend из командной строки и ввести ваш оператор
<SMALL>SQL</SMALL> напрямую. Это рекомендуется <B>только</B> для
целей отладки. Заметим, что в этом режиме, запрос завершается символом
новой строки, а не точкой с запятой. Если вы производили компиляцию
- с отладочными символоами, вы можете использовать любой отладчик, чтобы
+ с отладочными символами, вы можете использовать любой отладчик, чтобы
посмотреть, что случилось. Поскольку backend запускается не из
<I>postmaster</I>, он не запускается в идентичном окружении и значит
проблемы итераций блокировок/backend не могут быть воспроизведены.</P>
<P>Если <I>postmaster</I> запущен, запустите <I>psql</I> в одном
окне, затем найдите <SMALL>PID</SMALL> процесса <I>postgres</I>,
- используемый <I>psql</I>, используя </P>
-
- <PRE>
- SELECT pg_backend_pid()
- </PRE>
-
- <P>Используйте отдадчик для подключения к <I>postgres</I> <SMALL>PID</SMALL>.
+ используемый <I>psql</I>, используя <CODE>SELECT pg_backend_pid()</CODE>.
+ Используйте отладчик для подключения к <I>postgres</I> <SMALL>PID</SMALL>.
Вы можете установить точки прерывания в отладчике и запустить запрос
из <I>psql</I>. Если
вы производите отладку запуска <I>postgres</I>, вы можете установить
@@ -745,10 +550,6 @@
вы можете подключить к процессу отладчик, установить любые точки
прерывания и продолжить запуск.</P>
- <P>Программа <I>postgres</I> имеет опции <I>-s, -A</I>, и <I>-t</I>
- которые могут быть очень полезными для отладки и измерения
- производительности.</P>
-
<P>Вы также можете скомпилировать PostgreSQL с профилированием для
того, чтобы увидеть какие функции сколько времени выполняются.
Файлы профилирования backend'а находятся в каталоге
@@ -756,51 +557,23 @@
будет помещен в текущий каталог клиента. В Linux для выполнения
профилирования требуется компиляции с <I>-DLINUX_PROFILE</I>.</P>
- <H4><A name="3.8">3.8</A>) Почему я получаю сообщение <I>"Sorry, too
+ <H4><A name="3.5">3.5</A>) Почему я получаю сообщение <I>"Sorry, too
many clients"</I> когда пытаюсь подключиться к базе?</H4>
- <P>Вам нужно увеличить ограничение на количество конкуретных
- backend процессов при запуске <I>postmaster</I>.</P>
-
- <P>По умолчанию установлен лимит на 32 процесса. Вы можете
- увеличить этот лимит перезапустив <I>postmaster</I> с нужным
- значением процессов, которое указывается в опции <I>-N</I> или
- изменив файл <I>postgresql.conf</I>.</P>
-
- <P>Заметим, что если вы зададите в опции <I>-N</I> значение больше
- 32, то вы также должны увеличить значение в опции <I>-B</I> которое
- по умолчанию установлено в 64; Значение опции <I>-B</I> должно быть
- по крайней мере вдвое больше значения опции <I>-N</I>, и возможно
- ещё больше для лучшей производительности. Для большего количества
- backend процессов, вам также неплохо было бы увеличить некоторые
- параметры ядра Unix. Это такие параметры, как максимальное количество
- блоков разделяемой памяти, <SMALL>SHMMAX;</SMALL> максимальное количество
- семафоров, <SMALL>SEMMNS</SMALL> и <SMALL>SEMMNI;</SMALL> максимальное
- количество процессов, <SMALL>NPROC;</SMALL> максимальное количество
- процессов на пользователя, <SMALL>MAXUPRC;</SMALL> и максимальное
- количество открытых файлов, <SMALL>NFILE</SMALL> и <SMALL>NINODE</SMALL>.
- Причина создания ограничения на количество backend процессов как
- раз и состоит в том, чтобы вашей системе хватило ресурсов.</P>
-
- <H4><A name="3.9">3.9</A>) Что находится в каталоге <I>pgsql_tmp</I>?</H4>
-
- <P>Данный каталог содержит временные файлы, генерируемые обработчиком
- запроса. Например, если для выполнения <small>ORDER BY</small> нужна
- сортировка и эта сортировка требует памяти больше, чем допускает параметр <i>-S</i>
- у backend'а, то для хранения дополнительных данных создаются временные
- файлы.</P>
-
- <P>Эти временные файлы должны удаляться автоматически, но этого может не
- произойти, если backend рухнул во время сортировки. Останов и запуск
- серверного процесса обеспечит их удаление из каталога.</P>
+ <P>Вы достигли установленного по умолчанию ограничения на 100 сессий
+ подключения к базе данных. Вам необходимо увеличить для
+ <I>postmaster</I> лимит на количество конкурентных backend процессов,
+ изменив значение <I>max_connections</I> в файле <I>postgresql.conf</I>
+ и перестартовать <I>postmaster</I>.</P>
+
- <H4><A name="3.10">3.10</A>) Почему необходимо делать dump и restore при
+ <H4><A name="3.6">3.6</A>) Почему необходимо делать dump и restore при
обновлении выпусков PostgreSQL?</H4>
<P>Разработчики PostgreSQL делают только небольшие изменения между
- подвыпусками. Таким образом обновление с версии 7.2 до 7.2.1 не требует
+ подвыпусками. Таким образом обновление с версии 7.4 до 7.4.1 не требует
выполнения dump и restore. Однако при выходе очередного выпуска
- (т.е. при обновлении например, с 7.2 на 7.3) часто меняется внутренний
+ (т.е. при обновлении например, с 7.3 на 7.4) часто меняется внутренний
формат системных таблиц и файлов данных. Эти изменения часто носят
комплексный характер, так что нет возможности обеспечить обратную
совместимость файлов данных. Выполение dump позволяет получить данные
@@ -812,7 +585,7 @@
использования dump/restore. Комментарии к выпуску говорит когда можно
использовать <i>pg_upgrade</i> для этого выпуска.</P>
- <H4><A name="3.11">3.11</A>) Какое компьютерное "железо" я должен
+ <H4><A name="3.7">3.7</A>) Какое компьютерное "железо" я должен
использовать?</H4>
<P>Поскольку "железо" персональных компьютеров является наиболее
совместимым, люди склонны верить, что такое "железо" имеет одинаковое
@@ -827,24 +600,15 @@
<H2 align="center">Вопросы эксплуатации</H2>
- <H4><A name="4.1">4.1</A>) В чем отличие между бинарным и нормальным
- курсором?</H4>
-
- <P>Смотрите описание на страницах руководства посвященным
- <SMALL>DECLARE</SMALL>.</P>
-
- <H4><A name="4.2">4.2</A>) Как выполнить <SMALL>SELECT</SMALL> только
+ <H4><A name="4.1">4.1</A>) Как выполнить <SMALL>SELECT</SMALL> только
для нескольких первых строчек запроса? Произвольной строки?</H4>
- <P>Смотрите станицу руководства посвященную <SMALL>FETCH</SMALL>
- или используйте <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P>
-
- <P>Даже если вы хотите получить только первые несколько записей,
- будет выполнен весь запрос. Рассмотрим запрос, который имеет
- <SMALL>ORDER BY.</SMALL> Если есть какой-либо индекс, который
- совпадает с <SMALL>ORDER BY</SMALL>, PostgreSQL может
- выдать только несколько первых запрошенных записей или может
- выполнять запрос пока не будут выданы желаемые записи.</P>
+ <P>Для получения только нескольких строк, если вы знаете их количество
+ на момент выполнения <SMALL>SELECT</SMALL> используйте <SMALL>LIMIT</SMALL>.</P>
+ Если есть какой-либо индекс, который совпадает с <SMALL>ORDER BY</SMALL>,
+ то возможно, что весь запрос выполнен и не будет. Если вы не знаете
+ количества необходимых строк на момент выполнения <SMALL>SELECT</SMALL>,
+ используйте курсор и <SMALL>FETCH</SMALL>.</P>
<p>To <small>SELECT</small> a random row, use:
</p><pre> SELECT col
@@ -854,8 +618,9 @@
</pre>
</p>
- <H4><A name="4.3">4.3</A>) Как получить список таблиц или других
- компонентов в <I>psql</I>?</H4>
+ <H4><A name="4.2">4.2</A>) Как мне найти какие таблицы, индексы,
+ базы данных и пользователи существуют? Как мне увидеть запросы,
+ которые использует <I>psql</I> для получения этой информации?</H4>
<P>Чтобы просматривать таблицы в <I>psql</I>, используйте команду \dt.
Полный список команд в <I>psql</I> вы можете получить, используя \?.
@@ -865,28 +630,25 @@
начинающихся с обратной косой черты. Вы также можете запустить
<I>psql</I> с опцией <I>-E</I> так, чтобы эта программа выдавала
запросы, которые она использует для выполнения заданных вами
- команд. PostgreSQL также предоставляет <SMALL>SQLi</SMALL>
+ команд. PostgreSQL также предоставляет <SMALL>SQL</SMALL>
совместимый с INFORMATION SCHEMA интерфейс, с помощью которого, вы
можете сформировать запрос на получение информации о базе данных.</P>
+
+ <P>Также существуют системные таблицы, начинающиеся с <I>pg_</I>.</P>
+
+ <P>Используйте <I>psql -l</I> для получения списка всех баз данных.</P>
- <H4><A name="4.4">4.4</A>) Как удалить колонку из таблицы или
- изменить её тип данных?</H4>
+ <P>Также посмотрите файл <I>pgsql/src/tutorial/syscat.source</I>.
+ Он показывает многие из операторов <SMALL>SELECT</SMALL> необходимых
+ для получения информации из системных таблиц базы данных.</P>
- <P><small>DROP COLUMN</small> функциональность была добавлена в выпуск
- 7.3 с оператором <small>ALTER TABLE DROP COLUMN</small>. В ранних версиях,
- можно сделать так:</P>
-<PRE>
- BEGIN;
- LOCK TABLE old_table;
- SELECT ... -- выборка всех колонок за исключением той, которую хотите удалить
- INTO TABLE new_table
- FROM old_table;
- DROP TABLE old_table;
- ALTER TABLE new_table RENAME TO old_table;
- COMMIT;
-</PRE>
- <P>Для изменения типа данных колонки, сделайте так:</P>
+ <H4><A name="4.3">4.3</A>) Как изменить тип данных колонки?</H4>
+
+ <P>В 8.0 и более поздних версиях, изменение типа колонки выполняется
+ очень легко через <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.
+
+ <P>В более ранних версиях сделайте так:</P>
<PRE>
BEGIN;
ALTER TABLE tab ADD COLUMN new_col <i>new_data_type</i>;
@@ -895,24 +657,49 @@
COMMIT;
</PRE>
- <H4><A name="4.5">4.5</A>) Каковы максимальные размеры для записей,
+ <H4><A name="4.4">4.4</A>) Каковы максимальные размеры для строк в таблице,
таблиц и базы данных?</H4>
<P>Существуют следующие ограничения:</P>
-<PRE>
- Максимальный размер базы? неограничен (существуют базы на 32 TB)
- Максимальный размер таблицы? 32 TB
- Максимальный размер записи? 1.6 TB
- Максимальный размер поля? 1 GB
- Максимальное количество записей в таблице? неограничено
- Максимальное количество колонок в таблице? 250-1600 в зависимости от типа
- Максимальное количество индексов в таблице? неограничено
-</PRE>
-
- Разумеется, понятие "неограничено" на самом деле ограничивается
+<BLOCKQUOTE>
+<TABLE BORDER="1">
+<TBODY>
+<TR>
+ <TD>Максимальный размер базы?</TD>
+ <TD>неограничен (существуют базы на 32 TB)</TD>
+</TR>
+<TR>
+ <TD>Максимальный размер таблицы?</TD>
+ <TD>32 TB</TD>
+</TR>
+<TR>
+ <TD>Максимальный размер строки?</TD>
+ <TD>1.6 TB</TD>
+</TR>
+<TR>
+ <TD>Максимальный размер поля?</TD>
+ <TD>1 GB</TD>
+</TR>
+<TR>
+ <TD>Максимальное количество строк в таблице?</TD>
+ <TD>неограничено</TD>
+</TR>
+<TR>
+ <TD>Максимальное количество колонок в таблице?</TD>
+ <TD>250-1600 в зависимости от типа</TD>
+</TR>
+<TR>
+ <TD>Максимальное количество индексов в таблице?</TD>
+ <TD>неограничено</TD>
+</TR>
+</TBODY>
+</TABLE>
+</BLOCKQUOTE>
+<BR>
+ <P>Разумеется, понятие "неограничено" на самом деле ограничивается
доступным дисковым пространиством и размерами памяти/своппинга.
Когда значения перечисленные выше неоправдано большие, может
- пострадать производительность.
+ пострадать производительность.</P>
<P>Максимальный размер таблицы в 32 TB не требует чтобы операционная
система поддерживала файлы больших размеров. Большие таблицы хранятся
@@ -923,7 +710,7 @@
могут быть увеличены в четыре раза, если размер блока по умолчанию будет
увеличен до 32k.</P>
- <H4><A name="4.6">4.6</A>) Как много дискового пространства в базе данных
+ <H4><A name="4.5">4.5</A>) Как много дискового пространства в базе данных
нужно для сохранения данных из обычного текстового файла?</H4>
<P>СУБД PostgreSQL может потребоваться дискового пространства до 5 раз
@@ -935,21 +722,21 @@
Размер базы PostgreSQL, содержащей эти же данные составит приблизительно
6.4 MB из которых:</P>
<PRE>
- 32 байт: на каждый заголовок записи (приблизительно)
+ 32 байт: на каждый заголовок строки в таблице (приблизительно)
+ 24 байта: одно поле с целочисленным типом и одно текстовое поле
- + 4 байта: указатель на странице для всей записи
+ + 4 байта: указатель на странице для всей табличной строки
----------------------------------------
- 60 байт на запись
+ 60 байт на строку в таблице
Размер страницы данных в PostgreSQL составляет 8192 байт (8 KB), так что:
8192 байт на страницу
- --------------------- = 136 записей на страницу БД (округлённо)
- 60 байт на запись
+ --------------------- = 136 строк в таблице на страницу БД (округлённо)
+ 60 байт на строку в таблице
100000 строк данных
----------------------- = 735 страниц в БД (округлённо)
- 128 записей на страницу
+ 128 строк в таблице на страницу
735 страниц БД * 8192 байт на страницу = 6,021,120 байт (6 MB)
</PRE>
@@ -961,25 +748,12 @@
занимают очень мало места.
</P>
- <H4><A name="4.7">4.7</A>) Как мне убедиться, что существуют нужные мне
- таблицы, индексы, базы данных и пользователи?</H4>
-
- <P><I>psql</I> имеет несколько команд, начинающихся с обратной косой
- черты, для того чтобы просматривать такую информацию. Используйте
- \? для того, чтобы увидеть эти команды. Также существуют системные
- таблицы, имя которых начинается на <i>pg_</i> и в которых также содержится
- эта информация. Ещё, <i>psql -l</i> покажет список всех баз данных.</P>
-
- <P>Также смотрите файл <I>pgsql/src/tutorial/syscat.source</I>. В нем
- представлены многие операторы <SMALL>SELECT</SMALL> которые нужны
- для получения информации из системных таблиц базы данных.</P>
-
- <H4><A name="4.8">4.8</A>) У меня медленно работают запросы или не
- происходит использования индексов. Почему?</H4>
+ <H4><A name="4.6">4.6</A>) Почему мои запросы работают медлено? Почему
+ они не используют мои индексы?</H4>
<P>Индексы не используются для каждого запроса автоматически. Они
используются только если таблица больше минимального размера и запрос
- выбирает только маленький процент записей в таблице. Так устроено,
+ выбирает только маленький процент строк в таблице. Так устроено,
потому что доступ к диску с применением рандомизации при сканировании
индексов может быть медленнее, чем простое чтение таблицы или ее
последовательное сканирование.</P>
@@ -988,11 +762,11 @@
таблицы, PostgreSQL должен иметь статистику по этой таблице. Эта
статистика собирается при использовании <SMALL>VACUUM ANALYZE</SMALL>
или просто <SMALL>ANALYZE</SMALL>. Используя статистику, оптимизатор
- узнает о том как много записей в таблице и если он должен использовать
+ узнает о том как много строк в таблице и если он должен использовать
индексы, то он может принимать лучшие решения. Статистика также
влияет на определение оптимального порядка связывания и метода связывания.
- Сбор статистики должен периодически выполнятся при изменении содержимого
- таблицы.</P>
+ При изменении содержимого таблицы должен периодически выполнятся
+ сбор статистики.</P>
<P>Обычно индексы не используются для <SMALL>ORDER BY</SMALL> или для
выполнения связываний. Последовательный перебор следующий за явной
@@ -1024,67 +798,26 @@
</UL></LI>
<LI>Строка поиска не должна начинаться с символа класса, т.е. [a-e].</LI>
<LI>Поиск независимый от регистра, такой как <small>ILIKE</small> и
- <i>~*</i> не использует индексы. Вместо него, используйте функциональные
- индексы, которые описываются в секции <A href="#4.12">4.12</A>.</LI>
+ <i>~*</i> не использует индексы. Вместо него, используйте индексы
+ выражений, которые описываются в секции <A href="#4.8">4.8</A>.</LI>
<LI>Во время <i>initdb</i> должна использоваться локаль по умолчанию
- <i>C</i>, потому что не существует возможности узнать next-greater
+ <i>C</i>, потому что не существует возможности узнать следующий наибольший
символ для не-C локали. Вы можете для таких случаев создать специальный
- индекс
- <PRE>
- text_pattern_ops
- </PRE>
- который работает только для
- <PRE>
- LIKE
- </PRE>
- индексирования.</LI>
+ индекс <CODE>text_pattern_ops</CODE> который работает только для
+ <SMALL>LIKE</SMALL> индексирования.</LI>
</UL>
- </P>
<P>В выпусках до версии 8.0, индексы часто нельзя было использовать,
если типы данных точно не совпадали с индексными типами колонок. Это
особенно касалось int2, int8 и numeric индексов колонок.</P>
- <H4><A name="4.9">4.9</A>) Как посмотреть на то, как оптимизатор выполняет
+ <H4><A name="4.7">4.7</A>) Как посмотреть на то, как оптимизатор выполняет
мой запрос?</H4>
<P>Смотрите страницу руководства посвященную <SMALL>EXPLAIN</SMALL>.</P>
- <H4><A name="4.10">4.10</A>) Что такое R-tree индекс?</H4>
-
- <P>R-tree индекс используется для индексирования пространственных данных.
- Индекс хэша не может управлять поисками диапазона. B-tree индекс
- управляет только поисками диапазона в одном измерении. R-tree индекс
- может управлять многоразмерными данными. Например, если R-tree индекс
- может быть встроен в атрибут типа <I>point</I>, то система может
- более эффективно ответить на запрос типа "выбрать все точки внутри
- заданного четырехугольника."</P>
- <P>Канонический источник, описывающий первоначальное создание R-tree
- это:</P>
-
- <P>Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
- Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt
- of Data, 45-57.</P>
-
- <P>Вы можете найти этот документ в книге Стоунбрейкера "Readings in
- Database Systems".</P>
-
- <P>Встроеннные R-tree могут управлять полигонами и боксами. В теории,
- R-tree могут быть расширены для управления большим количеством
- измерений. На практике, расширение R-tree требует некоторых усилий и
- у нас, в данный момент, нет какой-либо документации о том, как это
- сделать.</P>
-
- <H4><A name="4.11">4.11</A>) Что такое Genetic Query
- Optimizer?</H4>
-
- <P>Модуль <SMALL>GEQO</SMALL> производит быструю оптимизацию запроса,
- когда происходит связывание многих таблиц через Genetic Algorithm (GA).
- Это позволяет управлять большими запросами на связывание через
- неистощающий поиск.</P>
-
- <H4><A name="4.12">4.12</A>) Как мне выполнить поиск регулярного выражения
+ <H4><A name="4.8">4.8</A>) Как мне выполнить поиск регулярного выражения
и поиск независимый от регистра букв поиск регулярного выражения?
Как мне использовать индекс для поиска независимого от регистра букв?</H4>
@@ -1101,28 +834,55 @@
</PRE>
Эта конструкция не будет использовать стандартный индекс. Однако, если
- вы создадите функциональный индекс, он будет использован:
+ вы создадите индекс выражения, он будет использован:
<PRE>
CREATE INDEX tabindex ON tab (lower(col));
</PRE>
- <H4><A name="4.13">4.13</A>) Как я могу определить, что значение поля
+ <H4><A name="4.9">4.9</A>) Как я могу определить, что значение поля
равно <SMALL>NULL</SMALL> в каком-либо запросе?</H4>
<P>Вы просто сравниваете значение с <SMALL>IS NULL</SMALL> и
<SMALL>IS NOT NULL</SMALL>.</P>
- <H4><A name="4.14">4.14</A>) Каковы отличия между разными символьными
+ <H4><A name="4.10">4.10</A>) Каковы отличия между разными символьными
типами?</H4>
-<PRE>
-Тип Внутреннее имя Замечания
---------------------------------------------------
-VARCHAR(n) varchar размер задает максимальную длину, нет заполнения
-CHAR(n) bpchar заполняется пустотой до фиксированной длины
-TEXT text нет задаваемого верхнего ограничения или длины
-BYTEA bytea массив байт переменной длины (можно использовать null-байт без опаски)
-"char" char один символ
-</PRE>
+<BLOCKQUOTE>
+<TABLE BORDER="1">
+<TBODY>
+<TR>
+ <TH>Тип</TH>
+ <TH>Внутреннее имя</TH>
+ <TH>Замечания</TH>
+</TR>
+<TR>
+ <TD>VARCHAR(n)</TD>
+ <TD>varchar</TD>
+ <TD>размер задает максимальную длину, нет заполнения</TD>
+</TR>
+<TR>
+ <TD>CHAR(n)</TD>
+ <TD>bpchar</TD>
+ <TD>заполняется пустотой до фиксированной длины</TD>
+</TR>
+<TR>
+ <TD>TEXT</TD>
+ <TD>text</TD>
+ <TD>нет задаваемого верхнего ограничения или длины</TD>
+</TR>
+<TR>
+ <TD>BYTEA</TD>
+ <TD>bytea</TD>
+ <TD>массив байт переменной длины (можно использовать null-байт без опаски)</TD>
+</TR>
+<TR>
+ <TD>"char"</TD>
+ <TD>char</TD>
+ <TD>один символ</TD>
+</TR>
+</TBODY>
+</TABLE>
+</BLOCKQUOTE>
<P>Внутреннее имя вы можете увидеть, когда смотрите системные каталоги
и в некоторых сообщениях об ошибках.</P>
@@ -1147,7 +907,7 @@ BYTEA bytea массив байт переменной длины (можно использовать
которых могут включать <SMALL>NULL</SMALL> байты. Все типы описанные
здесь, имеют сходные характеристики производительности.</P>
- <H4><A name="4.15.1">4.15.1</A>) Как мне создать поле
+ <H4><A name="4.11.1">4.11.1</A>) Как мне создать поле
serial/с-авто-увеличением?</H4>
<P>PostgreSQL поддерживает тип данных <SMALL>SERIAL</SMALL>. Он
@@ -1169,20 +929,15 @@ BYTEA bytea массив байт переменной длины (можно использовать
</PRE>
Смотрите подробности о последовательностях на странице руководства
- посвященной <I>create_sequence</I>. Вы также можете использовать
- каждое поле <I>OID</I> в записи как уникальное значение. Однако,
- если вам нужен дамп и перезагрузка базы данных, вам необходимо
- использовать команду <I>pg_dump</I> с опцией <I>-o</I> или опцию
- <SMALL>COPY WITH OIDS</SMALL> для сохранения значений поля
- <SMALL>OID</SMALL>.
-
- <H4><A name="4.15.2">4.15.2</A>) Как мне получить значение при вставке
+ посвященной <I>create_sequence</I>.
+
+ <H4><A name="4.11.2">4.11.2</A>) Как мне получить значение при вставке
<SMALL>SERIAL</SMALL>?</H4>
<P>Один из способов состоит в получении следующего значения
<SMALL>SERIAL</SMALL> из объекта sequence с помощью функции
<I>nextval()</I> <I>перед</I> вставкой и затем вставлять это значение
- явно. Используйте таблицу-пример в <A href="#4.15.1">4.15.1</A>, пример
+ явно. Используйте таблицу-пример в <A href="#4.11.1">4.11.1</A>, пример
в псевдоязыке покажет как это делается:</P>
<PRE>
new_id = execute("SELECT nextval('person_id_seq')");
@@ -1205,23 +960,15 @@ BYTEA bytea массив байт переменной длины (можно использовать
new_id = execute("SELECT currval('person_id_seq')");
</PRE>
- И наконец, вы можете использовать значение
- <A href="#4.16"><SMALL>OID</SMALL></A>, возращаемое из опертора
- <SMALL>INSERT</SMALL> чтобы увидеть значение по умолчанию, что
- предположительно является наименее переносимым на другие платформы
- решением, к тому же значение oid будет урезаться, когда оно достигнет
- 4 миллиардов. В Perl, используя DBI с модулем Edmund Mergl'я DBD::Pg,
- значение oid становится доступным через <I>$sth-&gt;{pg_oid_status}</I>
- после <I>$sth-&gt;execute()</I>.
- <H4><A name="4.15.3">4.15.3</A>) Не может ли получиться так, что
+ <H4><A name="4.11.3">4.11.3</A>) Не может ли получиться так, что
использование <I>currval()</I> и <I>nextval()</I> приведет к
зациклированию с другими пользователями?</H4>
- <P>Нет. <i>currval()</i> возвращает текущее значение, назначенное вашем
- backend'ом, а не другими пользователями.</P>
+ <P>Нет. <i>currval()</i> возвращает текущее значение, назначенное вашей
+ сессией, а не другими сессиями.</P>
- <H4><A name="4.15.4">4.15.4</A>) Почему числа из моей последовательности
+ <H4><A name="4.11.4">4.11.4</A>) Почему числа из моей последовательности
не используются снова при отмене транзакции? Почему создаются разрывы
при нумерации в колонке, где я использую последовательность/SERIAL?</H4>
@@ -1231,78 +978,32 @@ BYTEA bytea массив байт переменной длины (можно использовать
нумерации при отмене транзакций.</P>
- <H4><A name="4.16">4.16</A>) Что такое <SMALL>OID</SMALL>? Что такое
+ <H4><A name="4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое
<SMALL>TID</SMALL>?</H4>
- <P>Поля <SMALL>OID</SMALL> служат уникальными идетификаторами записей
- в PostgreSQL. Каждая запись, которая создаётся в PostgreSQL получает
- уникальный <SMALL>OID</SMALL>. Все значения <SMALL>OID</SMALL>
- генерируемые во время <I>initdb</I> имеют значения меньше 16384 (из
- <I>include/access/transam.h</I>). Все созданные пользователем
- <SMALL>OID</SMALL> имеют бОльшие значение. По умолчанию, все эти
- <SMALL>OID</SMALL> являются уникальными не только внутри какой-либо
- таблицы или базы данных, но и внутри всей СУБД PostgreSQL.</P>
-
- <P>PostgreSQL использует <SMALL>OID</SMALL> в своих внутренних системных
- таблицах для связи записей и таблиц. Значения <SMALL>OID</SMALL> могут
- быть использованы для идентификации заданных пользователем записей,
- а также использоваться при связываниях. Рекомендуется использовать
- тип колонки <SMALL>OID</SMALL> для хранения значений <SMALL>OID</SMALL>
- Вы можете создать индекс на поле <SMALL>OID</SMALL> для более быстрого
- доступа.</P>
-
- <P>Значения <SMALL>OID</SMALL> назначаются для всех новых записей из
- центральной области, которые используются всеми всеми базами данных.
- Если вы хотите изменить <SMALL>OID</SMALL> на какое-либо другое
- значение или если вы хотите создать копию таблицы с такимиже
- <SMALL>OID</SMALL>, то это можно сделать так:</P>
-<PRE>
- CREATE TABLE new_table(mycol int);
- SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table;
- COPY tmp_table TO '/tmp/pgtable';
- COPY new_table WITH OIDS FROM '/tmp/pgtable';
- DROP TABLE tmp_table;
-</PRE>
- <P>O<SMALL>ID</SMALL> хранится как 4-х байтное целое и не может превышать
- значение в 4 миллиарда. Однако, еще никто не сообщил о том, что такое
- произошло, но мы планируем до того как это случиться избавится от
- этого ограничения.</P>
+ <P>Каждая, создаваемая в PostgreSQL табличная строка, получает уникальный
+ индентификатор <SMALL>OID</SMALL> за исключением случая когда
+ использовалось <SMALL>WITHOUT OIDS</SMALL>. O<SMALL>ID</SMALL> - это
+ автоматически назначаемое уникальное 4-х байтовое целое число.
+ Однако, после того как его значение превысит 4 миллиарда, значения
+ O<SMALL>ID</SMALL> начинают дублироваться. PostgreSQL использует
+ <SMALL>OID</SMALL> для связывания своих внутренних таблиц.</P>
+
+ <P>Для уникальных значений в колонках таблицы пользователя, лучшим
+ способом является использование <SMALL>SERIAL</SMALL> вместо
+ O<SMALL>ID</SMALL>, потому что последовательности <SMALL>SERIAL</SMALL>
+ уникальны только внутри таблицы и таким образом меньше подвержены
+ переполнению. Для хранения значений 8-ми байтной последовательности
+ доступен тип <SMALL>SERIAL8</SMALL>.
<P>T<SMALL>ID</SMALL> используется для идентификации специальных
физических записей с блочными и offset значениями. T<SMALL>ID</SMALL>
- изменяется после того как записи были изменены или перегружены.
+ изменяется после того как строки в таблице были изменены или перегружены.
<P>T<SMALL>ID</SMALL> используется индексными записями в качестве
указателя на физические записи.</P>
- <H4><A name="4.17">4.17</A>) Что означают некоторые термины используемые в
- PostgreSQL?</H4>
-
- <P>Некоторый исходный код и старая документация используют
- общеупотребительные термины. Вот некоторые из них:</P>
-
- <UL>
- <LI>table, relation, class</LI>
-
- <LI>row, record, tuple</LI>
-
- <LI>column, field, attribute</LI>
-
- <LI>retrieve, select</LI>
- <LI>replace, update</LI>
-
- <LI>append, insert</LI>
-
- <LI><SMALL>OID</SMALL>, serial value</LI>
-
- <LI>portal, cursor</LI>
-
- <LI>range variable, table name, table alias</LI>
- </UL>
-
- <P>Список общих терминов по базам данных можно найти на <A href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A></P>
-
- <H4><A name="4.18">4.18</A>) Почему я получаю ошибку <I>"ERROR: Memory
+ <H4><A name="4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory
exhausted in AllocSetAlloc()"</I>?</H4>
<P>Предположительно у вас закончилась виртуальная память
@@ -1322,12 +1023,12 @@ BYTEA bytea массив байт переменной длины (можно использовать
клиентом, потому что backend возвращает слишком большой объем данных,
попытайтесь выполнить эту команду перед запуском клиента.
- <H4><A name="4.19">4.19</A>) Как мне узнать, какая версия PostgreSQL
+ <H4><A name="4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL
запущена?</H4>
<P>Из <I>psql</I>, наберите <CODE>SELECT version();</CODE></P>
- <H4><A name="4.20">4.20</A>) Почему при работе с моим большим объектом
+ <H4><A name="4.15">4.15</A>) Почему при работе с моим большим объектом
я получаю ошибку <I>"invalid large obj descriptor"</I>?</H4>
<P>Вам нужно при использовании большого объекта поместить в начале
@@ -1345,46 +1046,15 @@ BYTEA bytea массив байт переменной длины (можно использовать
<P>Если вы используете такой интерфейс клиента как <SMALL>ODBC</SMALL>,
вам возможно понадобится установить <CODE>auto-commit off.</CODE></P>
- <H4><A name="4.21">4.21</A>) Как мне создать колонку которая по умолчанию
+ <H4><A name="4.16">4.16</A>) Как мне создать колонку которая по умолчанию
будет содержать текущее время?</H4>
<P>Используйте <I>CURRENT_TIMESTAMP</I>:</P>
<PRE>
-<CODE>CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
-</CODE>
+CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
</PRE>
- <H4><A name="4.22">4.22</A>) Почему мои подзапросы, использующие
- <CODE><SMALL>IN</SMALL></CODE> так медленно работаеют?</H4>
-
- <P>В версиях до 7.4, подзапросы связывались с родительскими запросами
- через последовательный перебор результатов позапроса для каждой
- записи родительского запроса. Если подзапрос возвращает только несколько
- записей, а родительский запрос возвращает много записей,
- <CODE><SMALL>IN</SMALL></CODE> работает наиболее быстро. Чтобы
- увеличить скорость в других запросах, замените <CODE>IN</CODE> на
- <CODE>EXISTS</CODE>:</P>
-<PRE>
- SELECT *
- FROM tab
- WHERE col IN (SELECT subcol FROM subtab);
-</PRE>
-
- на:
-<PRE>
- SELECT *
- FROM tab
- WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
-</PRE>
-
- Чтобы такая конструкция работала быстро, колонка <CODE>subcol</CODE>
- должна быть проиндексирована.
-
- <P>В версии 7.4 и выше, <CODE>IN</CODE> фактически использует такой же
- механизм связывания как и обычные запросы, поэтому предпочтительным
- является использование <CODE>EXISTS</CODE></P>.
-
- <H4><A name="4.23">4.23</A>) Как мне выполнить внешнее связывание?</H4>
+ <H4><A name="4.17">4.17</A>) Как мне выполнить внешнее связывание?</H4>
<P>PostgreSQL поддерживает внешнее связывание,
используя стандартный синтаксис SQL. Вот два примера:</P>
@@ -1400,32 +1070,15 @@ BYTEA bytea массив байт переменной длины (можно использовать
</PRE>
<P>Это идентичные запросы связывания t1.col и t2.col, также возвращают
- любые несвязанные записи в t1 (которые не совпадают с t2).
- <SMALL>RIGHT</SMALL> связывание должно добавить несвязанные записи
+ любые несвязанные строки в t1 (которые не совпадают с t2).
+ <SMALL>RIGHT</SMALL> связывание должно добавить несвязанные строки
t2. <SMALL>FULL</SMALL> связывание должно возвратить совпавшие
- записи плюс все несвязанные записи из t1 и t2. Слово <SMALL>OUTER</SMALL>
+ строки плюс все несвязанные строки из t1 и t2. Слово <SMALL>OUTER</SMALL>
является необязательным и назначается в <SMALL>LEFT</SMALL>,
<SMALL>RIGHT</SMALL> и <SMALL>FULL</SMALL> связываниях. Обычные
связывания называются <SMALL>INNER</SMALL> связывания.</P>
- <P>В предыдущих версиях, внешние связывания могли быть эмулированы
- используя <SMALL>UNION</SMALL> и <SMALL>NOT IN</SMALL>. Например,
- когда происходит связывание <I>tab1</I> и <I>tab2</I>, следующий
- запрос выполняет <I>внешнее</I> связывание двух таблиц:<BR>
- <BR>
- </P>
-<PRE>
- SELECT tab1.col1, tab2.col2
- FROM tab1, tab2
- WHERE tab1.col1 = tab2.col1
- UNION ALL
- SELECT tab1.col1, NULL
- FROM tab1
- WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
- ORDER BY col1
-</PRE>
-
- <H4><A name="4.24">4.24</A>) Как выполнять запросы, использующие несколько
+ <H4><A name="4.18">4.18</A>) Как выполнять запросы, использующие несколько
баз данных?</H4>
<P>Не существует способа создать запрос к базам данных отличным от текущей.
@@ -1433,20 +1086,19 @@ BYTEA bytea массив байт переменной длины (можно использовать
данных, непонятно даже, как должен себя вести такой межбазовый запрос.</P>
<P><I>contrib/dblink</I> позволяет запросы между базами, используя
- вызовы функций. Разумеется, клиент может одновременно устанавливать
+ вызовы функций. Разумеется, клиент может одновременно также устанавливать
соедиенения с различными базами данных и таких образом объединять
информацию из них.</P>
- <H4><A name="4.25">4.25</A>) Как мне вернуть из функции несколько записей?</H4>
+ <H4><A name="4.19">4.19</A>) Как мне вернуть из функции несколько строк таблицы?</H4>
- <P>В версии 7.3, вы можете легко вернуть несколько записей или колонок из
- какой-либо функции,
- <href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
- http://techdocs.postgresql.org/guides/SetReturningFunctions</a>.</P>
+ <P>Вы можете легко использовать функции, возвращающие список,
+ <A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
+ http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.</P>
- <H4><A name="4.26">4.26</A>) Почему я не могу надежно создавать/удалять
+ <H4><A name="4.20">4.20</A>) Почему я не могу надежно создавать/удалять
временные таблицы в функциях PL/PgSQL?</H4>
- <P>PL/PgSQL кэширует содержимое функции и один из негативных эффектов этого
+ <P>PL/PgSQL кэширует сценарии функции и один из негативных эффектов этого
состоит в том, что если функция PL/PgSQL обращается к временной таблице
и эта таблица позднее удаляется и пересоздается, а функция затем вызывается
снова, то ее вызов приведет к ошибке, потому что скэшированное содержимое
@@ -1455,7 +1107,7 @@ BYTEA bytea массив байт переменной длины (можно использовать
таблицам в PL/PgSQL. Использование этого оператора заставит запрос
перегенерироваться каждый раз.</P>
- <h4><a name="4.27">4.27</a>) Какие опции шифрования существуют?
+ <h4><a name="4.21">4.21</a>) Какие опции шифрования существуют?
</h4>
<ul>
<li><i>contrib/pgcrypto</i> содержит много функций шифрования для
@@ -1468,8 +1120,7 @@ BYTEA bytea массив байт переменной длины (можно использовать
возможно использование независимых внешних шифрующих транспортов, таких
как stunnel или ssh, вместо собственных SSL соединений PostgreSQL).</li>
<li>Пароли пользователей к базе данных автоматически шифруются, при
- сохранении в версии 7.3. В предыдущих версиях, вы должны разрешить
- опцию <i>PASSWORD_ENCRYPTION</i> в <i>postgresql.conf</i>.</li>
+ сохранении в системных таблицах.</li>
<li>Сервер можно запустить, используя шифрованную файловую систему.</li>
</ul>
<HR>
@@ -1489,7 +1140,7 @@ BYTEA bytea массив байт переменной длины (можно использовать
и они по возможности будут помещены в подкаталог <I>contrib/</I>.</P>
<H4><A name="5.3">5.3</A>) Как мне написать C функцию, возвращающую
- запись?</H4>
+ строку таблицы?</H4>
<P>В версиях PostgreSQL, начиная с 7.3, функции, возвращающие таблицы
полностью поддерживаются в C, PL/PgSQL и SQL. Подробности смотрите в