Update russian FAQ, from Viktor Vislobokov.

This commit is contained in:
Bruce Momjian 2002-11-10 19:48:41 +00:00
parent 8fee9615cc
commit 5d283d89cb
2 changed files with 1050 additions and 990 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2,11 +2,10 @@
<HTML>
<!-- DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN" -->
<!-- HTML -->
<HEAD>
<META name="generator" content="HTML Tidy, see www.w3.org">
<META http-equiv="Content-Type" content="text/html; charset=koi8-r">
<TITLE>PostgreSQL FAQ</TITLE>
</HEAD>
@ -14,7 +13,7 @@
alink="#0000ff">
<H1>Ответы на часто задаваемые вопросы по PostgreSQL</H1>
<P>Дата последнего обновления: Среда 9 Октября 23:14:53 EDT 2002</P>
<P>Дата последнего обновления: Воскресенье 20 Октября 20:47:14 EDT 2002</P>
<P>Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (<A href=
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
@ -32,8 +31,7 @@
<HR>
<H2 align="center">Общие вопросы</H2>
<A href="#1.1">1.1</A>) Что такое PostgreSQL? Как произносится это
название?<BR>
<A href="#1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название?<BR>
<A href="#1.2">1.2</A>) Каковы авторские права на PostgreSQL?<BR>
<A href="#1.3">1.3</A>) На каких Unix платформах работает PostgreSQL?<BR>
<A href="#1.4">1.4</A>) Существуют ли версии портированные не на Unix системы?<BR>
@ -80,8 +78,7 @@
<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>
<A href="#3.9">3.9</A>) Что находится в каталоге <I>pgsql_tmp</I>?<BR>
<A href="#3.10">3.10</A>) Почему необходимо делать dump и restore при
обновлении выпусков PostgreSQL?<BR>
@ -143,6 +140,7 @@
<A href="#4.26">4.26</A>) Почему я не могу надежно создавать/удалять
временные таблицы в функциях PL/PgSQL?<BR>
<A href="#4.27">4.27</A>) Какие опции репликации существуют?<BR>
<A href="#4.28">4.28</A>) Какие опции шифрования существуют?<BR>
<H2 align="center">Расширения PostgreSQL</H2>
<A href="#5.1">5.1</A>) Я написал функцию определяемую пользователем.
@ -158,7 +156,7 @@
<H2 align="center">Общие вопросы</H2>
<H4><A name="1.1">1.1</A>) Что такое PostgreSQL?</H4>
<H4><A name="1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название?</H4>
<P>PostgreSQL произносится <I>Post-Gres-Q-L (Пост-Грес-Кью-Эл)</I>.</P>
@ -169,13 +167,12 @@
расширенное подмножество <SMALL>SQL</SMALL>. PostgreSQL - это
свободное и полностью открытое программное обеспечение.</P>
<P>Разработку PostgreSQL выполняет команда,
связанная через Internet, все участники которой подписаны на список
рассылки разработчиков. В настоящее время, их координатором
является Марк Форнай (Marc G. Fournier) (<A href=
<P>Разработку PostgreSQL выполняет команда разработчиков, все участники
которой подписаны на список рассылки разработчиков. В настоящее время,
их координатором является Марк Форнай (Marc G. Fournier) (<A href=
"mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A>). (См.
ниже о том, как подключиться к разработке). Эта команда теперь
отвечает за всю разработку PostgreSQL.</P>
секцию <A href="#1.6">1.6</A> о том, как подключиться к разработке).
Эта команда теперь отвечает за всю разработку PostgreSQL.</P>
<P>Авторами PostgreSQL 1.01 являются Эндрю Ю (Andrew Yu) и Джоли Чен
(Jolly Chen). Многие другие внесли свой вклад в перенос на другие
@ -240,10 +237,10 @@
<P><STRONG>Клиент</STRONG></P>
<P>Для запуска на платформах MS Windows возможна компиляция C
библиотеки <I>libpq</I>, psql и других интерфесов и бинарных файлов.
библиотеки <I>libpq</I>, psql, других интерфесов и клиентских приложений.
В этом случае, клиент запускается на MS Windows и связывается по
TCP/IP с сервером, запущенным на одной из поддерживаемых Unix
платформ. В дистрибутив включается файл <I>win31.mak</I> для того,
платформ. В дистрибутив включается файл <I>win32.mak</I> для того,
чтобы можно было провести сборку библиотеки <I>libpq</I> и
<I>psql</I> для Win32. PostgreSQL также работает через
<SMALL>ODBC</SMALL>.</P>
@ -252,10 +249,12 @@
<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>
в NT. Смотрите <I>pgsql/doc/FAQ_MSWIN</I> в дистрибутиве или
MS Windows FAQ на <A href="http://www.postgresql.org/docs/faq-mswin.html">
http://www.PostgreSQL.org/docs/faq-mswin.html</A>.</P>
<P>PostgreSQL, спортированный специально для MS Win NT/2000/XP в
настоящий момент начал работать.</P>
<H4><A name="1.5">1.5</A>) Где можно взять PostgreSQL?</H4>
@ -321,7 +320,7 @@
<P>Список коммерческой поддержки компаний доступен на
<A href=
"http://www.postgresql.org/users-lounge/commercial-support.html">http://www.postgresql.org/users-lounge/commercial-support.html</A>.</P>
"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>
@ -341,8 +340,8 @@
"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>
<a href="http://www.ca.postgresql.org/books/">http://www.ca.PostgreSQL.org/books/</a>.
Кроме того, по адресу <a href="http://techdocs.postgresql.org">http://techdocs.PostgreSQL.org/</a>
вы можете найти коллекцию технических статей посвященных PostgreSQL.</p>
@ -405,8 +404,8 @@
<H4><A name="1.13">1.13</A>) Как отравить сообщение об ошибке??</H4>
<P>Пожалуйста посетите страничку <A href=
"http://www.postgresql.org/bugs/bugs.php">PostgreSQL BugTool</A>,
<P>Пожалуйста посетите страничку PostgreSQL BugTool на <A href=
"http://www.postgresql.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</A>,
на которой предоставлены детальные инструкции о том как отправить
сообщение об ошибке.</P>
@ -445,9 +444,8 @@
Мы делаем упор на надежность и расширенные возможности, но мы также
продолжаем увеличивать производительность с каждым выпуском. Существует
интересная страничка в Интернет, сравнивающая PostgreSQL и MySQL на
<A href="http://openacs.org/why-not-mysql.html">
http://openacs.org/why-not-mysql.html</A><BR>
<A href="http://openacs.org/philosophy/why-not-mysql.html">
http://openacs.org/philosophy/why-not-mysql.html</A><BR>
<BR>
</DD>
@ -467,15 +465,15 @@
<DT><B>Поддержка</B></DT>
<DD>Наш список рассылки представлен большой группой разработчиков
и пользователей, которые могут помочь решить любые возникшие
проблемы. В то же время, мы не гарантируем какие-либо исправления,
но и разработчики коммерческих <SMALL>СУБД</SMALL> не всегда делают
исправления. Прямой доступ к разработчикам, сообществу пользователей,
руководствам и исходным текстам часто делают поддержку PostgreSQL
превосходящей другие <SMALL>СУБД</SMALL>. Существует коммерческая
поддержка по результам возникших инцидентов, которая доступна для
тех кому она нужна. (Смотрите <A href="#1.6">Как получить поддержку?</A>.)<BR>
<DD>Наш список рассылки предоставляет возможможность общения с
большой группой разработчиков и пользователей, которые могут помочь решить
любые возникшие проблемы. В то же время, мы не гарантируем какие-либо
исправления, но и разработчики коммерческих <SMALL>СУБД</SMALL> не всегда
делают исправления. Прямой доступ к разработчикам, сообществу
пользователей, руководствам и исходным текстам часто делают поддержку
PostgreSQL превосходящей другие <SMALL>СУБД</SMALL>. Существует
коммерческая поддержка по результам возникших инцидентов, которая
доступна для тех кому она нужна. (Смотрите <A href="#1.6">Секцию 1.6</A>.)<BR>
<BR>
</DD>
@ -493,7 +491,7 @@
PostgreSQL?</H4>
<P>PostgreSQL имеет одноранговую инфраструктуру с того самого времени
как мы начали разработку 6 лет назад. Мы должны благодарить за
как мы начали разработку в 1996 году. Мы должны благодарить за
это Марка Фоная (Marc Fournier), который создал эту инфраструктуру и
управляет ей на протяжении этих лет.</P>
@ -505,8 +503,8 @@
некоторое количество ежемесячных и одноразовых расходов, которые
требуют денег. Если вы или ваша компания имеет деньги, которые
можно передать в помощь нашим усилиям, пожалуйста посетите страничку
<A href="https://store.pgsql.com/shopping/index.php?id=1">
https://store.pgsql.com/shopping/index.php?id=1</A>
<A href="https://store.pgsql.com/shopping/">
https://store.pgsql.com/shopping/</A>
и сделайте свой вклад.</P>
<P>Хотя на страничке говорится о PostgreSQL, Inc, пункт
@ -549,29 +547,23 @@
<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>
Домашняя станичка <A href="http://www.php.net">http://www.php.net</A>.</P>
<P>Для комплексных решений, многие пользуются Perl интерфейсом и CGI.pm.</P>
<P>Для комплексных решений, многие пользуются Perl интерфейсом и CGI.pm или mod_perl.</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>
PgAccess, который также можно использовать как генератор отчетов.
Его страничка <A href="http://www.pgaccess.org">http://www.pgaccess.org/</A></P>
<P>Мы также включаем <I>ecpg</I>, который предоставляет встроенный
интерфейс к языку запросов SQL из C.</P>
<H4><A name="2.4">2.4</A>) Какие языки могут взаимодействовать с
PostgreSQL?</H4>
<H4><A name="2.4">2.4</A>) Какие языки могут взаимодействовать с PostgreSQL?</H4>
<P>Вот эти:</P>
@ -584,7 +576,7 @@
<LI>Java (jdbc)</LI>
<LI>Perl (perl5)</LI>
<LI>Perl (DBD::Pg и perl5)</LI>
<LI>ODBC (odbc)</LI>
@ -594,11 +586,12 @@
<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>
<LI>PHP ('pg_' functions, Pear::DB)</LI>
</UL>
<P>Дополнительные интерфейсы доступны по адресу <A href="http://www.postgresql.org/interfaces.html">
http://www.postgresql.org/interfaces.html.</A>
<P>Дополнительные интерфейсы доступны по адресу
<A href="http://www.postgresql.org/interfaces.html">http://www.PostgreSQL.org/interfaces.html.</A>
и
<A href="http://gborg.postgresql.org/">http://gborg.PostgreSQL.org</a>.
</P>
<HR>
@ -671,7 +664,7 @@
<P>Если вы выполняете много операторов <SMALL>INSERT</SMALL>,
рассмотрите возможность выполнять их в большой пачке, используя
команду <SMALL>COPY</SMALL>. Это значительно быстрее, чем отдельные
<SMALL>INSERT.</SMALL> Во-вторых, операторы вне блока транзакции
<SMALL>INSERT</SMALL>. Во-вторых, операторы вне блока транзакции
<SMALL>BEGIN WORK/COMMIT</SMALL> сами выполняют транзакцию. Подумайте
над выполнением нескольких операторов в одном блоке транзакции.
Это уменьшит количество транзакций. Также, задумайтесь над удалением
@ -740,7 +733,7 @@
<P>Если <I>postmaster</I> запущен, запустите <I>psql</I> в одном
окне, затем найдите <SMALL>PID</SMALL> процесса <I>postgres</I>,
используемый <I>psql</I>. Используйте отдадчик для подключения к
<I>postgres</I> <SMALL>PID.</SMALL> Вы можете установить точки
<I>postgres</I> <SMALL>PID</SMALL>. Вы можете установить точки
прерывания в отладчике и запустить запрос из <I>psql</I>. Если
вы производите отладку запуска <I>postgres</I>, вы можете установить
PGOPTIONS="-W n", и затем запустить <I>psql</I>. Эта опция приводит
@ -781,7 +774,7 @@
семафоров, <SMALL>SEMMNS</SMALL> и <SMALL>SEMMNI;</SMALL> максимальное
количество процессов, <SMALL>NPROC;</SMALL> максимальное количество
процессов на пользователя, <SMALL>MAXUPRC;</SMALL> и максимальное
количество открытых файлов, <SMALL>NFILE</SMALL> и <SMALL>NINODE.</SMALL>
количество открытых файлов, <SMALL>NFILE</SMALL> и <SMALL>NINODE</SMALL>.
Причина создания ограничения на количество backend процессов как
раз и состоит в том, чтобы вашей системе хватило ресурсов.</P>
@ -789,38 +782,35 @@
было 64, и изменение этого количества требовало перекомпиляции после
установки константы MaxBackendId в <I>include/storage/sinvaladt.h</I>.</P>
<H4><A name="3.9">3.9</A>) Что это за файлы <I>pg_sorttempNNN.NN</I>
в моем каталоге с базой данных?</H4>
<H4><A name="3.9">3.9</A>) Что находится в каталоге <I>pgsql_tmp</I>?</H4>
<P>Это временные файлы, генерируемые во время выполнения запроса.
Например, если для оператора <SMALL>ORDER BY</SMALL> должна быть
выполнена сортировка, которая требует больше места чем выделенно
для backend процесса в опции <I>-S</I>, то создается временный файл для
хранения дополнительных данных.</P>
<P>Данный каталог содержит временные файлы, генерируемые обработчиком
запроса. Например, если для выполнения <small>ORDER BY</small> нужна
сортировка и эта сортировка требует памяти больше, чем допускает параметр <i>-S</i>
у backend'а, то для хранения дополнительных данных создаются временные
файлы.</P>
<P>Эти временные файлы должны удаляться автоматически, но этого может не
произойти, если backend рухнул во время сортировки. Останов и запуск
серверного процесса обеспечит их удаление из каталога.</P>
<P>Временные файлы должны удаляться автоматически, но этого может
не происходить, если backend процесс падает во время сортировки.
Если у вас не запущено ни одного backend процесса, то вы можете
спокойно удалить файлы pg_tempNNN.NN.</P>
<A name="3.10">3.10</A>) Почему необходимо делать dump и restore при
обновлении выпусков PostgreSQL?<BR>
<H4><A name="3.10">3.10</A>) Почему необходимо делать dump и restore при
обновлении выпусков PostgreSQL?</H4>
<P>Разработчики PostgreSQL делают только небольшие изменения между
подвыпусками. Таким образом обновление с версии 7.2 до 7.2.1 не требует
выполнения dump и restore. Однако при выходе очередного выпуска часто
меняется внутренний формат системных таблиц и файлов данных. Эти
изменения часто носят комплексный характер, так что нет возможности
обеспечить обратную совместимость файлов данных. Выполение dump
позволяет получить данные в общем формате, который затем может быть
загружен при использовании нового внутреннего формата.</P>
выполнения dump и restore. Однако при выходе очередного выпуска
(т.е. при обновлении например, с 7.2 на 7.3) часто меняется внутренний
формат системных таблиц и файлов данных. Эти изменения часто носят
комплексный характер, так что нет возможности обеспечить обратную
совместимость файлов данных. Выполение dump позволяет получить данные
в общем формате, который затем может быть загружен при использовании
нового внутреннего формата.</P>
<P>
В тех выпусках, где формат данных на диске не меняется, для проведения
<P>В тех выпусках, где формат данных на диске не меняется, для проведения
обновления может быть использован сценарий <i>pg_upgrade</i> без
использования dump/restore. Комментарии к выпуску говорит когда можно
использовать <i>pg_upgrade</i> для этого выпуска.
</P>
использовать <i>pg_upgrade</i> для этого выпуска.</P>
<HR>
<H2 align="center">Вопросы эксплуатации</H2>
@ -857,7 +847,8 @@
<H4><A name="4.4">4.4</A>) Как удалить колонку из таблицы?</H4>
<P>Мы не поддерживаем <SMALL>ALTER TABLE DROP COLUMN,</SMALL> но
<P>Эта функциональность была добавлена в выпуск 7.3 с оператором
<small>ALTER TABLE DROP COLUMN</small>. В ранних версиях,
можно сделать так:</P>
<PRE>
BEGIN;
@ -981,21 +972,21 @@
SELECT col
FROM tab
ORDER BY col [ DESC ]
LIMIT 1
LIMIT 1;
</pre>
<P>Когда используются операции с шаблонами, например <SMALL>LIKE</SMALL>
или <I>~</I>, индексы могут быть использованы в следующих случаях:
</P><UL>
<LI>Начало строки поиска должно совпадать с началом искомой строки, т.е.:</LI>
или <I>~</I>, индексы могут быть использованы в следующих случаях:</P>
<UL>
<LI><small>LIKE</small> шаблоны не должны начинаться с <i>%.</i><LI>
<LI><i>~</i> шаблоны регулярных выражений должна начинаться на <i>^.</i><LI>
</UL>
<LI>Начало строки поиска должно совпадать с началом искомой строки, т.е.:
<UL>
<LI><small>LIKE</small> шаблоны не должны начинаться с <i>%.</i>.</LI>
<LI><i>~</i> шаблоны регулярных выражений должна начинаться на <i>^</i>.</LI>
</UL></LI>
<LI>Строка поиска не должна начинаться с символа класса, т.е. [a-e].</LI>
<LI>Не должен использоваться поиск независимый от регистра такой как
<small>ILIKE</small> и <i>~</i>. Вместо него используйте функциональные
индексы, которые описаны в этом FAQ ниже.</LI>
<LI>Поиск независимый от регистра, такой как <small>ILIKE</small> и
<i>~*</i> не использует индексы. Вместо него, используйте функциональные
индексы, которые описываются в секции <A href="#4.12">4.12</A>.</LI>
<LI>Во время <i>initdb</i> должна использоваться локаль по умолчанию
<i>C</i>.
</UL>
@ -1053,13 +1044,13 @@
<PRE>
SELECT *
FROM tab
WHERE lower(col) = 'abc'
WHERE lower(col) = 'abc';
</PRE>
Эта конструкция не будет использовать стандартный индекс. Однако, если
вы создадите функциональный индекс, он будет использован:
<PRE>
CREATE INDEX tabindex on tab (lower(col));
CREATE INDEX tabindex ON tab (lower(col));
</PRE>
<H4><A name="4.13">4.13</A>) Как я могу определить, что значение поля
@ -1074,8 +1065,8 @@
Тип Внутреннее имя Замечания
--------------------------------------------------
"char" char 1 символ
CHAR(#) bpchar заполняется пустотой до фиксированной длины
VARCHAR(#) varchar размер задает максимальную длину, нет заполнения
CHAR(n) bpchar заполняется пустотой до фиксированной длины
VARCHAR(n) varchar размер задает максимальную длину, нет заполнения
TEXT text нет задаваемого верхнего ограничения или длины
BYTEA bytea массив байт переменной длины (можно использовать null-байт без опаски)
</PRE>
@ -1091,13 +1082,14 @@ BYTEA bytea
так что занимаемое дисковое пространство может также быть и меньше,
чем ожидалось.</P>
<P><SMALL>CHAR()</SMALL> - это лучшее решение для хранения строк, которые
обычно имеют одинаковую длину. <SMALL>VARCHAR()</SMALL> - это лучшее
<P><SMALL>CHAR(n)</SMALL> - это лучшее решение для хранения строк, которые
обычно имеют одинаковую длину. <SMALL>VARCHAR(n)</SMALL> - это лучшее
решение, когда нужно хранить строки переменной длины, но не превышающие
определенного размера. <SMALL>TEXT</SMALL> - это лучшее решение для строк
неограниченной длины, с максимально допустимой длиной в 1 гигабайт.
<SMALL>BYTEA</SMALL> для хранения бинарных данных, значения которых
могут включать <SMALL>NULL</SMALL> байты.</P>
могут включать <SMALL>NULL</SMALL> байты. Эти типы имеют сходные
характеристики производительности.</P>
<H4><A name="4.15.1">4.15.1</A>) Как мне создать поле
serial/с-авто-увеличением?</H4>
@ -1136,11 +1128,11 @@ BYTEA bytea
<P>Один из способов состоит в получении следующего значения
<SMALL>SERIAL</SMALL> из объекта sequence с помощью функции
<I>nextval()</I> <I>перед</I> вставкой и затем вставлять это значение
явно. Используйте таблицу-пример в <A href="#4.15.1">4.15.1</A>, чтобы
увидеть как это делается в Perl:</P>
явно. Используйте таблицу-пример в <A href="#4.15.1">4.15.1</A>, пример
в псевдоязыке покажет как это делается:</P>
<PRE>
new_id = output of "SELECT nextval('person_id_seq')"
INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal');
new_id = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
</PRE>
Затем вы должны также сохранить новое значение в переменной
@ -1152,11 +1144,11 @@ BYTEA bytea
именами вашей таблицы и вашей колонки <SMALL>SERIAL</SMALL>.
<P>В качестве альтернативы, вы можете получить назначенное значение
<SMALL>SERIAL</SMALL> с помощью функции <I>currval</I>()
<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')";
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
new_id = execute("SELECT currval('person_id_seq')");
</PRE>
И наконец, вы можете использовать значение
@ -1171,7 +1163,7 @@ BYTEA bytea
использование <I>currval()</I> и <I>nextval()</I> приведет к
зациклированию с другими пользователями?</H4>
<P>Нет. Currval() возвращает текущее значение, назначенное вашем
<P>Нет. <i>currval()</i> возвращает текущее значение, назначенное вашем
backend'ом, а не другими пользователями.</P>
<H4><A name="4.15.4">4.15.4</A>) Почему числа из моей последовательности
@ -1191,7 +1183,7 @@ BYTEA bytea
в PostgreSQL. Каждая запись, которая создаётся в PostgreSQL получает
уникальный <SMALL>OID</SMALL>. Все значения <SMALL>OID</SMALL>
генерируемые во время <I>initdb</I> имеют значения меньше 16384 (из
<I>backend/access/transam.h</I>). Все созданные пользователем
<I>include/access/transam.h</I>). Все созданные пользователем
<SMALL>OID</SMALL> имеют бОльшие значение. По умолчанию, все эти
<SMALL>OID</SMALL> являются уникальными не только внутри какой-либо
таблицы или базы данных, но и внутри всей СУБД PostgreSQL.</P>
@ -1215,13 +1207,12 @@ BYTEA bytea
COPY new TO '/tmp/pgtable';
DELETE FROM new;
COPY new WITH OIDS FROM '/tmp/pgtable';
</PRE>
<!--
CREATE TABLE new_table (mycol int);
INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table;
-->
</PRE>
<P><SMALL>OID</SMALL> хранится как 4-х байтное целое и не может превышать
<P>O<SMALL>ID</SMALL> хранится как 4-х байтное целое и не может превышать
значение в 4 миллиарда. Однако, еще никто не сообщил о том, что такое
произошло, но мы планируем до того как это случиться избавится от
этого ограничения.</P>
@ -1258,8 +1249,7 @@ BYTEA bytea
<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>
<P>Список общих терминов по базам данных можно найти на <A href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A></P>
<H4><A name="4.18">4.18</A>) Почему я получаю ошибку <I>"ERROR: Memory
exhausted in AllocSetAlloc()"</I>?</H4>
@ -1284,7 +1274,7 @@ BYTEA bytea
<H4><A name="4.19">4.19</A>) Как мне узнать, какая версия PostgreSQL
запущена?</H4>
<P>Из <I>psql</I>, наберите <CODE>select version();</CODE></P>
<P>Из <I>psql</I>, наберите <CODE>SELECT version();</CODE></P>
<H4><A name="4.20">4.20</A>) Почему при работе с моим большим объектом
я получаю ошибку <I>"invalid large obj descriptor"</I>?</H4>
@ -1324,18 +1314,16 @@ BYTEA bytea
увеличить скорость в других запросах, замените <CODE>IN</CODE> на
<CODE>EXISTS</CODE>:</P>
<PRE>
<CODE>SELECT *
SELECT *
FROM tab
WHERE col IN (SELECT subcol FROM subtab)
</CODE>
WHERE col IN (SELECT subcol FROM subtab);
</PRE>
на:
<PRE>
<CODE>SELECT *
SELECT *
FROM tab
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
</CODE>
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
</PRE>
Чтобы такая конструкция работала быстро, колонка <CODE>subcol</CODE>
@ -1390,7 +1378,7 @@ BYTEA bytea
Поскольку PostgreSQL загружает системные каталоги специфичные для базы
данных, непонятно даже, как должен себя вести такой межбазовый запрос.</P>
<P><I>/contrib/dblink</I> позволяет запросы между базами, используя
<P><I>contrib/dblink</I> позволяет запросы между базами, используя
вызовы функций. Разумеется, клиент может одновременно устанавливать
соедиенения с различными базами данных и таких образом объединять
информацию из них.</P>
@ -1399,8 +1387,8 @@ BYTEA bytea
<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>
href="http://www.postgresql.org/idocs/index.php?plpgsql-cursors.html">
http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html</a>,
секцию 23.7.3.3.</P>
<H4><A name="4.26">4.26</A>) Почему я не могу надежно создавать/удалять
@ -1416,10 +1404,26 @@ BYTEA bytea
<H4><A name="4.27">4.27</A>) Какие опции репликации существуют?</H4>
<P>Есть несколько решений для репликации типа master/slave. Они допускают
использование только одного сервера для внесения изменений в базу данных,
а slave серверы просто позволяют читать данные из базы.</P>
<P>Есть несколько опций для репликации типа master/slave. Они допускают
использование только master сервера для внесения изменений в базу данных,
а slave серверы просто позволяют читать данные из базы. Об этом читайте
здесь: <A href="http://gborg.postgresql.org/genpage?replication_research">
http://gborg.PostgreSQL.org/genpage?replication_research</A>. О репликации
с несколькими master серверами читайте здесь:
<a href="http://gborg.postgresql.org/project/pgreplication/projdisplay.php">http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</A>.</P>
<h4><a name="4.28">4.28</a>) Какие опции шифрования существуют?
</h4>
<ul>
<li><i>contrib/pgcrypto</i> содержит много функций шифрования для
использования в <small>SQL</small> запросах.</li>
<li>Есть только один способ шифрования данных, передаваемых от клиента
к серверу, через использование <i>hostssl</i> в <i>pg_hba.conf</i>.</li>
<li>Пароли пользователей к базе данных автоматически шифруются, при
сохранении в версии 7.3. В предыдущих версиях, вы должны разрешить
опцию <i>PASSWORD_ENCRYPTION</i> в <i>postgresql.conf</i>.</li>
<li>Сервер можно запустить, используя шифрованную файловую систему.</li>
</ul>
<HR>
<H2 align="center">Расширения PostgreSQL</H2>
@ -1439,8 +1443,10 @@ BYTEA bytea
<H4><A name="5.3">5.3</A>) Как мне написать C функцию, возвращающую
запись?</H4>
<P>Это требует некоего шаманства так как авторы никогда не пробовали
делать это, хотя в приницпе это возможно.</P>
<P>В версиях PostgreSQL, начиная с 7.3, функции, возвращающие таблицы
полностью поддерживаются в C, PL/PgSQL и SQL. Подробности смотрите в
Руководстве Программиста. Пример возвращающей таблицу функции,
написанной на C, можно найти в <i>contrib/tablefunc</i>.</P>
<H4><A name="5.4">5.4</A>) Я изменил исходный файл. Почему после
перекомпиляции я не вижу изменений?</H4>