|
|
|
@ -12,12 +12,12 @@ |
|
|
|
|
<BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" alink="#0000ff"> |
|
|
|
|
<H1>Ответы на часто задаваемые вопросы по PostgreSQL</H1> |
|
|
|
|
|
|
|
|
|
<P>Дата последнего обновления: Понедельник 14 февраля 23:35:09 EST 2005</P> |
|
|
|
|
<P>Дата последнего обновления: Понедельник 30 мая 09:11:03 EDT 2005</P> |
|
|
|
|
|
|
|
|
|
<P>Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (<A href= |
|
|
|
|
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR> |
|
|
|
|
</P> |
|
|
|
|
<P>Перевел на русский: Виктор Вислобоков (<A href= |
|
|
|
|
<P>Перевёл на русский: Виктор Вислобоков (<A href= |
|
|
|
|
"mailto:corochoone@perm.ru">corochoone@perm.ru</A>)<BR> |
|
|
|
|
</P> |
|
|
|
|
|
|
|
|
@ -43,6 +43,7 @@ |
|
|
|
|
<A href="#1.11">1.11</A>) Как присоединится к команде разработчиков?<BR> |
|
|
|
|
<A href="#1.12">1.12</A>) Как сравнивать PostgreSQL с другими |
|
|
|
|
<SMALL>СУБД</SMALL>?<BR> |
|
|
|
|
<A href="#1.13">1.13</A>) Кто управляет PostgreSQL?<BR> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<H2 align="center">Вопросы пользователей по клиентской части</H2> |
|
|
|
@ -87,8 +88,9 @@ |
|
|
|
|
<A href="#4.8">4.8</A>) Как мне выполнить поиск регулярного выражения |
|
|
|
|
и поиск независимый от регистра букв поиск регулярного выражения? |
|
|
|
|
Как мне использовать индекс для поиска независимого от регистра букв?<BR> |
|
|
|
|
<A href="#4.9">4.9</A>) Как я могу определить, что значение поля равно |
|
|
|
|
<SMALL>NULL</SMALL> в каком-либо запросе?<BR> |
|
|
|
|
<A href="#4.9">4.9</A>) Как мне определить, что значение поля равно |
|
|
|
|
<SMALL>NULL</SMALL> в каком-либо запросе? Могу я отсортировать поля |
|
|
|
|
<SMALL>NULL</SMALL> или нет?<BR> |
|
|
|
|
<A href="#4.10">4.10</A>) Каковы отличия между разными символьными |
|
|
|
|
типами?<BR> |
|
|
|
|
<A href="#4.11.1">4.11.1</A>) Как мне создать поле serial/с-авто-увеличением?<BR> |
|
|
|
@ -101,38 +103,26 @@ |
|
|
|
|
не используются снова при отмене транзакции? Почему создаются разрывы |
|
|
|
|
при нумерации в колонке, где я использую последовательность/SERIAL?<BR> |
|
|
|
|
<A href="#4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое |
|
|
|
|
<SMALL>TID</SMALL>?<BR> |
|
|
|
|
<SMALL>CTID</SMALL>?<BR> |
|
|
|
|
<A href="#4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory |
|
|
|
|
exhausted in AllocSetAlloc()"</I>?<BR> |
|
|
|
|
<A href="#4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL |
|
|
|
|
запущена?<BR> |
|
|
|
|
<A href="#4.15">4.15</A>) Почему при работе с моим большим объектом |
|
|
|
|
я получаю ошибку <I>"invalid large obj descriptor"</I>?<BR> |
|
|
|
|
<A href="#4.16">4.16</A>) Как мне создать колонку которая по умолчанию |
|
|
|
|
<A href="#4.15">4.15</A>) Как мне создать колонку которая по умолчанию |
|
|
|
|
будет содержать текущее время?<BR> |
|
|
|
|
<A href="#4.17">4.17</A>) Как выполнить внешнее связывание?<BR> |
|
|
|
|
<A href="#4.18">4.18</A>) Как выполнять запросы, использующие несколько |
|
|
|
|
<A href="#4.16">4.16</A>) Как выполнить внешнее связывание?<BR> |
|
|
|
|
<A href="#4.17">4.17</A>) Как выполнять запросы, использующие несколько |
|
|
|
|
баз данных?<BR> |
|
|
|
|
<A href="#4.19">4.19</A>) Как мне вернуть из функции несколько строк таблицы?<BR> |
|
|
|
|
<A href="#4.20">4.20</A>) Почему я получаю ошибку "missing oid", |
|
|
|
|
когда обращаютсь к временным таблицам в функциях PL/PgSQL?<BR> |
|
|
|
|
<A href="#4.21">4.21</A>) Какие опции шифрования существуют?<BR> |
|
|
|
|
|
|
|
|
|
<H2 align="center">Расширения PostgreSQL</H2> |
|
|
|
|
<A href="#5.1">5.1</A>) Я написал функцию определяемую пользователем. |
|
|
|
|
Когда я запускаю ее в <I>psql</I>, почему я получаю core dump?<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> |
|
|
|
|
|
|
|
|
|
<A href="#4.18">4.18</A>) Как мне вернуть из функции несколько строк таблицы?<BR> |
|
|
|
|
<A href="#4.19">4.19</A>) Почему я получаю ошибку "relation with OID #### |
|
|
|
|
не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?<BR> |
|
|
|
|
<A href="#4.20">4.20</A>) Какие есть решения для репликации?<BR> |
|
|
|
|
|
|
|
|
|
<HR> |
|
|
|
|
|
|
|
|
|
<H2 align="center">Общие вопросы</H2> |
|
|
|
|
|
|
|
|
|
<H4><A name="1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название?</H4> |
|
|
|
|
<H3><A name="1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название?</H3> |
|
|
|
|
|
|
|
|
|
<P>PostgreSQL произносится <I>Post-Gres-Q-L (Пост-Грес-Кью-Эл)</I>, |
|
|
|
|
также часто говорят просто <I>Postgres</I>.</P> |
|
|
|
@ -151,7 +141,7 @@ |
|
|
|
|
http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html</A> |
|
|
|
|
</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="1.2">1.2</A>) Каковы авторские права на PostgreSQL?</H4> |
|
|
|
|
<H3><A name="1.2">1.2</A>) Каковы авторские права на PostgreSQL?</H3> |
|
|
|
|
|
|
|
|
|
<P>PostgreSQL распространяется по классической лицензии BSD. Эта |
|
|
|
|
лицензия не содержит ограничений на то, как будет использоваться |
|
|
|
@ -163,7 +153,7 @@ |
|
|
|
|
<P>Система Управления Базами Данных PostgreSQL</P> |
|
|
|
|
|
|
|
|
|
<P>Portions copyright (c) 1996-2005, PostgreSQL Global Development |
|
|
|
|
Group Portions Copyright (c) 1994-6 Regents of the University of |
|
|
|
|
Group Portions Copyright (c) 1994-1996 Regents of the University of |
|
|
|
|
California</P> |
|
|
|
|
|
|
|
|
|
<P>Предоставляются права на использование, копирование, изменение |
|
|
|
@ -187,16 +177,16 @@ |
|
|
|
|
"КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ |
|
|
|
|
СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="1.3">1.3</A>) На каких платформах работает PostgreSQL?</H4> |
|
|
|
|
<H3><A name="1.3">1.3</A>) На каких платформах работает PostgreSQL?</H3> |
|
|
|
|
|
|
|
|
|
<P>Обычно, PostgreSQL может работать на любой современной платформе |
|
|
|
|
совместимой с Unix. В инструкции по установке, вы найдете список |
|
|
|
|
тех платформ, на которых были проведены тестовые запуски PostgreSQL |
|
|
|
|
к моменту выхода данной версии.</P> |
|
|
|
|
|
|
|
|
|
<P>Начиная с версии 8.0, PostgreSQL без всяких ухищрений работает на |
|
|
|
|
операционных системах Microsoft Windows, основанных на NT, таких как |
|
|
|
|
Win2000, WinXP и Win2003. Пакет инсталлятора доступен по адресу |
|
|
|
|
<P>PostgreSQL также работает на операционных системах Microsoft |
|
|
|
|
Windows, основанных на NT, таких как Win2000, WinXP и Win2003. |
|
|
|
|
Пакет инсталлятора доступен по адресу |
|
|
|
|
<A href="http://pgfoundry.org/projects/pginstaller"> |
|
|
|
|
http://pgfoundry.org/projects/pginstaller</A>. Версии Windows, |
|
|
|
|
основанные на MS-DOS (Win95, Win98, WinMe) могут запускать |
|
|
|
@ -208,14 +198,13 @@ |
|
|
|
|
<A href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F"> |
|
|
|
|
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</A>.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="1.4">1.4</A>) Где можно взять PostgreSQL?</H4> |
|
|
|
|
<H3><A name="1.4">1.4</A>) Где можно взять PostgreSQL?</H3> |
|
|
|
|
|
|
|
|
|
<P>Например, воспользовавшись анонимным доступом на ftp сайт |
|
|
|
|
PostgreSQL <A href= |
|
|
|
|
"ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>. |
|
|
|
|
Список зеркал вы найдете на нашем основном сайте.</P> |
|
|
|
|
<P>Через браузер, используя <a href="http://www.postgresql.org/ftp/"> |
|
|
|
|
http://www.postgresql.org/ftp/</a> и через ftp, используя |
|
|
|
|
<A href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A>.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="1.5">1.5</A>) Где получить поддержку?</H4> |
|
|
|
|
<H3><A name="1.5">1.5</A>) Где получить поддержку?</H3> |
|
|
|
|
|
|
|
|
|
<P>Сообщество PostgreSQL предоставляет помощь множеству пользователей |
|
|
|
|
через E-mail. Основной web-сайт для подписки на списки рассылки по |
|
|
|
@ -233,28 +222,30 @@ |
|
|
|
|
языках. Также существует канал по PostgreSQL на сервере EFNet.</P> |
|
|
|
|
|
|
|
|
|
<P>Список коммерческой поддержки компаний доступен на |
|
|
|
|
<A href="http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P> |
|
|
|
|
<A href="http://techdocs.postgresql.org/companies.php"> |
|
|
|
|
http://techdocs.postgresql.org/companies.php</A>.</P> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="1.6">1.6</A>) Как мне сообщить об ошибке?</H4> |
|
|
|
|
<H3><A name="1.6">1.6</A>) Как мне сообщить об ошибке?</H3> |
|
|
|
|
|
|
|
|
|
<P>Посетите страничку со специальной формой отчёта об ошибке в |
|
|
|
|
PostgreSQL по адресу: |
|
|
|
|
<A href="http://www.postgresql.org/support/submitbug"> |
|
|
|
|
<A HREF="http://www.postgresql.org/support/submitbug"> |
|
|
|
|
http://www.postgresql.org/support/submitbug</A>.</P> |
|
|
|
|
|
|
|
|
|
<P>Также проверьте наличие более свежей версии PostgreSQL на нашем |
|
|
|
|
FTP сайте <A href="ftp://ftp.postgresql.org/pub"> |
|
|
|
|
ftp://ftp.PostgreSQL.org/pub</A>.</P> |
|
|
|
|
FTP сайте <A href="ftp://ftp.postgresql.org/pub/"> |
|
|
|
|
ftp://ftp.PostgreSQL.org/pub/</A>. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="1.7">1.7</A>) Какая последняя версия?</H4> |
|
|
|
|
<H3><A name="1.7">1.7</A>) Какая последняя версия?</H3> |
|
|
|
|
|
|
|
|
|
<P>Последний выпуск PostgreSQL - это версия 8.0.1</P> |
|
|
|
|
<P>Последний выпуск PostgreSQL - это версия 8.0.2</P> |
|
|
|
|
|
|
|
|
|
<P>Мы планируем выпускать новые версии каждые 10-12 месяцев.</P> |
|
|
|
|
<P>Мы планируем выпускать новые старшие версии каждый год, |
|
|
|
|
а младшие версии каждые несколько месяцев.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="1.8">1.8</A>) Какая документация имеется в наличии?</H4> |
|
|
|
|
<H3><A name="1.8">1.8</A>) Какая документация имеется в наличии?</H3> |
|
|
|
|
|
|
|
|
|
<P>PostgreSQL содержит много документации, включая большое руководство, |
|
|
|
|
страницы электронного руководства man и некоторые маленькие тестовые |
|
|
|
@ -264,11 +255,13 @@ |
|
|
|
|
|
|
|
|
|
<P>Существует две книги по PostgreSQL доступные по адресам <A href= |
|
|
|
|
"http://www.PostgreSQL.org/docs/books/awbook.html">http://www.PostgreSQL.org/docs/books/awbook.html</A> |
|
|
|
|
и <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>. |
|
|
|
|
Список книг по PostgreSQL, которые можно купить доступен по адресу |
|
|
|
|
<a href="http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php</a>. |
|
|
|
|
Кроме того, по адресу <a href="http://techdocs.postgresql.org">http://techdocs.PostgreSQL.org/</a> |
|
|
|
|
вы можете найти коллекцию технических статей посвященных PostgreSQL.</p> |
|
|
|
|
и <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>. |
|
|
|
|
Есть несколько книг по PostgreSQL, которые можно купить. |
|
|
|
|
Одну из наиболее популярных написал Корри Дуглас (Korry Douglas). |
|
|
|
|
Список обзоров по этим книгам доступен по адресу |
|
|
|
|
<a href="http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php</a>. |
|
|
|
|
Кроме того, по адресу <a href="http://techdocs.postgresql.org">http://techdocs.PostgreSQL.org/</a> |
|
|
|
|
вы можете найти коллекцию технических статей посвященных PostgreSQL.</P> |
|
|
|
|
|
|
|
|
|
<P>Клиент командной строки <I>psql</I> имеет несколько команд \d для |
|
|
|
|
отображения информации по типам, операторам, функциям, агрегатам и т.д. - |
|
|
|
@ -276,56 +269,41 @@ |
|
|
|
|
|
|
|
|
|
<P>Наш сайт содержит еще больше информации.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="1.9">1.9</A>) Как найти информацию об известных ошибках |
|
|
|
|
или отсутствующих возможностях?</H4> |
|
|
|
|
<H3><A name="1.9">1.9</A>) Как найти информацию об известных ошибках |
|
|
|
|
или отсутствующих возможностях?</H3> |
|
|
|
|
|
|
|
|
|
<P>PostgreSQL поддерживает расширенный подкласс <SMALL>SQL</SMALL>-92. |
|
|
|
|
Смотрите наш список <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> |
|
|
|
|
на предмет известных ошибок, отсутствующих возможностей и будущих |
|
|
|
|
планов.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="1.10">1.10</A>) Как мне научиться <SMALL>SQL</SMALL>?</H4> |
|
|
|
|
|
|
|
|
|
<P>Книга по PostgreSQL на <A href= |
|
|
|
|
"http://www.PostgreSQL.org/docs/books/awbook.html">http://www.PostgreSQL.org/docs/books/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> |
|
|
|
|
<H3><A name="1.10">1.10</A>) Как мне научиться <SMALL>SQL</SMALL>?</H3> |
|
|
|
|
|
|
|
|
|
<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>Многим из наших пользователей нравится книга |
|
|
|
|
<P>Во-первых, возьмите одну из книг по PostgreSQL, о которых говорилось |
|
|
|
|
выше. Еще один учебник - это книга "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>. |
|
|
|
|
Многим из наших пользователей нравится книга |
|
|
|
|
<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>) Как присоединится к команде разработчиков?</H4> |
|
|
|
|
Есть прекрасный учебник на <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>Для начала, скачайте последнюю версию исходных текстов и прочтите |
|
|
|
|
FAQ и документацию для разработчиков PostgreSQL на нашем сайте или в |
|
|
|
|
дистрибутиве. Затем, подпишитесь на списки рассылки <I>pgsql-hackers</I> и |
|
|
|
|
<I>pgsql-patches</I>. Далее, отправляйте исправления (patches) высокого |
|
|
|
|
качества в список pgsql-patches.</P> |
|
|
|
|
<H3><A name="1.11">1.11</A>) Как присоединится к команде разработчиков?</H3> |
|
|
|
|
|
|
|
|
|
<P>Существует ограниченный список людей, который имеют привелегию |
|
|
|
|
вносить изменения в <SMALL>CVS</SMALL> архив PostgreSQL. Каждый |
|
|
|
|
из этих людей в свое время отправил так много высококачественных исправлений, |
|
|
|
|
что их было невозможно оставить без внимания и они были удостоены |
|
|
|
|
превилегии вносить изменения, и мы уверены, что те исправления, которые |
|
|
|
|
они внесут будут высокого качества.</P> |
|
|
|
|
<P>Смотрите <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> |
|
|
|
|
FAQ для разработчиков</A>.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="1.12">1.12</A>) Как сравнивать PostgreSQL с другими |
|
|
|
|
<SMALL>СУБД</SMALL>?</H4> |
|
|
|
|
|
|
|
|
|
<H3><A name="1.12">1.12</A>) Как сравнивать PostgreSQL с другими |
|
|
|
|
<SMALL>СУБД</SMALL>?</H3> |
|
|
|
|
|
|
|
|
|
<P> |
|
|
|
|
Существует несколько методов сравнения программного обеспечения: |
|
|
|
@ -348,14 +326,8 @@ |
|
|
|
|
|
|
|
|
|
<DD>Производительность PostgreSQL сходна с другими коммерческими |
|
|
|
|
СУБД и с СУБД с открытым исходным кодом. В каких-то вещах мы быстрее, |
|
|
|
|
в каких-то медленнее. В сравнении с MySQL или линейной |
|
|
|
|
СУБД, мы быстрее, когда пользователей много, а также на сложных |
|
|
|
|
запросах и при чтении/записи загрузки запроса. MySQL быстрее для простых |
|
|
|
|
SELECT запросов, выполняемых небольшим количеством пользователей. |
|
|
|
|
И разумеется, MySQL не имеет каких-либо возможностей из |
|
|
|
|
перечисленых выше, в секции <I>Возможности</I>. |
|
|
|
|
Мы делаем упор на надежность и расширенные возможности, но мы также |
|
|
|
|
продолжаем увеличивать производительность с каждым выпуском. <BR> |
|
|
|
|
в каких-то медленнее. Наша производительности обычно +/-10% по |
|
|
|
|
сравнению с другими СУБД. |
|
|
|
|
<BR> |
|
|
|
|
</DD> |
|
|
|
|
|
|
|
|
@ -396,10 +368,25 @@ |
|
|
|
|
</DD> |
|
|
|
|
</DL> |
|
|
|
|
|
|
|
|
|
<H3><A name="1.13">1.13</A>) Кто управляет PostgreSQL?</H3> |
|
|
|
|
|
|
|
|
|
<P>Если вы ищите какого-то особенного человека, центральный |
|
|
|
|
комитет или управляющую компанию, то напрасно --- их нет. |
|
|
|
|
У нас есть ядро комитета и разработчиков, работающих с CVS, |
|
|
|
|
но эти группы служат больше для административных целей, чем |
|
|
|
|
для управления. Проект напрямую функционирует с помощью |
|
|
|
|
сообщества разработчиков и пользователей, к которому может |
|
|
|
|
присоединится каждый. Всё что нужно -- это подписаться на |
|
|
|
|
списки рассылки и участвовать в дискуссиях. (Подробности о |
|
|
|
|
том как включиться в разработку PostgreSQL смотрите в |
|
|
|
|
<a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> |
|
|
|
|
FAQ для разработчиков</A>.)</P> |
|
|
|
|
|
|
|
|
|
<H2 align="center">Вопросы пользователей по клиентской части</H2> |
|
|
|
|
<HR> |
|
|
|
|
|
|
|
|
|
<H4><A name="2.1">2.1</A>) Какие интерфейсы есть для PostgreSQL?</H4> |
|
|
|
|
<H3 align="center">Вопросы пользователей по клиентской части</H3> |
|
|
|
|
|
|
|
|
|
<H3><A name="2.1">2.1</A>) Какие интерфейсы есть для PostgreSQL?</H3> |
|
|
|
|
|
|
|
|
|
<P>Установка PostgreSQL включает только <small>C</small> и встроенный |
|
|
|
|
(embedded) <small>C</small> интерфейсы. Все другие интерфейсы |
|
|
|
@ -414,8 +401,8 @@ |
|
|
|
|
в секции <i>Drivers/Interfaces</I>, а также через поиск в Интернет.</P> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="2.2">2.2</A>) Какие инструменты существуют для использования |
|
|
|
|
PostgreSQL через Web?</H4> |
|
|
|
|
<H3><A name="2.2">2.2</A>) Какие инструменты существуют для использования |
|
|
|
|
PostgreSQL через Web?</H3> |
|
|
|
|
|
|
|
|
|
<P>Прекрасное введение во взаимодействие баз данных и Web можно найти на: |
|
|
|
|
<A href="http://www.webreview.com">http://www.webreview.com</A></P> |
|
|
|
@ -423,33 +410,26 @@ |
|
|
|
|
<P>Для интеграции с Web, PHP <A href="http://www.php.net"> |
|
|
|
|
http://www.php.net</A> является неплохим интерфейсом.</P> |
|
|
|
|
|
|
|
|
|
<P>В сложных случаях, многие пользуются Perl и CGI.pm или mod_perl.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс |
|
|
|
|
пользователя?</H4> |
|
|
|
|
|
|
|
|
|
<P>Да, существует несколько графических интерфейсов для PostgreSQL. |
|
|
|
|
Они включают PgAdmin III (<A href="http://www.pgadmin.org/">http://www.pgadmin.org</A>), |
|
|
|
|
PgAccess (<A href="http://www.pgaccess.org/">http://www.pgaccess.org</A>), |
|
|
|
|
RHDB Admin (<A href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/</A>), |
|
|
|
|
TORA (<A href="http://www.globecom.net/tora/">http://www.globecom.net/tora/</A> |
|
|
|
|
частично коммерческое ПО) |
|
|
|
|
и Rekall (<A href="http://www.rekallrevealed.org/"> |
|
|
|
|
http://www.rekallrevealed.org/</A>). Также есть |
|
|
|
|
PhpPgAdmin (<A href="http://phppgadmin.sourceforge.net/"> |
|
|
|
|
http://phppgadmin.sourceforge.net/</A>) - интерфейс к PostgreSQL, |
|
|
|
|
основанный на Web.</P> |
|
|
|
|
<P>В сложных случаях, многие пользуются Perl и DBD::Pg с CGI.pm |
|
|
|
|
или mod_perl.</P> |
|
|
|
|
|
|
|
|
|
<H3><A name="2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс |
|
|
|
|
пользователя?</H3> |
|
|
|
|
|
|
|
|
|
<P>Да, подробности смотрите в <a href="http://techdocs.postgresql.org/guides/GUITools"> |
|
|
|
|
http://techdocs.postgresql.org/guides/GUITools</A>.</P> |
|
|
|
|
|
|
|
|
|
<HR> |
|
|
|
|
|
|
|
|
|
<H2 align="center">Вопросы администрирования</H2> |
|
|
|
|
|
|
|
|
|
<H4><A name="3.1">3.1</A>) Как мне установить PostgreSQL в место отличное |
|
|
|
|
от <I>/usr/local/pgsql</I>?</H4> |
|
|
|
|
<H3><A name="3.1">3.1</A>) Как мне установить PostgreSQL в место отличное |
|
|
|
|
от <I>/usr/local/pgsql</I>?</H3> |
|
|
|
|
|
|
|
|
|
<P>Задайте опцию <I>--prefix</I> когда запускаете <I>configure</I>.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="3.2">3.2</A>) Как мне управлять соединениями с других |
|
|
|
|
компьютеров?</H4> |
|
|
|
|
<H3><A name="3.2">3.2</A>) Как мне управлять соединениями с других |
|
|
|
|
компьютеров?</H3> |
|
|
|
|
|
|
|
|
|
<P>По умолчанию, PostgreSQL разрешает только соединения на локальной |
|
|
|
|
машине через сокеты домена Unix или TCP/IP соединения. Для того, чтобы |
|
|
|
@ -458,8 +438,8 @@ |
|
|
|
|
host-авторизация в файле <I>$PGDATA/pg_hba.conf</I> и перестартовать |
|
|
|
|
сервер.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="3.3">3.3</A>) Какие настройки мне нужно сделать для улучшения |
|
|
|
|
производительности?</H4> |
|
|
|
|
<H3><A name="3.3">3.3</A>) Какие настройки мне нужно сделать для улучшения |
|
|
|
|
производительности?</H3> |
|
|
|
|
|
|
|
|
|
<P>Существует три главных области, которые потенциально могут |
|
|
|
|
увеличить производительность:</P> |
|
|
|
@ -510,55 +490,17 @@ |
|
|
|
|
</DD> |
|
|
|
|
</DL> |
|
|
|
|
|
|
|
|
|
<H4><A name="3.4">3.4</A>) Какие возможности для отладки есть в |
|
|
|
|
наличии?</H4> |
|
|
|
|
<H3><A name="3.4">3.4</A>) Какие возможности для отладки есть в |
|
|
|
|
наличии?</H3> |
|
|
|
|
|
|
|
|
|
<P>Есть множество установок в настройках сервера, начинающихся |
|
|
|
|
на <code>log_*</code>, позволяющих протоколировать запросы |
|
|
|
|
и статистику работы процесса, которая очень полезна для отладки |
|
|
|
|
и измерения производительности.</P> |
|
|
|
|
|
|
|
|
|
<P><B>Для предоставления более детальной информации разработчикам |
|
|
|
|
сервера при отладке какой-либо проблемы должны пользоваться |
|
|
|
|
следующие инструкции.</B></P> |
|
|
|
|
|
|
|
|
|
<P>Таким же образом можно производить и отладку севера, если он |
|
|
|
|
работает неправильно. Во-первых, при запуске <I>configure</I> с |
|
|
|
|
опцией --enable-cassert, многие вызовы <I>assert()</I> позволяют |
|
|
|
|
отслеживать работу backend процесса и остановку программы при |
|
|
|
|
возникновении каких-либо неожиданностей.</P> |
|
|
|
|
|
|
|
|
|
<P>Если <I>postmaster</I> не запущен, вы можете запустить |
|
|
|
|
<I>postgres</I> backend из командной строки и ввести ваш оператор |
|
|
|
|
<SMALL>SQL</SMALL> напрямую. Это рекомендуется <B>только</B> для |
|
|
|
|
целей отладки. Заметим, что в этом режиме, запрос завершается символом |
|
|
|
|
новой строки, а не точкой с запятой. Если вы производили компиляцию |
|
|
|
|
с отладочными символами, вы можете использовать любой отладчик, чтобы |
|
|
|
|
посмотреть, что случилось. Поскольку backend запускается не из |
|
|
|
|
<I>postmaster</I>, он не запускается в идентичном окружении и значит |
|
|
|
|
проблемы итераций блокировок/backend не могут быть воспроизведены.</P> |
|
|
|
|
|
|
|
|
|
<P>Если <I>postmaster</I> запущен, запустите <I>psql</I> в одном |
|
|
|
|
окне, затем найдите <SMALL>PID</SMALL> процесса <I>postgres</I>, |
|
|
|
|
используемый <I>psql</I>, используя <CODE>SELECT pg_backend_pid()</CODE>. |
|
|
|
|
Используйте отладчик для подключения к <I>postgres</I> <SMALL>PID</SMALL>. |
|
|
|
|
Вы можете установить точки прерывания в отладчике и запустить запрос |
|
|
|
|
из <I>psql</I>. Если |
|
|
|
|
вы производите отладку запуска <I>postgres</I>, вы можете установить |
|
|
|
|
PGOPTIONS="-W n", и затем запустить <I>psql</I>. Эта опция приводит |
|
|
|
|
к задержке процесса запуска на <I>n</I> секунд, в течение которых |
|
|
|
|
вы можете подключить к процессу отладчик, установить любые точки |
|
|
|
|
прерывания и продолжить запуск.</P> |
|
|
|
|
|
|
|
|
|
<P>Вы также можете скомпилировать PostgreSQL с профилированием для |
|
|
|
|
того, чтобы увидеть какие функции сколько времени выполняются. |
|
|
|
|
Файлы профилирования backend'а находятся в каталоге |
|
|
|
|
<I>pgsql/data/base/dbname</I>. Файл профилирования клиента |
|
|
|
|
будет помещен в текущий каталог клиента. В Linux для выполнения |
|
|
|
|
профилирования требуется компиляции с <I>-DLINUX_PROFILE</I>.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="3.5">3.5</A>) Почему я получаю сообщение <I>"Sorry, too |
|
|
|
|
many clients"</I> когда пытаюсь подключиться к базе?</H4> |
|
|
|
|
|
|
|
|
|
<H3><A name="3.5">3.5</A>) Почему я получаю сообщение <I>"Sorry, too |
|
|
|
|
many clients"</I> когда пытаюсь подключиться к базе?</H3> |
|
|
|
|
|
|
|
|
|
<P>Вы достигли установленного по умолчанию ограничения на 100 сессий |
|
|
|
|
подключения к базе данных. Вам необходимо увеличить для |
|
|
|
@ -567,11 +509,11 @@ |
|
|
|
|
и перестартовать <I>postmaster</I>.</P> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="3.6">3.6</A>) Почему необходимо делать dump и restore при |
|
|
|
|
обновлении выпусков PostgreSQL?</H4> |
|
|
|
|
<H3><A name="3.6">3.6</A>) Почему необходимо делать dump и restore при |
|
|
|
|
обновлении выпусков PostgreSQL?</H3> |
|
|
|
|
|
|
|
|
|
<P>Разработчики PostgreSQL делают только небольшие изменения между |
|
|
|
|
подвыпусками. Таким образом обновление с версии 7.4 до 7.4.1 не требует |
|
|
|
|
подвыпусками. Таким образом обновление с версии 7.4.0 до 7.4.1 не требует |
|
|
|
|
выполнения dump и restore. Однако при выходе очередного выпуска |
|
|
|
|
(т.е. при обновлении например, с 7.3 на 7.4) часто меняется внутренний |
|
|
|
|
формат системных таблиц и файлов данных. Эти изменения часто носят |
|
|
|
@ -585,8 +527,10 @@ |
|
|
|
|
использования dump/restore. Комментарии к выпуску говорит когда можно |
|
|
|
|
использовать <i>pg_upgrade</i> для этого выпуска.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="3.7">3.7</A>) Какое компьютерное "железо" я должен |
|
|
|
|
использовать?</H4> |
|
|
|
|
|
|
|
|
|
<H3><A name="3.7">3.7</A>) Какое компьютерное "железо" я должен |
|
|
|
|
использовать?</H3> |
|
|
|
|
|
|
|
|
|
<P>Поскольку "железо" персональных компьютеров является наиболее |
|
|
|
|
совместимым, люди склонны верить, что такое "железо" имеет одинаковое |
|
|
|
|
качество. Это не так. Память ECC, SCSI и качественные материнские платы |
|
|
|
@ -600,26 +544,27 @@ |
|
|
|
|
|
|
|
|
|
<H2 align="center">Вопросы эксплуатации</H2> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.1">4.1</A>) Как выполнить <SMALL>SELECT</SMALL> только |
|
|
|
|
для нескольких первых строчек запроса? Произвольной строки?</H4> |
|
|
|
|
<H3><A name="4.1">4.1</A>) Как выполнить <SMALL>SELECT</SMALL> только |
|
|
|
|
для нескольких первых строчек запроса? Произвольной строки?</H3> |
|
|
|
|
|
|
|
|
|
<P>Для получения только нескольких строк, если вы знаете их количество |
|
|
|
|
на момент выполнения <SMALL>SELECT</SMALL> используйте <SMALL>LIMIT</SMALL>. |
|
|
|
|
на момент выполнения <SMALL>SELECT</SMALL> используйте <SMALL>LIMIT</SMALL>.</P> |
|
|
|
|
Если есть какой-либо индекс, который совпадает с <SMALL>ORDER BY</SMALL>, |
|
|
|
|
то возможно, что весь запрос выполнен и не будет. Если вы не знаете |
|
|
|
|
количества необходимых строк на момент выполнения <SMALL>SELECT</SMALL>, |
|
|
|
|
используйте курсор и <SMALL>FETCH</SMALL>.</P> |
|
|
|
|
|
|
|
|
|
<p>To <small>SELECT</small> a random row, use:</p> |
|
|
|
|
<pre> SELECT col |
|
|
|
|
<P>To <small>SELECT</small> a random row, use:</P> |
|
|
|
|
<PRE> SELECT col |
|
|
|
|
FROM tab |
|
|
|
|
ORDER BY random() |
|
|
|
|
LIMIT 1; |
|
|
|
|
</pre> |
|
|
|
|
</PRE> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.2">4.2</A>) Как мне найти какие таблицы, индексы, |
|
|
|
|
|
|
|
|
|
<H3><A name="4.2">4.2</A>) Как мне найти какие таблицы, индексы, |
|
|
|
|
базы данных и пользователи существуют? Как мне увидеть запросы, |
|
|
|
|
которые использует <I>psql</I> для получения этой информации?</H4> |
|
|
|
|
которые использует <I>psql</I> для получения этой информации?</H3> |
|
|
|
|
|
|
|
|
|
<P>Чтобы просматривать таблицы в <I>psql</I>, используйте команду \dt. |
|
|
|
|
Полный список команд в <I>psql</I> вы можете получить, используя \?. |
|
|
|
@ -642,7 +587,7 @@ |
|
|
|
|
для получения информации из системных таблиц базы данных.</P> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.3">4.3</A>) Как изменить тип данных колонки?</H4> |
|
|
|
|
<H3><A name="4.3">4.3</A>) Как изменить тип данных колонки?</H3> |
|
|
|
|
|
|
|
|
|
<P>В 8.0 и более поздних версиях, изменение типа колонки выполняется |
|
|
|
|
очень легко через <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P> |
|
|
|
@ -656,13 +601,12 @@ |
|
|
|
|
COMMIT; |
|
|
|
|
</PRE> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.4">4.4</A>) Каковы максимальные размеры для строк в таблице, |
|
|
|
|
таблиц и базы данных?</H4> |
|
|
|
|
<H3><A name="4.4">4.4</A>) Каковы максимальные размеры для строк в таблице, |
|
|
|
|
таблиц и базы данных?</H3> |
|
|
|
|
|
|
|
|
|
<P>Существуют следующие ограничения:</P> |
|
|
|
|
<BLOCKQUOTE> |
|
|
|
|
<TABLE> |
|
|
|
|
<TBODY> |
|
|
|
|
<TR> |
|
|
|
|
<TD>Максимальный размер базы?</TD> |
|
|
|
|
<TD>неограничен (существуют базы на 32 TB)</TD> |
|
|
|
@ -691,7 +635,6 @@ |
|
|
|
|
<TD>Максимальное количество индексов в таблице?</TD> |
|
|
|
|
<TD>неограничено</TD> |
|
|
|
|
</TR> |
|
|
|
|
</TBODY> |
|
|
|
|
</TABLE> |
|
|
|
|
</BLOCKQUOTE> |
|
|
|
|
<BR> |
|
|
|
@ -709,8 +652,8 @@ |
|
|
|
|
могут быть увеличены в четыре раза, если размер блока по умолчанию будет |
|
|
|
|
увеличен до 32k.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.5">4.5</A>) Как много дискового пространства в базе данных |
|
|
|
|
нужно для сохранения данных из обычного текстового файла?</H4> |
|
|
|
|
<H3><A name="4.5">4.5</A>) Как много дискового пространства в базе данных |
|
|
|
|
нужно для сохранения данных из обычного текстового файла?</H3> |
|
|
|
|
|
|
|
|
|
<P>СУБД PostgreSQL может потребоваться дискового пространства до 5 раз |
|
|
|
|
больше для сохранения данных из простого текстового файла.</P> |
|
|
|
@ -747,10 +690,10 @@ |
|
|
|
|
занимают очень мало места. |
|
|
|
|
</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.6">4.6</A>) Почему мои запросы работают медлено? Почему |
|
|
|
|
они не используют мои индексы?</H4> |
|
|
|
|
<H3><A name="4.6">4.6</A>) Почему мои запросы работают медлено? Почему |
|
|
|
|
они не используют мои индексы?</H3> |
|
|
|
|
|
|
|
|
|
<P>Индексы не используются для каждого запроса автоматически. Они |
|
|
|
|
<P>Индексы не используются для каждого запроса. Они |
|
|
|
|
используются только если таблица больше минимального размера и запрос |
|
|
|
|
выбирает только маленький процент строк в таблице. Так устроено, |
|
|
|
|
потому что доступ к диску с применением рандомизации при сканировании |
|
|
|
@ -774,17 +717,18 @@ |
|
|
|
|
и в этом случае индекс будет использоваться, поскольку при выполнении |
|
|
|
|
будет возвращаться небольшая часть таблицы. Фактически MAX() и MIN() не |
|
|
|
|
используют индексы, но индекс используется при построении запросов с |
|
|
|
|
<SMALL>ORDER BY</SMALL> и <SMALL>LIMIT</SMALL>:</P> |
|
|
|
|
<pre> |
|
|
|
|
<SMALL>ORDER BY</SMALL> и <SMALL>LIMIT</SMALL>: |
|
|
|
|
<PRE> |
|
|
|
|
SELECT col |
|
|
|
|
FROM tab |
|
|
|
|
ORDER BY col [ DESC ] |
|
|
|
|
LIMIT 1; |
|
|
|
|
</pre> |
|
|
|
|
</PRE> |
|
|
|
|
|
|
|
|
|
<P>Если вам кажется, что оптимизатор некорректно выбирает последовательный |
|
|
|
|
перебор, используйте <CODE>SET enable_seqscan TO 'off'</CODE> и |
|
|
|
|
запустите тесты, чтобы увидеть, не стало-ли сканирование индексов быстрее. |
|
|
|
|
запустите запрос снова, чтобы увидеть, действительно ли сканирование |
|
|
|
|
индексов быстрее. |
|
|
|
|
</P> |
|
|
|
|
|
|
|
|
|
<P>Когда используются операции с шаблонами, например <SMALL>LIKE</SMALL> |
|
|
|
@ -810,15 +754,15 @@ |
|
|
|
|
если типы данных точно не совпадали с индексными типами колонок. Это |
|
|
|
|
особенно касалось int2, int8 и numeric индексов колонок.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.7">4.7</A>) Как посмотреть на то, как оптимизатор выполняет |
|
|
|
|
мой запрос?</H4> |
|
|
|
|
<H3><A name="4.7">4.7</A>) Как посмотреть на то, как оптимизатор выполняет |
|
|
|
|
мой запрос?</H3> |
|
|
|
|
|
|
|
|
|
<P>Смотрите страницу руководства посвященную <SMALL>EXPLAIN</SMALL>.</P> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.8">4.8</A>) Как мне выполнить поиск регулярного выражения |
|
|
|
|
<H3><A name="4.8">4.8</A>) Как мне выполнить поиск регулярного выражения |
|
|
|
|
и поиск независимый от регистра букв поиск регулярного выражения? |
|
|
|
|
Как мне использовать индекс для поиска независимого от регистра букв?</H4> |
|
|
|
|
Как мне использовать индекс для поиска независимого от регистра букв?</H3> |
|
|
|
|
|
|
|
|
|
<P>Оператор <I>~</I> производит поиск регулярного выражения, а оператор |
|
|
|
|
<I>~*</I> производит независимый от регистра букв поиск регулярного |
|
|
|
@ -832,23 +776,40 @@ |
|
|
|
|
WHERE lower(col) = 'abc'; |
|
|
|
|
</PRE> |
|
|
|
|
|
|
|
|
|
<P> Эта конструкция не будет использовать стандартный индекс. Однако, если |
|
|
|
|
вы создадите индекс выражения, он будет использован:</P> |
|
|
|
|
Эта конструкция не будет использовать стандартный индекс. Однако, если |
|
|
|
|
вы создадите индекс выражения, он будет использован: |
|
|
|
|
<PRE> |
|
|
|
|
CREATE INDEX tabindex ON tab (lower(col)); |
|
|
|
|
</PRE> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.9">4.9</A>) Как я могу определить, что значение поля |
|
|
|
|
равно <SMALL>NULL</SMALL> в каком-либо запросе?</H4> |
|
|
|
|
<H3><A name="4.9">4.9</A>) Как мне определить, что значение поля равно |
|
|
|
|
<SMALL>NULL</SMALL> в каком-либо запросе? Могу я отсортировать поля |
|
|
|
|
<SMALL>NULL</SMALL> или нет?</H3> |
|
|
|
|
|
|
|
|
|
<P>Вы просто сравниваете значение с <SMALL>IS NULL</SMALL> и |
|
|
|
|
<SMALL>IS NOT NULL</SMALL>.</P> |
|
|
|
|
<SMALL>IS NOT NULL</SMALL>, как здесь:</P> |
|
|
|
|
<PRE> |
|
|
|
|
SELECT * |
|
|
|
|
FROM tab |
|
|
|
|
WHERE col IS NULL; |
|
|
|
|
</PRE> |
|
|
|
|
|
|
|
|
|
<P>Чтобы отсортировать данные по значению <NULL> используйте модификаторы |
|
|
|
|
<SMALL>IS NULL</SMALL> и <SMALL>IS NOT NULL</SMALL> в выражении |
|
|
|
|
<SMALL>ORDER BY</SMALL>. Когда они будут генерировать значения |
|
|
|
|
<I>истина</I>, то при сортировке они будут выше, чем значения |
|
|
|
|
<I>ложь</I>, так что записи с NULL будут в отсортированном списке сверху:</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.10">4.10</A>) Каковы отличия между разными символьными |
|
|
|
|
типами?</H4> |
|
|
|
|
<PRE> |
|
|
|
|
SELECT * |
|
|
|
|
FROM tab |
|
|
|
|
ORDER BY (col IS NOT NULL); |
|
|
|
|
</PRE> |
|
|
|
|
|
|
|
|
|
<H3><A name="4.10">4.10</A>) Каковы отличия между разными символьными |
|
|
|
|
типами?</H3> |
|
|
|
|
<BLOCKQUOTE> |
|
|
|
|
<TABLE> |
|
|
|
|
<TBODY> |
|
|
|
|
<TR> |
|
|
|
|
<TH>Тип</TH> |
|
|
|
|
<TH>Внутреннее имя</TH> |
|
|
|
@ -879,7 +840,6 @@ |
|
|
|
|
<TD>char</TD> |
|
|
|
|
<TD>один символ</TD> |
|
|
|
|
</TR> |
|
|
|
|
</TBODY> |
|
|
|
|
</TABLE> |
|
|
|
|
</BLOCKQUOTE> |
|
|
|
|
|
|
|
|
@ -889,8 +849,7 @@ |
|
|
|
|
<P>Первые четыре типа являются "varlena" типами (т.е., первые |
|
|
|
|
четыре байта на диске являются длинной, за которой следуют данные). |
|
|
|
|
Таким образом, фактически используемое пространство больше, чем |
|
|
|
|
обозначенный размер. Однако, эти типы данных также поддаются сжатию |
|
|
|
|
или могут быть сохранены не в строком виде через <SMALL>TOAST</SMALL>, |
|
|
|
|
обозначенный размер. Однако, длинные значения также сжимаются, |
|
|
|
|
так что занимаемое дисковое пространство может также быть и меньше, |
|
|
|
|
чем ожидалось.</P> |
|
|
|
|
|
|
|
|
@ -906,8 +865,8 @@ |
|
|
|
|
которых могут включать <SMALL>NULL</SMALL> байты. Все типы описанные |
|
|
|
|
здесь, имеют сходные характеристики производительности.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.11.1">4.11.1</A>) Как мне создать поле |
|
|
|
|
serial/с-авто-увеличением?</H4> |
|
|
|
|
<H3><A name="4.11.1">4.11.1</A>) Как мне создать поле |
|
|
|
|
serial/с-авто-увеличением?</H3> |
|
|
|
|
|
|
|
|
|
<P>PostgreSQL поддерживает тип данных <SMALL>SERIAL</SMALL>. Он |
|
|
|
|
автоматически создает последовательность. Например:</P> |
|
|
|
@ -918,7 +877,7 @@ |
|
|
|
|
); |
|
|
|
|
</PRE> |
|
|
|
|
|
|
|
|
|
<P> автоматически транслируется в: </P> |
|
|
|
|
автоматически транслируется в: |
|
|
|
|
<PRE> |
|
|
|
|
CREATE SEQUENCE person_id_seq; |
|
|
|
|
CREATE TABLE person ( |
|
|
|
@ -930,8 +889,8 @@ |
|
|
|
|
Смотрите подробности о последовательностях на странице руководства |
|
|
|
|
посвященной <I>create_sequence</I>. |
|
|
|
|
|
|
|
|
|
<H4><A name="4.11.2">4.11.2</A>) Как мне получить значение при вставке |
|
|
|
|
<SMALL>SERIAL</SMALL>?</H4> |
|
|
|
|
<H3><A name="4.11.2">4.11.2</A>) Как мне получить значение при вставке |
|
|
|
|
<SMALL>SERIAL</SMALL>?</H3> |
|
|
|
|
|
|
|
|
|
<P>Один из способов состоит в получении следующего значения |
|
|
|
|
<SMALL>SERIAL</SMALL> из объекта sequence с помощью функции |
|
|
|
@ -960,16 +919,16 @@ |
|
|
|
|
</PRE> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.11.3">4.11.3</A>) Не может ли получиться так, что |
|
|
|
|
<H3><A name="4.11.3">4.11.3</A>) Не может ли получиться так, что |
|
|
|
|
использование <I>currval()</I> и <I>nextval()</I> приведет к |
|
|
|
|
зациклированию с другими пользователями?</H4> |
|
|
|
|
зациклированию с другими пользователями?</H3> |
|
|
|
|
|
|
|
|
|
<P>Нет. <i>currval()</i> возвращает текущее значение, назначенное вашей |
|
|
|
|
сессией, а не другими сессиями.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.11.4">4.11.4</A>) Почему числа из моей последовательности |
|
|
|
|
<H3><A name="4.11.4">4.11.4</A>) Почему числа из моей последовательности |
|
|
|
|
не используются снова при отмене транзакции? Почему создаются разрывы |
|
|
|
|
при нумерации в колонке, где я использую последовательность/SERIAL?</H4> |
|
|
|
|
при нумерации в колонке, где я использую последовательность/SERIAL?</H3> |
|
|
|
|
|
|
|
|
|
<P>Для реализации конкуретности, значения последовательностей, при |
|
|
|
|
необходимости выдаются во время запуска транзакций и не блокируются |
|
|
|
@ -977,8 +936,8 @@ |
|
|
|
|
нумерации при отмене транзакций.</P> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое |
|
|
|
|
<SMALL>TID</SMALL>?</H4> |
|
|
|
|
<H3><A name="4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое |
|
|
|
|
<SMALL>CTID</SMALL>?</H3> |
|
|
|
|
|
|
|
|
|
<P>Каждая, создаваемая в PostgreSQL табличная строка, получает уникальный |
|
|
|
|
индентификатор <SMALL>OID</SMALL> за исключением случая когда |
|
|
|
@ -993,17 +952,17 @@ |
|
|
|
|
O<SMALL>ID</SMALL>, потому что последовательности <SMALL>SERIAL</SMALL> |
|
|
|
|
уникальны только внутри таблицы и таким образом меньше подвержены |
|
|
|
|
переполнению. Для хранения значений 8-ми байтной последовательности |
|
|
|
|
доступен тип <SMALL>SERIAL8</SMALL>.</P> |
|
|
|
|
доступен тип <SMALL>SERIAL8</SMALL>. |
|
|
|
|
|
|
|
|
|
<P>T<SMALL>ID</SMALL> используется для идентификации специальных |
|
|
|
|
физических записей с блочными и offset значениями. T<SMALL>ID</SMALL> |
|
|
|
|
<P>C<SMALL>TID</SMALL> используется для идентификации специальных |
|
|
|
|
физических записей с блочными и offset значениями. C<SMALL>TID</SMALL> |
|
|
|
|
изменяется после того как строки в таблице были изменены или перегружены. |
|
|
|
|
T<SMALL>ID</SMALL> используется индексными записями в качестве |
|
|
|
|
<P>T<SMALL>ID</SMALL> используется индексными записями в качестве |
|
|
|
|
указателя на физические записи.</P> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<H4><A name="4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory |
|
|
|
|
exhausted in AllocSetAlloc()"</I>?</H4> |
|
|
|
|
<H3><A name="4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory |
|
|
|
|
exhausted in AllocSetAlloc()"</I>?</H3> |
|
|
|
|
|
|
|
|
|
<P>Предположительно у вас закончилась виртуальная память |
|
|
|
|
или что ваше ядро имеет маленький лимит на определенные ресурсы. |
|
|
|
@ -1022,38 +981,21 @@ |
|
|
|
|
клиентом, потому что backend возвращает слишком большой объем данных, |
|
|
|
|
попытайтесь выполнить эту команду перед запуском клиента. |
|
|
|
|
|
|
|
|
|
<H4><A name="4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL |
|
|
|
|
запущена?</H4> |
|
|
|
|
<H3><A name="4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL |
|
|
|
|
запущена?</H3> |
|
|
|
|
|
|
|
|
|
<P>Из <I>psql</I>, наберите <CODE>SELECT version();</CODE></P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.15">4.15</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.16">4.16</A>) Как мне создать колонку которая по умолчанию |
|
|
|
|
будет содержать текущее время?</H4> |
|
|
|
|
<H3><A name="4.15">4.15</A>) Как мне создать колонку которая по умолчанию |
|
|
|
|
будет содержать текущее время?</H3> |
|
|
|
|
|
|
|
|
|
<P>Используйте <I>CURRENT_TIMESTAMP</I>:</P> |
|
|
|
|
<PRE> |
|
|
|
|
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); |
|
|
|
|
</PRE> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.17">4.17</A>) Как мне выполнить внешнее связывание?</H4> |
|
|
|
|
<H3><A name="4.16">4.16</A>) Как мне выполнить внешнее связывание?</H3> |
|
|
|
|
|
|
|
|
|
<P>PostgreSQL поддерживает внешнее связывание, |
|
|
|
|
используя стандартный синтаксис SQL. Вот два примера:</P> |
|
|
|
@ -1077,8 +1019,8 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); |
|
|
|
|
<SMALL>RIGHT</SMALL> и <SMALL>FULL</SMALL> связываниях. Обычные |
|
|
|
|
связывания называются <SMALL>INNER</SMALL> связывания.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.18">4.18</A>) Как выполнять запросы, использующие несколько |
|
|
|
|
баз данных?</H4> |
|
|
|
|
<H3><A name="4.17">4.17</A>) Как выполнять запросы, использующие несколько |
|
|
|
|
баз данных?</H3> |
|
|
|
|
|
|
|
|
|
<P>Не существует способа создать запрос к базам данных отличным от текущей. |
|
|
|
|
Поскольку PostgreSQL загружает системные каталоги специфичные для базы |
|
|
|
@ -1089,14 +1031,16 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); |
|
|
|
|
соедиенения с различными базами данных и таких образом объединять |
|
|
|
|
информацию из них.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.19">4.19</A>) Как мне вернуть из функции несколько строк таблицы?</H4> |
|
|
|
|
<H3><A name="4.18">4.18</A>) Как мне вернуть из функции несколько строк таблицы?</H3> |
|
|
|
|
|
|
|
|
|
<P>Вы можете легко использовать функции, возвращающие список, |
|
|
|
|
<A href="http://techdocs.postgresql.org/guides/SetReturningFunctions"> |
|
|
|
|
http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.20">4.20</A>) Почему я получаю ошибку "missing oid", |
|
|
|
|
когда обращаютсь к временным таблицам в функциях PL/PgSQL?</H4> |
|
|
|
|
|
|
|
|
|
<H3><A name="4.19">4.19</A>) Почему я получаю ошибку "relation with OID #### |
|
|
|
|
не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?</H3> |
|
|
|
|
|
|
|
|
|
<P>PL/PgSQL кэширует сценарии функции и один из негативных эффектов этого |
|
|
|
|
состоит в том, что если функция PL/PgSQL обращается к временной таблице |
|
|
|
|
и эта таблица позднее удаляется и пересоздается, а функция затем вызывается |
|
|
|
@ -1106,53 +1050,26 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); |
|
|
|
|
таблицам в PL/PgSQL. Использование этого оператора заставит запрос |
|
|
|
|
перегенерироваться каждый раз.</P> |
|
|
|
|
|
|
|
|
|
<h4><a name="4.21">4.21</a>) Какие опции шифрования существуют? |
|
|
|
|
</h4> |
|
|
|
|
<ul> |
|
|
|
|
<li><i>contrib/pgcrypto</i> содержит много функций шифрования для |
|
|
|
|
использования в <small>SQL</small> запросах.</li> |
|
|
|
|
<li>Для шифрования передаваемых данных от клиента к серверу, на сервере |
|
|
|
|
в файле <i>postgresql.conf</i>, опция <i>ssl</i> должна быть установлена |
|
|
|
|
в <i>true</i>, в файле <i>pg_hba.conf</i> должна быть соответствующая |
|
|
|
|
запись <i>host</i> или <i>hostssl</i> и на стороне клиента <i>sslmode</i> |
|
|
|
|
не должен быть запрещён через <i>disable</i>. (Заметим, что также |
|
|
|
|
возможно использование независимых внешних шифрующих транспортов, таких |
|
|
|
|
как stunnel или ssh, вместо собственных SSL соединений PostgreSQL).</li> |
|
|
|
|
<li>Пароли пользователей к базе данных автоматически шифруются, при |
|
|
|
|
сохранении в системных таблицах.</li> |
|
|
|
|
<li>Сервер можно запустить, используя шифрованную файловую систему.</li> |
|
|
|
|
</ul> |
|
|
|
|
<HR> |
|
|
|
|
|
|
|
|
|
<H2 align="center">Расширения PostgreSQL</H2> |
|
|
|
|
|
|
|
|
|
<H4><A name="5.1">5.1</A>) Я написал функцию определяемую пользователем. |
|
|
|
|
Когда я запускаю ее в <I>psql</I>, почему я получаю core dump?</H4> |
|
|
|
|
|
|
|
|
|
<P>Проблема может заключаться в нескольких вещах. Попытайтесь сперва |
|
|
|
|
протестировать вашу функцию в отдельной самостоятельной программе.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="5.2">5.2</A>) Как я могу внести некоторые классные новые |
|
|
|
|
типы и функции в PostgreSQL?</H4> |
|
|
|
|
|
|
|
|
|
<P>Отправьте ваши расширения в список рассылки <I>pgsql-hackers</I> |
|
|
|
|
и они по возможности будут помещены в подкаталог <I>contrib/</I>.</P> |
|
|
|
|
<H3><A name="4.20">4.20</a>) Какие есть решения для репликации?</H3> |
|
|
|
|
|
|
|
|
|
<H4><A name="5.3">5.3</A>) Как мне написать C функцию, возвращающую |
|
|
|
|
строку таблицы?</H4> |
|
|
|
|
|
|
|
|
|
<P>В версиях PostgreSQL, начиная с 7.3, функции, возвращающие таблицы |
|
|
|
|
полностью поддерживаются в C, PL/PgSQL и SQL. Подробности смотрите в |
|
|
|
|
Руководстве Программиста. Пример возвращающей таблицу функции, |
|
|
|
|
написанной на C, можно найти в <i>contrib/tablefunc</i>.</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> |
|
|
|
|
<P>Хотя "репликация" -- это единый термин, есть несколько разных технологий |
|
|
|
|
для выполнения репликаций с разными особенностями для каждой.</P> |
|
|
|
|
|
|
|
|
|
<P>Репликация Master/slave позволяет иметь один главный (master) сервер |
|
|
|
|
для выполнения запросов чтения/записи, в то время как подчинённые |
|
|
|
|
(slave) сервера могут производить только запросы |
|
|
|
|
чтения/<SMALL>SELECT</SMALL>. Наиболее популярным решением для репликации |
|
|
|
|
master-slave в PostgreSQL является |
|
|
|
|
<A href="http://gborg.postgresql.org/project/slony1/projdisplay.php"> |
|
|
|
|
Slony-I</A>.</P> |
|
|
|
|
|
|
|
|
|
<P>Репликация Multi-master позволяет выполнять запросы чтения/записи |
|
|
|
|
на нескольких, реплицируемых друг с другом компьюетрах. Эта особенность |
|
|
|
|
также приводит к потере производительности, потому что необходима |
|
|
|
|
синхронизация изменений между несколькими серверами. Наиболее |
|
|
|
|
популярным решением для такой репликации в PostgreSQL является |
|
|
|
|
<A href="http://pgfoundry.org/projects/pgcluster/">Pgcluster</A>. |
|
|
|
|
|
|
|
|
|
</BODY> |
|
|
|
|
</HTML> |
|
|
|
|