diff options
Diffstat (limited to 'doc/src/FAQ/FAQ_russian.html')
-rw-r--r-- | doc/src/FAQ/FAQ_russian.html | 1387 |
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 >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>. Файл профилирования клиента - будет помещен в текущий каталог клиента. В 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> - будет <<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> - - <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> - |