summaryrefslogtreecommitdiff
path: root/doc/src/FAQ/FAQ_russian.html
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/FAQ/FAQ_russian.html')
-rw-r--r--doc/src/FAQ/FAQ_russian.html1387
1 files changed, 0 insertions, 1387 deletions
diff --git a/doc/src/FAQ/FAQ_russian.html b/doc/src/FAQ/FAQ_russian.html
deleted file mode 100644
index de99068802b..00000000000
--- a/doc/src/FAQ/FAQ_russian.html
+++ /dev/null
@@ -1,1387 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD html 4.01 transitional//EN">
-
-<HTML>
- <!-- DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN" -->
- <!-- HTML -->
-
- <HEAD>
- <META name="generator" content="HTML Tidy, see www.w3.org">
-
- <TITLE>PostgreSQL FAQ</TITLE>
- </HEAD>
-
- <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
- alink="#0000ff">
- <H1>Ответы на часто задаваемые вопросы по PostgreSQL</H1>
-
- <P>Дата последнего обновления: Четверг 11 Июня 06:36:10 EDT 2002</P>
-
- <P>Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (<A href=
- "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
- </P>
- <P>Перевел на русский: Виктор Вислобоков (<A href=
- "mailto:pgman@candle.pha.pa.us">victor_v@permonline.ru</A>)<BR>
- </P>
-
- <P>Самую свежую английскую версию документа можно найти на <A
- href=
- "http://www.postgresql.org/docs/faq-english.html">http://www.PostgreSQL.org/docs/faq-english.html</A>.</P>
-
- <P>Ответы на вопросы специфичные для конкретных платформ можно найти на <A href=
- "http://www.postgresql.org/users-lounge/docs/faq.html">http://www.PostgreSQL.org/users-lounge/docs/faq.html</A>.</P>
- <HR>
-
- <H2 align="center">Общие вопросы</H2>
- <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.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 с другими
- <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.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>) Как мне управлять соединениями с других
- компьютеров?<BR>
- <A href="#3.6">3.6</A>) Какие настройки мне нужно сделать для улучшения
- производительности?<BR>
- <A href="#3.7">3.7</A>) Какие возможности для отладки есть в наличии?<BR>
- <A href="#3.8">3.8</A>) Почему я получаю сообщение <I>"Sorry, too many
- clients"</I> когда пытаюсь подключиться к базе?<BR>
- <A href="#3.9">3.9</A>) Что это за файлы <I>pg_sorttempNNN.NN</I>
- в моем каталоге с базой данных?<BR>
-
-
- <H2 align="center">Вопросы эксплуатации</H2>
- <A href="#4.1">4.1</A>) В чем отличие между бинарным и нормальным
- курсором?<BR>
- <A href="#4.2">4.2</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>) Как много дискового пространства в базе данных
- нужно для сохранения данных из обычного текстового файла?<BR>
- <A href="#4.7">4.7</A>) Как мне убедиться, что существуют нужные мне
- таблицы, индексы, базы данных и пользователи?<BR>
- <A href="#4.8">4.8</A>) У меня медленно работают запросы или не
- происходит использования индексов. Почему?<BR>
- <A href="#4.9">4.9</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>) Как мне выполнить поиск регулярного выражения
- и поиск независимый от регистра букв поиск регулярного выражения?
- Как мне использовать индекс для поиска независимого от регистра букв?<BR>
- <A href="#4.13">4.13</A>) Как я могу определить, что значение поля равно
- <SMALL>NULL</SMALL> в каком-либо запросе?<BR>
- <A href="#4.14">4.14</A>) Каковы отличия между разными символьными
- типами?<BR>
- <A href="#4.15.1">4.15.1</A>) Как мне создать поле serial/с-авто-увеличением?<BR>
- <A href="#4.15.2">4.15.2</A>) Как мне получить значение при вставке
- <SMALL>SERIAL</SMALL>?<BR>
- <A href="#4.15.3">4.15.3</A>) Не может ли получиться так, что
- использование <I>currval()</I> и <I>nextval()</I> приведет к
- зациклированию с другими пользователями?<BR>
- <A href="#4.15.4">4.15.4</A>) Почему числа из моей последовательности
- не используются снова при отмене транзакции? Почему создаются разрывы
- при нумерации в колонке, где я использую последовательность/SERIAL?<BR>
- <A href="#4.16">4.16</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
- exhausted in AllocSetAlloc()"</I>?<BR>
- <A href="#4.19">4.19</A>) Как мне узнать, какая версия PostgreSQL
- запущена?<BR>
- <A href="#4.20">4.20</A>) Почему при работе с моим большим объектом
- я получаю ошибку <I>"invalid large obj descriptor"</I>?<BR>
- <A href="#4.21">4.21</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>) Как выполнять запросы, использующие несколько
- баз данных?<BR>
- <A href="#4.25">4.25</A>) Как мне вернуть из функции несколько записей?<BR>
- <A href="#4.26">4.26</A>) Почему я не могу надежно создавать/удалять
- временные таблицы в функциях PL/PgSQL?<BR>
-
- <H2 align="center">Расширения PostgreSQL</H2>
- <A href="#5.1">5.1</A>) Я написал функцию определяемую пользователем.
- Когда я запускаю ее в <I>psql</I>, почему я получаю dump core?<BR>
- <A href="#5.2">5.2</A>) Как я могу внести некоторые классные новые
- типы и функции в PostgreSQL?<BR>
- <A href="#5.3">5.3</A>) Как мне написать C функцию, возвращающую
- запись?<BR>
- <A href="#5.4">5.4</A>) Я изменил исходный файл. Почему после
- перекомпиляции я не вижу изменений?<BR>
-
- <HR>
-
- <H2 align="center">Общие вопросы</H2>
-
- <H4><A name="1.1">1.1</A>) Что такое PostgreSQL?</H4>
-
- <P>PostgreSQL произносится <I>Post-Gres-Q-L (Пост-Грес-Кью-Эл)</I>.</P>
-
- <P>PostgreSQL - это расширение СУБД POSTGRES, исследовательский
- прототип нового поколения <SMALL>СУБД</SMALL>.
- PostgreSQL одновременно сохраняет мощную модель данных и общирное
- количество типов POSTGRES, и замещает язык запросов PostQuel на
- расширенное подмножество <SMALL>SQL</SMALL>. PostgreSQL - это
- свободное и полностью открытое программное обеспечение.</P>
-
- <P>Разработку PostgreSQL выполняет команда,
- связанная через Internet, все участники которой подписаны на список
- рассылки разработчиков. В настоящее время, их координатором
- является Марк Форнай (Marc G. Fournier) (<A href=
- "mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A>). (См.
- ниже о том, как подключиться к разработке). Эта команда теперь
- отвечает за всю разработку PostgreSQL.</P>
-
- <P>Авторами PostgreSQL 1.01 являются Эндрю Ю (Andrew Yu) и Джоли Чен
- (Jolly Chen). Многие другие внесли свой вклад в перенос на другие
- платформы, тестирование, отладку и расширение этого кода. Первоначальный
- код Postgres, из которого появился PostgreSQL, был итогом усилий многих
- академических студентов, неакадемических студентов и множества
- разных программистов, работавших под руководством профессора
- Майкла Стоунбрейкера (Michael Stonebraker) в Калифорнийском университете,
- Беркли.</P>
-
- <P>Первоначальное имя, данное в Беркли, было Postgres. Когда
- в 1995 году была добавлена функциональность <SMALL>SQL</SMALL>,
- это имя было изменено на Postgres95. Но и это имя было изменено
- в конце 1996 на PostgreSQL.</P>
-
- <H4><A name="1.2">1.2</A>) Каковы авторские права на PostgreSQL?</H4>
-
- <P>PostgreSQL попадает под действие следующего COPYRIGHT:</P>
-
- <P>Система Управления Базами Данных PostgreSQL</P>
-
- <P>Portion copyright (c) 1996-2002, PostgreSQL Global Development
- Group Portions Copyright (c) 1994-6 Regents of the University of
- California</P>
-
- <P>Предоставляются права на использование, копирование, изменение
- и распространение данного программного обеспечения и его документации
- для любых целей, бесплатно и без подписания какого-либо соглашения,
- при условии что для каждой копии будут предоставлены данное выше
- замечание об авторских правах, текущий параграф и два следующих
- параграфа.</P>
-
- <P>КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ
- ЗА ЛЮБЫЕ ПОВРЕЖДЕНИЯ, ВКЛЮЧАЯ ПОТЕРЮ ДОХОДА, НАНЕСЕННЫЕ ПРЯМЫМ
- ИЛИ НЕПРЯМЫМ, СПЕЦИАЛЬНЫМ ИЛИ СЛУЧАЙНЫМ ИСПОЛЬЗОВАНИЕМ ДАННОГО
- ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ЕГО ДОКУМЕНТАЦИИ, ДАЖЕ ЕСЛИ
- КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ БЫЛ ИЗВЕЩЕН О ВОЗМОЖНОСТИ ТАКИХ
- ПОВРЕЖДЕНИЙ.</P>
-
- <P>КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ СПЕЦИАЛЬНО ОТКАЗЫВАЗЫВАЕТСЯ ПРЕДОСТАВЛЯТЬ
- ЛЮБЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ТОЛЬКО ЭТИМИ ГАРАНТИЯМИ:
- НЕЯВНЫЕ ГАРАНТИИ ПРИГОДНОСТИ ТОВАРА ИЛИ ПРИГОДНОСТИ ДЛЯ ОТДЕЛЬНОЙ ЦЕЛИ.
- ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ НА ОСНОВЕ ПРИЦИПА
- "КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ
- СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.</P>
-
- <P>Вышеизложенное является BSD лицензией, классической лицензией
- программного обеспечения с открытым кодом. Эта лицензия не накладывает
- ограничений на использование исходного кода. Нам нравится эта лицензия
- и мы не собираемся её менять.</P>
-
- <H4><A name="1.3">1.3</A>) На каких Unix платформах работает PostgreSQL?</H4>
-
- <P>Обычно, PostgreSQL может работать на любой современной платформе
- совместимой с Unix. В инструкции по установке, вы найдете список
- тех платформ, на которых были проведены тестовые запуски PostgreSQL
- к моменту выхода данной версии.</P>
-
- <H4><A name="1.4">1.4</A>) Существуют ли версии перенесенные не на Unix
- системы?</H4>
-
- <P><STRONG>Клиент</STRONG></P>
-
- <P>Для запуска на платформах MS Windows возможна компиляция C
- библиотеки <I>libpq</I>, psql и других интерфесов и бинарных файлов.
- В этом случае, клиент запускается на MS Windows и связывается по
- TCP/IP с сервером, запущенным на одной из поддерживаемых Unix
- платформ. В дистрибутив включается файл <I>win31.mak</I> для того,
- чтобы можно было провести сборку библиотеки <I>libpq</I> и
- <I>psql</I> для Win32. PostgreSQL также работает через
- <SMALL>ODBC</SMALL>.</P>
-
- <P><STRONG>Сервер</STRONG></P>
-
- <P>Сервер БД может быть запущен на Windows NT и Win2k, используя
- библиотеку Cygwin, разработанную для переноса программного обеспечения Unix
- в NT. Смотрите <I>pgsql/doc/FAQ_MSWIN</I> в дистрибутиве или <A href=
- "http://www.postgresql.org/docs/faq-mswin.html">MS Windows FAQ</A>
- на нашем сайте. Мы не планируем специально переносить PostgreSQL
- на какую-либо платформу Microsoft.</P>
-
- <H4><A name="1.5">1.5</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>
-
- <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>Еще существует IRC канал на EFNet, с названием
- <I>#PostgreSQL</I>. Я использую для подключения к этому каналу команду Unix
- <CODE>irc -c '#PostgreSQL' "$USER" irc.phoenix.net.</CODE></P>
-
- <P>Список коммерческой поддержки компаний доступен на
- <A href=
- "http://www.postgresql.org/users-lounge/commercial-support.html">http://www.postgresql.org/users-lounge/commercial-support.html</A>.</P>
-
- <H4><A name="1.7">1.7</A>) Какая последняя версия?</H4>
-
- <P>Последний выпуск PostgreSQL - это версия 7.2.</P>
-
- <P>Мы планируем выпускать новые версии каждые четыре месяца.</P>
-
- <H4><A name="1.8">1.8</A>) Какая документация имеется в наличии?</H4>
-
- <P>В дистрибутив включаются различные руководства, страницы
- электронного руководства man и некоторые маленькие тестовые примеры.
- Смотрите в каталог <I>/doc</I>. Вы также можете просматривать
- документацию в Интернет по адресу <A href=
- "http://www.PostgreSQL.org/users-lounge/docs/">http://www.PostgreSQL.org/users-lounge/docs/</A>.</P>
-
- <P>Существует две книги по PostgreSQL доступные по адресам <A href=
- "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
- и <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>.
- Список книг по PostgreSQL, которые можно купить доступен по адресу
- <a href="http://www.postgresql.org/books/">http://www.postgresql.org/books/</a>.
- Кроме того, по адресу <a href="http://techdocs.postgresql.org">http://techdocs.postgresql.org/</a>
- вы можете найти коллекцию технических статей посвященных PostgreSQL.</p>
-
-
- <P><I>psql</I> имеет несколько прекрасных команд \d для отображения
- информации по типам, операторам, функциям, агрегатам и т.д.</P>
-
- <P>Наш сайт содержит еще больше информации.</P>
-
- <H4><A name="1.9">1.9</A>) Как найти информацию об известных ошибках
- или отсутствующих возможностях?</H4>
-
- <P>PostgreSQL поддерживает расширенный подкласс <SMALL>SQL</SMALL>-92.
- Смотрите наш список <A href="http://developer.postgresql.org/todo.php">TODO</A>
- на предмет известных ошибок, отсутствующих особенностях и будущих
- планов.</P>
-
- <H4><A name="1.10">1.10</A>) Как мне научиться <SMALL>SQL</SMALL>?</H4>
-
- <P>Книга по PostgreSQL на <A href=
- "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
- научит <SMALL>SQL</SMALL>. Существует другая книга по PostgreSQL на
- <A href="http://www.commandprompt.com/ppbook/">
- http://www.commandprompt.com/ppbook.</A>
- Есть прекрасный учебник на <A href=
- "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
- на <A href=
- "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
- http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A>
- и на <A href=
- "http://sqlcourse.com/">http://sqlcourse.com.</A></P>
-
- <P>Еще один учебник - это книга "Teach Yourself SQL in 21 Days, Second Edition"
- (Освой самостоятельно SQL за 21 день, Вторая редакция)
- на <A href=
- "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P>
-
- <P>Многим из наших пользователей нравится книга
- <I>The Practical SQL Handbook</I>,
- 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>
-
- <P>Для начала, скачайте последнюю версию исходных текстов и прочтите
- документацию разработчиков PostgreSQL на нашем сайте или в дистрибутиве.
- Затем, подпишитесь на списки рассылки <I>pgsql-hackers</I> и
- <I>pgsql-patches</I>. Далее, отправляйте исправления (patches) высокого
- качества в список pgsql-patches.</P>
-
- <P>Существует ограниченный список людей, который имеют привелегию
- вносить изменения в <SMALL>CVS</SMALL> архив PostgreSQL. Каждый
- из этих людей в свое время отправил так много высококачественных исправлений,
- что их было невозможно оставить без внимания и они были удостоены
- превилегии вносить изменения, и мы уверены, что те исправления, которые
- они внесут будут высокого качества.</P>
-
- <H4><A name="1.13">1.13</A>) Как отравить сообщение об ошибке??</H4>
-
- <P>Пожалуйста посетите страничку <A href=
- "http://www.postgresql.org/bugs/bugs.php">PostgreSQL BugTool</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 с другими
- <SMALL>СУБД</SMALL>?</H4>
-
- <P>
- Существует несколько методов сравнения программного обеспечения:
- возможности, производительность, надежность, поддержка и цена.</P>
-
- <DL>
- <DT><B>Возможности</B></DT>
-
- <DD>PostgreSQL имеет большинство возможностей представленных
- в больших коммерческих <SMALL>СУБД</SMALL>, такие как: транзакции,
- подзапросы, триггеры, обзоры (views), внешний ключ ссылочной
- целостности и разные блокировки. У нас есть некоторые возможности,
- которых нет у них: типы, определяемые пользователем, механизм
- наследования, правила и конкуретное многоверсионное управление
- для работы с содержимым блокировок.<BR>
- <BR>
- </DD>
-
- <DT><B>Производительность</B></DT>
-
- <DD>PostgreSQL имеет производительность схожую с другими коммерческими
- СУБД и с СУБД с открытым исходным кодом, в каких-то аспектах работая
- быстрее чем они, в каких-то медленее. В сравнении с MySQL или линейными
- СУБД, мы медленее при операциях вставки/обновления, потому что управляем
- транзакциями. И разумеется, MySQL не имеет каких-либо возможностей из
- перечисленых выше, в секции <I>Возможности</I>.
- Мы делаем упор на надежность и расширенные возможности, но мы также
- продолжаем увеличивать производительность с каждым выпуском. Существует
- интересная страничка в Интернет, сравнивающая PostgreSQL и MySQL на
- <A href="http://openacs.org/why-not-mysql.html">
-
- http://openacs.org/why-not-mysql.html</A><BR>
-
- <BR>
- </DD>
-
- <DT><B>Надежность</B></DT>
-
- <DD>Мы понимали, что наша <SMALL>СУБД</SMALL> должна быть надежной
- или она ничего не будет стоить. Мы стараемся выпускать хорошо проверенный,
- стабильный код, который содержит минимум ошибок. Каждый выпуск
- проходит стадию бета-тестирования по крайней мере в течении одного
- месяца и наша история выпусков показывает что мы можем предоставлять
- стабильные, монолитные выпуски, которые готовы к продуктивному
- использованию. Мы верим, что мы производим проверку не хуже,
- чем у других СУБД.<BR>
- <BR>
- </DD>
-
- <DT><B>Поддержка</B></DT>
-
- <DD>Наш список рассылки представлен большой группой разработчиков
- и пользователей, которые могут помочь решить любые возникшие
- проблемы. В то же время, мы не гарантируем какие-либо исправления,
- но и разработчики коммерческих <SMALL>СУБД</SMALL> не всегда делают
- исправления. Прямой доступ к разработчикам, сообществу пользователей,
- руководствам и исходным текстам часто делают поддержку PostgreSQL
- превосходящей другие <SMALL>СУБД</SMALL>. Существует коммерческая
- поддержка по результам возникших инцидентов, которая доступна для
- тех кому она нужна. (Смотрите <A href="#1.6">Как получить поддержку?</A>.)<BR>
- <BR>
- </DD>
-
- <DT><B>Цена</B></DT>
-
- <DD>Наш продукт бесплатен как для коммерческого так, и не для
- коммерческого использования. Вы можете добавлять свой код в наш
- продукт без ограничений, за исключением тех, что описываются в
- нашей лицензии стиля BSD, которая приведена выше.<BR>
- <BR>
- </DD>
- </DL>
-
- <H4><A name="1.15">1.15</A>) Как оказать финансовую помощь
- PostgreSQL?</H4>
-
- <P>PostgreSQL имеет одноранговую инфраструктуру с того самого времени
- как мы начали разработку 6 лет назад. Мы должны благодарить за
- это Марка Фоная (Marc Fournier), который создал эту инфраструктуру и
- управляет ей на протяжении этих лет.</P>
-
- <P>Качественная инфраструктура очень важна для проектов с открытым
- исходным кодом. Она предотвращает расколы, которые могут сильно
- задержать поступательное движение проекта.</P>
-
- <P>Разумеется, эта инфраструктура не является дешевой. Существует
- некоторое количество ежемесячных и одноразовых расходов, которые
- требуют денег. Если вы или ваша компания имеет деньги, которые
- можно передать в помощь нашим усилиям, пожалуйста посетите страничку
- <A href=
- "http://www.pgsql.com/pg_goodies">http://www.pgsql.com/pg_goodies</A>
- и сделайте свой вклад.</P>
-
- <P>Хотя на страничке говорится о PostgreSQL, Inc, пункт
- "contributions" предназначен исключительно для поддержки проекта
- PostgreSQL и не передается какой-либо конкретной компании.
- Если хотите, то можете это проверить, написав письмо на контактный адрес.</P>
- <HR>
-
- <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>
-
- <P>PsqlODBC включается в дистрибутив. Больше информации об этом драйвере
- можно найти на <A href=
- "ftp://ftp.PostgreSQL.org/pub/odbc/">ftp://ftp.PostgreSQL.org/pub/odbc/</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>Возможно они будут продавать свой продукт тем кому нужна коммерческая
- поддержка, но бесплатная версия всегда будет доступна. Пожалуйста,
- направляйте вопросы на адрес <A href=
- "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>
-
- <P>Также посмотрите <A href=
- "http://www.postgresql.org/devel-corner/docs/programmer/odbc.html">ODBC
- раздел в руководстве программиста</A>.</P>
-
- <H4><A name="2.2">2.2</A>) Какие инструменты существуют для использования
- PostgreSQL через Web?</H4>
-
- <P>Прекрасное введение во взаимодействие баз данных и Web можно найти на:
- <A href="http://www.webreview.com">http://www.webreview.com</A></P>
-
- <P>Также загляните на <A href=
- "http://www.phone.net/home/mwm/hotlist/">http://www.phone.net/home/mwm/hotlist/.</A></P>
-
- <P>Для интеграции с Web, одним из превосходных инструментов является PHP.
- Домашняя станичка <A
- href="http://www.php.net">http://www.php.net</A>.</P>
-
- <P>Для комплексных решений, многие пользуются Perl интерфейсом и CGI.pm.</P>
-
- <H4><A name="2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс
- пользователя? Генератор отчетов? Встроенный интерфейс для языка
- запросов?</H4>
-
- <P>У нас есть прекрасный горафический интерфейс, называемый
- <I>pgaccess</I>, который является частью дистрибутива. <I>pgaccess</I>
- также емеет генератор отчетов. Его страничка <A href=
- "http://www.flex.ro/pgaccess">http://www.flex.ro/pgaccess</A></P>
-
- <P>Мы также включаем <I>ecpg</I>, который предоставляет встроенный
- интерфейс к языку запросов SQL из C.</P>
-
- <H4><A name="2.4">2.4</A>) Какие языки могут взаимодействовать с
- PostgreSQL?</H4>
-
- <P>Вот эти:</P>
-
- <UL>
- <LI>C (libpq)</LI>
-
- <LI>C++ (libpq++)</LI>
-
- <LI>Embedded C (ecpg)</LI>
-
- <LI>Java (jdbc)</LI>
-
- <LI>Perl (perl5)</LI>
-
- <LI>ODBC (odbc)</LI>
-
- <LI>Python (PyGreSQL)</LI>
-
- <LI>TCL (libpgtcl)</LI>
-
- <LI>C Easy API (libpgeasy)</LI>
-
- <LI>Embedded <SMALL>HTML</SMALL> (<A href=
- "http://www.php.net">PHP from http://www.php.net</A>)</LI>
- </UL>
- <HR>
-
- <H2 align="center">Вопросы администрирования</H2>
-
- <H4><A name="3.1">3.1</A>) Как мне установить PostgreSQL в место отличное
- от <I>/usr/local/pgsql</I>?</H4>
-
- <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/idocs/index.php?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>
-
- <P>По умолчанию, PostgreSQL разрешает только соединения на локальной
- машине через сокеты домена Unix. Другие машины не смогут подключиться к
- базе пока для <I>postmaster</I> не будет задан флаг <I>-i</I>
- <B>и</B> пока не будет разрешена host-авторизация в файле
- <I>$PGDATA/pg_hba.conf</I>. Эти действия делают возможными TCP/IP
- соединения.</P>
-
- <H4><A name="3.6">3.6</A>) Какие настройки мне нужно сделать для улучшения
- производительности?</H4>
-
- <P>Несомненно, индексы могут увеличить скорость выполнения запросов. Команда
- <SMALL>EXPLAIN</SMALL> позволяет вам посмотреть как PostgreSQL
- интерпретирует ваш запрос и какие индексы используются.</P>
-
- <P>Если вы выполняете много операторов <SMALL>INSERT</SMALL>,
- рассмотрите возможность выполнять их в большой пачке, используя
- команду <SMALL>COPY</SMALL>. Это значительно быстрее, чем отдельные
- <SMALL>INSERT.</SMALL> Во-вторых, операторы вне блока транзакции
- <SMALL>BEGIN WORK/COMMIT</SMALL> сами выполняют транзакцию. Подумайте
- над выполнением нескольких операторов в одном блоке транзакции.
- Это уменьшит количество транзакций. Также, задумайтесь над удалением
- и пересозданием индексов, когда вы выполняете большие изменения
- данных.</P>
-
- <P>Существует несколько опций настройки. Вы можете запретить
- <I>fsync()</I> при старте <I>postmaster</I> с опцией <I>-o -F</I>.
- Это предотвратит вызовы <I>fsync()</I>, которые приводят к сбросу
- данных на диск после каждой транзакции.</P>
-
- <P>Вы можете также использовать для <I>postmaster</I> опцию <I>-B</I>
- для увеличения количества буферов разделяемой памяти, которая
- используется backend процессами. Если вы сделаете значение этого параметра
- слишком большим, то <I>postmaster</I> может не запустится потому что
- вы исчерпаете ограничение ядра на объем разделяемой памяти. Каждый
- буфер имеет размер в 8 килобайт и по умолчанию выделяется 64 буфера.</P>
-
- <P>Вы можете также использовать backend опцию <I>-S</I> для увеличения
- максимального количества памяти, которое используется backend процессом
- для временных сортировок. Значение для опции <I>-S</I> задается в
- килобайтах и по умолчанию равно 512 (т.е. 512K).</P>
-
- <P>Вы также можете использовать команду <SMALL>CLUSTER</SMALL> для
- группировки данных в таблицах на совпадающий индекс. Подробности смотрите
- на странице руководства по команде <SMALL>CLUSTER</SMALL>.</P>
-
- <H4><A name="3.7">3.7</A>) Какие возможности для отладки есть в
- наличии?</H4>
-
- <P>PostgreSQL имеет несколько возможностей, позволяющие получить
- информацию о состоянии, которая может быть использована в отладочных
- целях.</P>
-
- <P>Во-первых, при запуске <I>configure</I> с опцией --enable-cassert,
- многие вызовы <I>assert()</I> позволяют отслеживать работу backend
- процесса и остановку программы при возникновении каких-либо
- неожиданностей.</P>
-
- <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>
-
- <P>Это приведет к появлению файла server.log в главном каталоге
- PostgreSQL. Этот файл содержит полезную информацию о проблемах или
- ошибках, возникших на сервере. <I>Postmaster</I> имеет опцию <I>-d</I>,
- которая позволяет получать при протоколировании более детальную
- инфрмацию. Для опции <I>-d</I> указывается число, которое задает уровень
- отладки. Будьте осторожны, так как высокий уровень отладки приводит
- к генерации файлов журнала большого размера.</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>. Используйте отдадчик для подключения к
- <I>postgres</I> <SMALL>PID.</SMALL> Вы можете установить точки
- прерывания в отладчике и запустить запрос из <I>psql</I>. Если
- вы производите отладку запуска <I>postgres</I>, вы можете установить
- PGOPTIONS="-W n", и затем запустить <I>psql</I>. Эта опция приводит
- к задержке процесса запуска на <I>n</I> секунд, в течение которых
- вы можете подключить к процессу отладчик, установить любые точки
- прерывания и продолжить запуск.</P>
-
- <P>Программа <I>postgres</I> имеет опции <I>-s, -A</I>, и <I>-t</I>
- которые могут быть очень полезными для отладки и измерения
- производительности.</P>
-
- <P>Вы также можете скомпилировать PostgreSQL с профилированием для
- того, чтобы увидеть какие функции сколько времени выполняются.
- Файлы профилирования backend'а находятся в каталоге
- <I>pgsql/data/base/dbname</I>. Файл профилирования клиента
- будет помещен в текущий каталог клиента. В Linux для выполнения
- профилирования требуется компиляции с <I>-DLINUX_PROFILE</I>.</P>
-
- <H4><A name="3.8">3.8</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>
-
- <P>В PostgreSQL до версии 6.5, максимальное количество backend процессов
- было 64, и изменение этого количества требовало перекомпиляции после
- установки константы MaxBackendId в <I>include/storage/sinvaladt.h</I>.</P>
-
- <H4><A name="3.9">3.9</A>) Что это за файлы <I>pg_sorttempNNN.NN</I>
- в моем каталоге с базой данных?</H4>
-
- <P>Это временные файлы, генерируемые во время выполнения запроса.
- Например, если для оператора <SMALL>ORDER BY</SMALL> должна быть
- выполнена сортировка, которая требует больше места чем выделенно
- для backend процесса в опции <I>-S</I>, то создается временный файл для
- хранения дополнительных данных.</P>
-
- <P>Временные файлы должны удаляться автоматически, но этого может
- не происходить, если backend процесс падает во время сортировки.
- Если у вас не запущено ни одного backend процесса, то вы можете
- спокойно удалить файлы pg_tempNNN.NN.</P>
- <HR>
-
- <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>
-
- <P>Смотрите станицу руководства посвященную <SMALL>FETCH</SMALL>
- или используйте <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P>
-
- <P>Даже если вы хотите получить только первые несколько записей,
- будет выполнен весь запрос. Рассмотрим запрос, который имеет
- <SMALL>ORDER BY.</SMALL> Если есть какой-либо индекс, который
- совпадает с <SMALL>ORDER BY</SMALL>, PostgreSQL может
- выдать только несколько первых запрошенных записей или может
- выполнять запрос пока не будут выданы желаемые записи.</P>
-
- <H4><A name="4.3">4.3</A>) Как получить список таблиц или других
- компонентов в <I>psql</I>?</H4>
-
- <P>Вы можете посмотреть исходный код <I>psql</I> в файле
- <I>pgsql/src/bin/psql/describe.c</I>. Он содержит команды
- <SMALL>SQL</SMALL> которые генерируются при вводе в psql команд,
- начинающихся с обратной косой черты. Вы также моежете запустить
- <I>psql</I> с опцией <I>-E</I> так, чтобы эта программа выдавала
- запросы, которые она использует для выполнения заданных вами
- команд.</P>
-
- <H4><A name="4.4">4.4</A>) Как удалить колонку из таблицы?</H4>
-
- <P>Мы не поддерживаем <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>
-
- <H4><A name="4.5">4.5</A>) Каковы максимальные размеры для записей,
- таблиц и базы данных?</H4>
-
- <P>Существуют следующие ограничения:</P>
-<PRE>
- Максимальный размер базы? неограничен (существуют базы на 60 GB)
- Максимальный размер таблицы? 16 TB
- Максимальный размер записи? неограничен начиная с версии 7.1
- Максимальный размер поля? 1 GB начиная с версии 7.1
- Максимальное количество записей в таблице? неограничено
- Максимальное количество колонок в таблице? 250-1600 в зависимости от типа
- Максимальное количество индексов в таблице? неограничено
-</PRE>
- Разумеется, понятие "неограничено" на самом деле ограничивается
- доступным дисковым пространиством и размерами памяти/своппинга.
- Когда значения перечисленные выше неоправдано большие, может
- пострадать производительность.
-
- <P>Максимальный размер таблицы в 16 TB не требует чтобы операционная
- система поддерживала файлы больших размеров. Большие таблицы хранятся
- как множество файлов размером в 1 GB, так что ограничения, которые
- накладывает файловая система не важны.</P>
-
- <P>Максимальный размер таблицы и максимальное количество колонок
- могут быть увеличены, если размер блока по умолчанию будет увеличен
- до 32k.</P>
-
- <H4><A name="4.6">4.6</A>) Как много дискового пространства в базе данных
- нужно для сохранения данных из обычного текстового файла?</H4>
-
- <P>СУБД PostgreSQL может потребоваться дискового пространства до 5 раз
- больше для сохранения данных из простого текстового файла.</P>
-
- <P>В качестве примера, рассмотрим файл в 100,000 строк в каждой, из
- которых целое число и текстовое описание. При этом длина текста,
- в среднем, составляет 20 байт. Размер простого файла составит 2.8 MB.
- Размер базы PostgreSQL, содержащей эти же данные составит приблизительно
- 6.4 MB из которых:</P>
-<PRE>
- 36 байт: на каждый заголовок записи (приблизительно)
- + 24 байта: одно поле с целочисленным типом и одно текстовое поле
- + 4 байта: указатель на странице для всей записи
- ----------------------------------------
- 64 байт на запись
-
- Размер страницы данных в PostgreSQL составляет 8192 байт (8 KB), так что:
-
- 8192 байт на страницу
- ------------------- = 128 записей на страницу БД (с округлением)
- 64 байт на запись
-
- 100000 строк данных
- -------------------- = 782 страницы в БД
- 128 записей на страницу
-
-782 страницы БД * 8192 байт на страницу = 6,406,144 байт (6.4 MB)
-</PRE>
-
- <P>Индексы не требуют так много, но поскольку они создаются для
- большого количества данных, они также могут быть велики.</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>
-
- <P>Индексы не используются для каждого запроса автоматически. Они
- используются только если таблица больше минимального размера и запрос
- выбирает только маленький процент записей в таблице. Так устроено,
- потому что доступ к диску с применением рандомизации при сканировании
- индексов иногда медленнее, чем простое чтение таблицы или ее
- последовательное сканирование.</P>
-
- <P>Чтобы определить необходимость использования индекса для какой-либо
- таблицы, PostgreSQL должен иметь статистику по этой таблице. Эта
- статистика собирается при использовании <SMALL>VACUUM ANALYZE</SMALL>
- или просто <SMALL>ANALYZE</SMALL>. Используя статистику, оптимизатор
- узнает о том как много записей в таблице и если он должен использовать
- индексы, то он может принимать лучшие решения. Статистика также
- влияет на определение оптимального порядка связывания и метода связывания.
- Сбор статистики должен периодически выполнятся при изменении содержимого
- таблицы.</P>
-
- <P>Обычно индексы не используются для <SMALL>ORDER BY</SMALL> или для
- выполнения связываний. Последовательный перебор следующий за явной
- сортировкой обычно быстрее, чем поиск по индексам в большой таблице.
- Однако, <SMALL>ORDER BY</SMALL> часто комбинируется с <SMALL>LIMIT</SMALL>
- и в этом случае индекс будет использоваться, поскольку при выполнении
- будет возвращаться небольшая часть таблицы.</P>
-
- <P>Когда используются операции с шаблонами, например <SMALL>LIKE</SMALL>
- или <I>~</I>, индексы могут быть использованы только если начало
- строки-шаблона для поиска, соответствует началу искомой строки.
- Следовательно, для того, чтобы использовать индексы, шаблон в
- <SMALL>LIKE</SMALL> не должен начинаться на <I>%</I>, а в <I>~</I>
- (поиск регулярного выражения) должен начинаться на <I>^</I>.</P>
-
- <H4><A name="4.9">4.9</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>Вы можете найти этот документ в книге Stonebraker'а "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>
-
- <P>Оператор <I>~</I> производит поиск регулярного выражения, а оператор
- <I>~*</I> производит независимый от регистра букв поиск регулярного
- выражения. Независимый от регистра вариант <SMALL>LIKE</SMALL> называется
- <SMALL>ILIKE</SMALL> в PostgreSQL начиная с версии 7.1.</P>
-
- <P>Независимое от регистра сравнение обычно выражается так:</P>
-<PRE>
- SELECT *
- FROM tab
- WHERE lower(col) = 'abc'
-
-</PRE>
- Эта конструкция не будет использовать стандартный индекс. Однако, если
- вы создадите функциональный индекс, он будет использован:
-<PRE>
- CREATE INDEX tabindex on tab (lower(col));
-
-</PRE>
-
- <H4><A name="4.13">4.13</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>
-<PRE>
-Тип Внутреннее имя Замечания
---------------------------------------------------
-"char" char 1 символ
-CHAR(#) bpchar заполняется пустотой до фиксированной длины
-VARCHAR(#) varchar размер задает максимальную длину, нет заполнения
-TEXT text нет задаваемого верхнего ограничения или длины
-BYTEA bytea массив байт переменной длины (можно использовать null-байт без опаски)
-</PRE>
-
- <P>Внутреннее имя вы можете увидеть, когда смотрите системные каталоги
- и в некоторых сообщениях об ошибках.</P>
-
- <P>Последние четыре типа являются "varlena" типами (т.е., первые
- четыре байта на диске являются длинной, за которой следуют данные).
- Таким образом, фактически используемое пространство больше, чем
- обозначенный размер. Однако, эти типы данных также поддаются сжатию
- или могут быть сохранены не в строком виде через <SMALL>TOAST</SMALL>,
- так что занимаемое дисковое пространство может также быть и меньше,
- чем ожидалось.</P>
-
- <P><SMALL>CHAR()</SMALL> - это лучшее решение для хранения строк, которые
- обычно имеют одинаковую длину. <SMALL>VARCHAR()</SMALL> - это лучшее
- решение, когда нужно хранить строки переменной длины, но не превышающие
- определенного размера. <SMALL>TEXT</SMALL> - это лучшее решение для строк
- неограниченной длины, с максимально допустимой длиной в 1 гигабайт.
- <SMALL>BYTEA</SMALL> для хранения бинарных данных, значения которых
- могут включать <SMALL>NULL</SMALL> байты.</P>
-
- <H4><A name="4.15.1">4.15.1</A>) Как мне создать поле
- serial/с-авто-увеличением?</H4>
-
- <P>PostgreSQL поддерживает тип данных <SMALL>SERIAL</SMALL>. Он
- автоматически создает последовательность и индекс для колонки.
- Например:</P>
-<PRE>
- CREATE TABLE person (
- id SERIAL,
- name TEXT
- );
-</PRE>
- автоматически транслируется в:
-<PRE>
- CREATE SEQUENCE person_id_seq;
- CREATE TABLE person (
- id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
- name TEXT
- );
- CREATE UNIQUE INDEX person_id_key ON person ( id );
-</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>) Как мне получить значение при вставке
- <SMALL>SERIAL</SMALL>?</H4>
-
- <P>Один из способов состоит в получении следующего значения
- <SMALL>SERIAL</SMALL> из объекта sequence с помощью функции
- <I>nextval()</I> <I>перед</I> вставкой и затем вставлять это значение
- явно. Используйте таблицу-пример в <A href="#4.15.1">4.15.1</A>, чтобы
- увидеть как это делается в Perl:</P>
-<PRE>
- new_id = output of "SELECT nextval('person_id_seq')"
- INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal');
-</PRE>
- Затем вы должны также сохранить новое значение в переменной
- <CODE>new_id</CODE> для его использования в других запросах (например
- таких как внешний ключ для таблицы <CODE>person</CODE>). Заметим,
- что имя автоматически созданного объекта <SMALL>SEQUENCE</SMALL>
- будет &lt;<I>table</I>&gt;_&lt;<I>serialcolumn</I>&gt;_<I>seq</I>,
- где <I>table</I> и <I>serialcolumn</I> являются соответственно
- именами вашей таблицы и вашей колонки <SMALL>SERIAL</SMALL>.
-
- <P>В качестве альтернативы, вы можете получить назначенное значение
- <SMALL>SERIAL</SMALL> с помощью функции <I>currval</I>()
- <I>после</I> проведения обычной операции вставки, например</P>
-<PRE>
- INSERT INTO person (name) VALUES ('Blaise Pascal');
- new_id = output of "SELECT currval('person_id_seq')";
-</PRE>
- И наконец, вы можете использовать значение
- <A href="#4.16"><SMALL>OID</SMALL></A>, возращаемое из опертора
- <SMALL>INSERT</SMALL> чтобы увидеть значение по умолчанию, что
- предположительно является наименее переносимым на другие платформы
- решением. В 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>) Не может ли получиться так, что
- использование <I>currval()</I> и <I>nextval()</I> приведет к
- зациклированию с другими пользователями?</H4>
-
- <P>Нет. Currval() возвращает текущее значение, назначенное вашем
- backend'ом, а не другими пользователями.</P>
-
- <H4><A name="4.15.4">4.15.4</A>) Почему числа из моей последовательности
- не используются снова при отмене транзакции? Почему создаются разрывы
- при нумерации в колонке, где я использую последовательность/SERIAL?</H4>
-
- <P>Для реализации конкуретности, значения последовательностей, при
- необходимости выдаются во время запуска транзакций и не блокируются
- до полного выполнения транзакций. Это может вызывать разрывы в
- нумерации при отмене транзакций.</P>
-
-
- <H4><A name="4.16">4.16</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>backend/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(old_oid oid, mycol int);
- SELECT old_oid, mycol INTO new FROM old;
- COPY new TO '/tmp/pgtable';
- DELETE FROM new;
- COPY new WITH OIDS FROM '/tmp/pgtable';
-<!--
- CREATE TABLE new_table (mycol int);
- INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table;
--->
-</PRE>
-
- <P><SMALL>OID</SMALL> хранится как 4-х байтное целое и не может превышать
- значение в 4 миллиарда. Однако, еще никто не сообщил о том, что такое
- произошло, но мы планируем до того как это случиться избавится от
- этого ограничения.</P>
-
- <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://www.comptechnews.com/~reaster/dbdesign.html">http://www.comptechnews.com/~reaster/dbdesign.html</A></P>
-
- <H4><A name="4.18">4.18</A>) Почему я получаю ошибку <I>"ERROR: Memory
- exhausted in AllocSetAlloc()"</I>?</H4>
-
- <P>Если у вас версия ниже 7.1, то обновление версии может решить эту
- проблему. Также возможно, что у вас закончилась виртуальная память
- или что ваше ядро имеет маленький лимит на определенные ресурсы.
- Попытайтесь перед запуском <I>postmaster</I> выполнить следующие
- команды:</P>
-<PRE>
- ulimit -d 262144
- limit datasize 256m
-</PRE>
- В зависимости от командного интерпретатора shell, только одна из данных
- команд выполнится успешно, но она позволит вам установить больший
- сегмент данных процесса и возможно решит проблему. Эта команда
- изменяет параметры текущего процесса и всех его потомков, созданных
- после её запуска. Если у вас возникла проблема с <SMALL>SQL</SMALL>
- клиентом, потому что backend возвращает слишком большой объем данных,
- попытайтесь выполнить эту команду перед запуском клиента.
-
- <H4><A name="4.19">4.19</A>) Как мне узнать, какая версия PostgreSQL
- запущена?</H4>
-
- <P>Из <I>psql</I>, наберите <CODE>select version();</CODE></P>
-
- <H4><A name="4.20">4.20</A>) Почему при работе с моим большим объектом
- я получаю ошибку <I>"invalid large obj descriptor"</I>?</H4>
-
- <P>Вам нужно при использовании большого объекта поместить в начале
- <CODE>BEGIN WORK</CODE> и в конце <CODE>COMMIT</CODE>, а внутри
- получившегося блока <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
-
- <P>В настоящий момент PostgreSQL требует, чтобы при закрытии большого
- объекта происходило выполнение транзакции. Таким образом, первая же
- попытка сделать что-либо с большим объектом, не соблюдая данного правила
- приведет к сообщению <I>invalid large obj descriptor</I>, так как
- код выполняющий работу над большим объектом (по крайней мере в
- настоящий момент) будет генерировать сообщение об ошибке если вы не
- используете транзакцию.</P>
-
- <P>Если вы используете такой интерфейс клиента как <SMALL>ODBC</SMALL>,
- вам возможно понадобится установить <CODE>auto-commit off.</CODE></P>
-
- <H4><A name="4.21">4.21</A>) Как мне создать колонку которая по умолчанию
- будет содержать текущее время?</H4>
-
- <P>Используйте <I>CURRENT_TIMESTAMP</I>:</P>
-<PRE>
-<CODE>CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
-</CODE>
-</PRE>
-
- <H4><A name="4.22">4.22</A>) Почему мои подзапросы, использующие
- <CODE><SMALL>IN</SMALL></CODE> так медленно работаеют?</H4>
-
- <P>В настоящий момент, мы связываем позапросы для внешних запросов
- через последовательный перебор результата подзапроса для каждой
- записи внешнего запроса. Попробуйте заменить <CODE>IN</CODE> на
- <CODE>EXISTS</CODE>:</P>
-<PRE>
-<CODE>SELECT *
- FROM tab
- WHERE col1 IN (SELECT col2 FROM TAB2)
-</CODE>
-</PRE>
- на:
-<PRE>
-<CODE>SELECT *
- FROM tab
- WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)
-</CODE>
-</PRE>
- Мы надеемся убрать это ограничение в будущем выпуске.
-
- <H4><A name="4.23">4.23</A>) Как мне выполнить внешнее связывание?</H4>
-
- <P>PostgreSQL начиная с версии 7.1 поддерживает внешнее связывание,
- используя стандартный синтаксис SQL. Вот два примера:</P>
-<PRE>
- SELECT *
- FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-</PRE>
- or
-<PRE>
- SELECT *
- FROM t1 LEFT OUTER JOIN t2 USING (col);
-</PRE>
-
- <P>Это идентичные запросы связывания t1.col и t2.col, также возвращают
- любые несвязанные записи в t1 (которые не совпадают с t2).
- <SMALL>RIGHT</SMALL> связывание должно добавить несвязанные записи
- t2. <SMALL>FULL</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>
-
- <P>Не существует способа создать запрос к базам данных отличным от текущей.
- Поскольку PostgreSQL загружает системные каталоги специфичные для базы
- данных, непонятно даже, как должен себя вести такой межбазовый запрос.</P>
-
- <P>Разумеется, клиент может одновременно устанавливать соедиенения с
- различными базами данных и таких образом объединять информацию из них.</P>
-
- <H4><A name="4.25">4.25</A>) Как мне вернуть из функции несколько записей?</H4>
-
- <P>Вы можете возвращать из функций PL/pgSQL списки результатов, используя
- <i>refcursors</i>. Смотрите <A
- href="http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html">
- http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html,</a>
- секцию 23.7.3.3.</P>
-
- <H4><A name="4.26">4.26</A>) Почему я не могу надежно создавать/удалять
- временные таблицы в функциях PL/PgSQL?</H4>
- PL/PgSQL кэширует содержимое функции и один из негативных эффектов этого
- состоит в том, что если функция PL/PgSQL обращается к временной таблице
- и эта таблица позднее удаляется и пересоздается, а функция затем вызывается
- снова, то ее вызов приведет к ошибке, потому что скэшированное содержимое
- функции содержит указатель на старую временную таблицу. Чтобы решить эту
- проблему, используйте <SMALL>EXECUTE</SMALL> для доступа к временным
- таблицам в PL/PgSQL. Использование этого оператора заставит запрос
- перегенерироваться каждый раз.
- <HR>
-
- <H2 align="center">Расширения PostgreSQL</H2>
-
- <H4><A name="5.1">5.1</A>) Я написал функцию определяемую пользователем.
- Когда я запускаю ее в <I>psql</I>, почему я получаю dump core?</H4>
-
- <P>Проблема может заключаться в нескольких вещах. Попытайтесь сперва
- протестировать вашу функцию в отдельной самостоятельной программе.</P>
-
- <H4><A name="5.2">5.2</A>) Как я могу внести некоторые классные новые
- типы и функции в PostgreSQL?</H4>
-
- <P>Отправьте ваши расширения в список рассылки <I>pgsql-hackers</I>
- и они по возможности будут помещены в подкаталог <I>contrib/</I>.</P>
-
- <H4><A name="5.3">5.3</A>) Как мне написать C функцию, возвращающую
- запись?</H4>
-
- <P>Это требует некоего шаманства так как авторы никогда не пробовали
- делать это, хотя в приницпе это возможно.</P>
-
- <H4><A name="5.4">5.4</A>) Я изменил исходный файл. Почему после
- перекомпиляции я не вижу изменений?</H4>
-
- <P>Файлы <I>Makefile</I> не имеют правильных зависимостей для include
- файлов. Вы должны выполнить <I>make clean</I> и затем <I>make</I>.
- Если вы используете <SMALL>GCC</SMALL> вы можете использовать опцию
- <I>--enable-depend</I> в <I>configure</I> чтобы поручить компилятору
- автоматически отслеживать зависимости.</P>
- </BODY>
-</HTML>
-