diff options
author | Bruce Momjian <bruce@momjian.us> | 2002-02-22 13:03:01 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2002-02-22 13:03:01 +0000 |
commit | 876eda539c48076723b5f5392bd065bb36aeec78 (patch) | |
tree | ead06f21647e827850da30a0a8fba42ccee12f6f /doc/src | |
parent | a81dc0d168f2343a764169081002cb6217ba3a1c (diff) | |
download | postgresql-876eda539c48076723b5f5392bd065bb36aeec78.tar.gz |
BACKPATCH:
Add Russian FAQ to 7.2.1. Why not?
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/FAQ/FAQ_russian.html | 1373 |
1 files changed, 1373 insertions, 0 deletions
diff --git a/doc/src/FAQ/FAQ_russian.html b/doc/src/FAQ/FAQ_russian.html new file mode 100644 index 0000000000..a05321b167 --- /dev/null +++ b/doc/src/FAQ/FAQ_russian.html @@ -0,0 +1,1373 @@ +<!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>Дата последнего обновления: Четверг 18 Февраля 17:56:04 EST 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> + + + <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 может работать в двух режима. В нормальном <I>fsync</I> + режиме, каждая завершенная транзакция сбрасывается на диск, + гарантируя, что если операционная система или питание рухнет + в следующие несколько секунд, все ваши данные безопасно + сохранятся на диске. В этом режиме, мы работаем медленее, + чем большинство коммерческих СУБД, отчасти потому, что некоторые + из них делают у себя по умолчанию такой консервативный сброс на диск. + В режиме <I>no-fsync</I>, мы обычно быстрее чем коммерческие СУБД, + но в этом режиме, падение операциооной системы может привести к + потере данных. Мы работаем над тем чтобы предоставить промежуточный + режим, который обеспечивал более высокую производительность, + чем <I>fsync</I> режим и позволял сохранить целостность данных + записанных в течении 30 секунд до падения операционной системы.<BR> + <BR> + В сравнении с 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> + Мы управляем каждым пользовательским соединением, создавая + Unix backend процесс. Backend процессы разделяют буферы данных и информацию + о блокировках. При наличии нескольких процессоров, несколько + backend процессов легко могут быть запущены на разных процессорах.<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 >server.log 2>&1 & +</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>. Файл профилирования клиента + будет помещен в текущий каталог клиента.</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> + SELECT ... -- выборка всех колонок за исключением той, которую хотите удалить + INTO TABLE new_table + FROM old_table; + DROP TABLE old_table; + ALTER TABLE new_table RENAME TO old_table; +</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> имеет несколько команд, начинающихся с обратной косой + черты, для того чтобы просматривать такую информацию. Используйте + \? для того, чтобы увидеть эти команды.</P> + + <P>Также смотрите файл <I>pgsql/src/tutorial/syscat.source</I>. В нем + представлены многие операторы <SMALL>SELECT</SMALL> которые нужны + для получения информации из системных таблиц базы данных.</P> + + <H4><A name="4.8">4.8</A>) У меня медленно работают запросы или не + происходит использования индексов. Почему?</H4> + + <P>PostgreSQL не управляет статистикой автоматически. Для обновления + статистики должен быть запущен оператор V<SMALL>ACUUM</SMALL>. + После того, как статистика обновилась, оптимизатор узнает о том как + много записей в таблице и если он должен использовать индексы, то + он может принимать лучшие решения. Заметим, что оптимизатор не использует + индексы в случае, когда таблица маленькая, потому что простой + последовательный перебор будет быстрее.</P> + + <P>Для специфической статистики по колонкам, используйте <SMALL>VACUUM + ANALYZE.</SMALL> V<SMALL>ACUUM ANALYZE</SMALL> является важным для + комплексных запросов множественного связывания, так как оптимизатор + может оценить количество записей, возвращаемых от каждой таблицы и + выбрать правильный порядок связывания. Backend не осуществляет + для себя отслеживание статистики по колонкам, так что для сбора + статистики нужно периодически запускать <SMALL>VACUUM ANALYZE</SMALL>.</P> + + <P>Обычно индексы не используются для <SMALL>ORDER BY</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> + будет <<I>table</I>>_<<I>serialcolumn</I>>_<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->{pg_oid_status}</I> + после <I>$sth->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> + <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> + |