1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-20 00:42:27 +03:00

Update russian FAQ, from Viktor Vislobokov.

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