aboutsummaryrefslogtreecommitdiff
path: root/doc/src/FAQ/FAQ_russian.html
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/FAQ/FAQ_russian.html')
-rw-r--r--doc/src/FAQ/FAQ_russian.html1197
1 files changed, 0 insertions, 1197 deletions
diff --git a/doc/src/FAQ/FAQ_russian.html b/doc/src/FAQ/FAQ_russian.html
deleted file mode 100644
index e92ce71c062..00000000000
--- a/doc/src/FAQ/FAQ_russian.html
+++ /dev/null
@@ -1,1197 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD html 4.01 transitional//EN">
-
-<HTML>
- <!-- DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN" -->
-
- <HEAD>
- <META name="generator" content="HTML Tidy, see www.w3.org">
- <META http-equiv="Content-Type" content="text/html; charset=utf8">
- <TITLE>PostgreSQL FAQ</TITLE>
- </HEAD>
-
- <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" alink="#0000ff">
- <H1>Ответы на часто задаваемые вопросы по PostgreSQL</H1>
-
- <P>Дата последнего обновления: Среда 25 июня 23:54:14 EDT 2008</P>
-
- <P>Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (<A href=
- "mailto:bruce@momjian.us">bruce@monjian.us</A>)
- </P>
- <P>Перевёл на русский: Виктор Вислобоков (<A href=
- "mailto:admin@postgresql.ru.net">admin@postgresql.ru.net</A>)<BR>
- </P>
-
- <P>Самую свежую английскую версию документа можно найти на
- <A href="http://www.postgresql.org/files/documentation/faqs/FAQ.html">http://www.postgresql.org/files/documentation/faqs/FAQ.html</A>.</P>
-
- <P>Самую свежую русскую версию документа можно найти на
- <A href="http://postgresql.ru.net/docs/FAQ_russian.html">http://postgresql.ru.net/docs/FAQ_russian.html</A>.</P>
-
- <P>Ответы на вопросы специфичные для конкретных платформ можно найти на
- <A href="http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</A>.</P>
- <HR>
-
- <H2 align="center">Общие вопросы</H2>
- <A href="#item1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название? Что такое Postgres?<BR>
- <A href="#item1.2">1.2</A>) Кто управляет PostgreSQL?<BR>
- <A href="#item1.3">1.3</A>) Каковы авторские права на PostgreSQL?<BR>
- <A href="#item1.4">1.4</A>) На каких платформах работает PostgreSQL?<BR>
- <A href="#item1.5">1.5</A>) Где можно взять PostgreSQL?<BR>
- <A href="#item1.6">1.6</A>) Какая версия наиболее свежая?<BR>
- <A href="#item1.7">1.7</A>) Где получить поддержку?<BR>
- <A href="#item1.8">1.8</A>) Как мне сообщить об ошибке?<BR>
- <A href="#item1.9">1.9</A>) Как найти информацию об известных ошибках или отсутствующих
- возможностях?<BR>
- <A href="#item1.10">1.10</A>) Какая документация имеется в наличии?<BR>
- <A href="#item1.11">1.11</A>) Как научиться <SMALL>SQL</SMALL>?<BR>
- <A href="#item1.12">1.12</A>) Как мне отправить исправление или присоединится к команде разработчиков?<BR>
- <A href="#item1.13">1.13</A>) Как сравнить PostgreSQL с другими
- <SMALL>СУБД</SMALL>? Может ли PostgreSQL быть встроенной?<BR>
- <A href="#item1.14">1.14</A>) Будет ли PostgreSQL работать с последними изменениями, в разных страных,
- касающимися дневного времени?<BR>
- <A href="#item1.15">1.15</A>) Как мне отписаться от списков рассылки PostgreSQL?
- Как избежать получения дублирующихся сообщений?<BR>
-
- <H2 align="center">Вопросы пользователей по клиентской части</H2>
- <A href="#item2.1">2.1</A>) Какие интерфейсы есть для PostgreSQL?<BR>
- <A href="#item2.2">2.2</A>) Какие инструменты существуют для использования
- PostgreSQL через Web?<BR>
- <A href="#item2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс
- пользователя?<BR>
-
-
- <H2 align="center">Вопросы администрирования</H2>
- <A href="#item3.1">3.1</A>) Как мне установить PostgreSQL в место отличное
- от <I>/usr/local/pgsql</I>?<BR>
- <A href="#item3.2">3.2</A>) Как мне управлять соединениями от других
- компьютеров?<BR>
- <A href="#item3.3">3.3</A>) Какие настройки мне нужно сделать для улучшения
- производительности?<BR>
- <A href="#item3.4">3.4</A>) Какие возможности для отладки есть в наличии?<BR>
- <A href="#item3.5">3.5</A>) Почему я получаю сообщение <I>"Sorry, too many
- clients"</I> когда пытаюсь подключиться к базе?<BR>
- <A href="#item3.6">3.6</A>) Как выполнить обновление PostgreSQL?<BR>
- <A href="#item3.7">3.7</A>) Какое компьютерное "железо" я должен
- использовать?<BR>
-
-
- <H2 align="center">Вопросы эксплуатации</H2>
- <A href="#item4.1">4.1</A>) Как выполнить <SMALL>SELECT</SMALL> только
- для нескольких первых строчек запроса? Для произвольной строки?<BR>
- <A href="#item4.2">4.2</A>) Как мне найти какие таблицы, индексы,
- базы данных и пользователи существуют? Как мне увидеть запросы,
- которые использует <I>psql</I> для получения этой информации?<BR>
- <A href="#item4.3">4.3</A>) Как изменить тип данных колонки?<BR>
- <A href="#item4.4">4.4</A>) Каковы максимальные размеры для строк в таблице,
- таблиц и базы данных?<BR>
- <A href="#item4.5">4.5</A>) Как много дискового пространства в базе данных
- нужно для сохранения данных из обычного текстового файла?<BR>
- <A href="#item4.6">4.6</A>) Почему мои запросы работают медлено? Почему
- они не используют мои индексы?<BR>
- <A href="#item4.7">4.7</A>) Как посмотреть на то, как оптимизатор выполняет
- мой запрос?<BR>
- <A href="#item4.8">4.8</A>) Как мне выполнить поиск регулярного выражения
- и поиск независимый от регистра букв поиск регулярного выражения?
- Как мне использовать индекс для поиска независимого от регистра букв?<BR>
- <A href="#item4.9">4.9</A>) Как мне определить, что значение поля в каком-либо
- запросе равно <SMALL>NULL</SMALL>? Как мне соединить возможные
- <SMALL>NULL</SMALL>? Могу я сортировать поля <SMALL>NULL</SMALL> или нет?<BR>
- <A href="#item4.10">4.10</A>) Каковы отличия между разными символьными
- типами?<BR>
- <A href="#item4.11.1">4.11.1</A>) Как мне создать поле serial/с-авто-увеличением?<BR>
- <A href="#item4.11.2">4.11.2</A>) Как мне получить значение при вставке
- <SMALL>SERIAL</SMALL>?<BR>
- <A href="#item4.11.3">4.11.3</A>) Не может ли получиться так, что
- использование <I>currval()</I> и <I>nextval()</I> приведет к
- зациклированию с другими пользователями?<BR>
- <A href="#item4.11.4">4.11.4</A>) Почему числа из моей последовательности
- не используются снова при отмене транзакции? Почему создаются разрывы
- при нумерации в колонке, где я использую последовательность/SERIAL?<BR>
- <A href="#item4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое
- <SMALL>CTID</SMALL>?<BR>
- <A href="#item4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory
- exhausted in AllocSetAlloc()"</I>?<BR>
- <A href="#item4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL
- запущена?<BR>
- <A href="#item4.15">4.15</A>) Как мне создать колонку которая по умолчанию
- будет содержать текущее время?<BR>
- <A href="#item4.16">4.16</A>) Как выполнить внешнее связывание?<BR>
- <A href="#item4.17">4.17</A>) Как выполнять запросы, использующие несколько
- баз данных?<BR>
- <A href="#item4.18">4.18</A>) Как мне вернуть из функции несколько строк таблицы?<BR>
- <A href="#item4.19">4.19</A>) Почему я получаю ошибку "relation with OID ####
- не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?<BR>
- <A href="#item4.20">4.20</A>) Какие есть решения для репликации?<BR>
- <A href="#item4.21">4.21</A>) Почему имена таблицы и колонок не
- распознаются в в моём запросе? Почему не сохраняются заглавные буквы?<BR>
-
- <HR>
-
- <H2 align="center">Общие вопросы</H2>
-
- <H3><A name="item1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название? Что такое Postgres?</H3>
-
- <P>PostgreSQL произносится <I>Post-Gres-Q-L (Пост-Грес-Кью-Эл)</I>.
- (Для особо любопытствующих как произносить "PostgreSQL", существует
- <A href="http://www.postgresql.org/files/postgresql.mp3">аудио-файл</A>).
- </P>
-
- <P>PostgreSQL - это объектно-реляционная система управления базами
- данных (СУБД), которая имеет традиционные возможности коммерческих
- <small>СУБД</small> с расширениями, которые есть в <small>СУБД</small>
- нового поколения. PostgreSQL - это свободное и полностью открытое
- программное обеспечение.</P>
-
- <P>Разработку PostgreSQL выполняет команда разработчиков, разбросанная
- по всему миру и связанная через Интернет. Разработка является
- общественным проектом и не управляется какой-либо компанией.
- Подробности смотрите в FAQ для разработчиков,
- <A href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
- http://www.postgresql.org/docs/faqs.FAQ_DEV.html</A>
- </P>
-
- <P>Postgres &mdash; это широко используемое сокращение для PostgreSQL.
- Первоначальным именем проекта в Беркли было Postgres и этот ник теперь
- наиболее популярен в разговорах о PostgreSQL по сравнению с другими.
- Если вам трудно полностью проговаривать 'PostgreSQL', можно просто
- говорить 'Postgres'.</P>
-
- <H3><A name="item1.2">1.2</A>) Кто управляет PostgreSQL?</H3>
-
- <P>Если вы ищите какого-то особенного человека, центральный
- комитет или управляющую компанию, то напрасно --- их нет.
- У нас есть ядро комитета и разработчиков, работающих с CVS,
- но эти группы служат больше для административных целей, чем
- для управления. Проект напрямую функционирует с помощью
- сообщества разработчиков и пользователей, к которому может
- присоединится каждый. Всё что нужно -- это подписаться на
- списки рассылки и участвовать в дискуссиях. (Подробности о
- том как включиться в разработку PostgreSQL смотрите в
- <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
- FAQ для разработчиков</A>.)</P>
-
- <H3><A name="item1.3">1.3</A>) Каковы авторские права на PostgreSQL?</H3>
-
- <P>PostgreSQL распространяется по классической лицензии BSD. Эта
- лицензия не содержит ограничений на то, как будет использоваться
- исходный код. Нам нравится эта лицензия и у нас нет намерений её
- менять. Вот эта лицензия BSD, которую мы используем:</P>
-
- <P>Система Управления Базами Данных PostgreSQL</P>
-
- <P>Portions copyright (c) 1996-2008, PostgreSQL Global Development
- Group Portions Copyright (c) 1994-1996 Regents of the University of
- California</P>
-
- <P>Предоставляются права на использование, копирование, изменение
- и распространение данного программного обеспечения и его документации
- для любых целей, бесплатно и без подписания какого-либо соглашения,
- при условии что для каждой копии будут предоставлены данное выше
- замечание об авторских правах, текущий параграф и два следующих
- параграфа.</P>
-
- <P>КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ
- ЗА ЛЮБЫЕ ПОВРЕЖДЕНИЯ, ВКЛЮЧАЯ ПОТЕРЮ ДОХОДА, НАНЕСЕННЫЕ ПРЯМЫМ
- ИЛИ НЕПРЯМЫМ, СПЕЦИАЛЬНЫМ ИЛИ СЛУЧАЙНЫМ ИСПОЛЬЗОВАНИЕМ ДАННОГО
- ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ЕГО ДОКУМЕНТАЦИИ, ДАЖЕ ЕСЛИ
- КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ БЫЛ ИЗВЕЩЕН О ВОЗМОЖНОСТИ ТАКИХ
- ПОВРЕЖДЕНИЙ.</P>
-
- <P>КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ СПЕЦИАЛЬНО ОТКАЗЫВАЗЫВАЕТСЯ ПРЕДОСТАВЛЯТЬ
- ЛЮБЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ТОЛЬКО ЭТИМИ ГАРАНТИЯМИ:
- НЕЯВНЫЕ ГАРАНТИИ ПРИГОДНОСТИ ТОВАРА ИЛИ ПРИГОДНОСТИ ДЛЯ ОТДЕЛЬНОЙ ЦЕЛИ.
- ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ НА ОСНОВЕ ПРИЦИПА
- "КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ
- СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.</P>
-
- <H3><A name="item1.4">1.4</A>) На каких платформах работает PostgreSQL?</H3>
-
- <P>Обычно, PostgreSQL может работать на любой современной платформе
- совместимой с Unix. В инструкции по установке, вы найдете список
- тех платформ, на которых были проведены тестовые запуски PostgreSQL
- к моменту выхода данной версии.</P>
-
- <P>PostgreSQL также работает на операционных системах Microsoft
- Windows, основанных на NT, таких как Win2000 SP4, WinXP и Win2003.
- Пакет инсталлятора доступен по адресу
- <A href="http://www.postgresql.org/download/windows">
- http://www.postgresql.org/download/windows</A>. Версии Windows,
- основанные на MS-DOS (Win95, Win98, WinMe) могут запускать
- PostgreSQL с помощью Cygwin.</P>
-
- <P>Также существует версия спортированная под Novell Netware 6 на
- <A href="http://developer.novell.com/wiki/index.php/Postgresql">http://developer.novell.com/wiki/index.php/Postgresql</A>,
- и версия для OS/2 (eComStation) на
- <A href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F">
- http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F</A>.</P>
-
- <H3><A name="item1.5">1.5</A>) Где можно взять PostgreSQL?</H3>
-
- <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>
-
-
- <H3><A name="item1.6">1.6</A>) Какая версия наиболее свежая?</H3>
-
- <P>Последний выпуск PostgreSQL - это версия 8.3.3</P>
-
- <P>Мы планируем выпускать новые старшие версии каждый год,
- а младшие версии каждые несколько месяцев.</P>
-
-
- <H3><A name="item1.7">1.7</A>) Где получить поддержку?</H3>
-
- <P>Сообщество PostgreSQL предоставляет помощь множеству пользователей
- через E-mail. Основной web-сайт для подписки на списки рассылки по
- E-mail это: <A href="http://www.postgresql.org/community/lists/">
- http://www.postgresql.org/community/lists/</A>. Хорошим местом для
- того, чтобы начать задавать вопросы являются списки <i>general</i>
- (общие вопросы) или <i>bugs</i> (ошибки).</P>
-
- <P>Главным IRC каналом является <I>#postgreql</I>,
- расположенный на сервере Freenode (<I>irc.freenode.net</I>). Чтобы
- подключиться, вы можете использовать в Unix вызов программы
- <code>irc -c '#postgresql' "$USER" irc.freenode.net</code> или
- любой другой IRC клиент. На этом же сервере существуют каналы на
- испанском (<I>#postgresql-es</I>), французском (<I>#postgresqlfr</I>)
- и бразильском (<I>#postgresql-br</I>) языках. Также существует канал
- по PostgreSQL на сервере EFNet.</P>
-
- <P>Список коммерческой поддержки компаний доступен на
- <A href="http://www.postgresql.org/support/professional_support">
- http://www.postgresql.org/support/professional_support</A>.</P>
-
-
- <H3><A name="item1.8">1.8</A>) Как мне сообщить об ошибке?</H3>
-
- <P>Посетите страничку со специальной формой отчёта об ошибке в
- PostgreSQL по адресу:
- <A HREF="http://www.postgresql.org/support/submitbug">
- http://www.postgresql.org/support/submitbug</A>.
- Также проверьте наличие более свежей версии PostgreSQL на нашем
- FTP сайте <A href="ftp://ftp.postgresql.org/pub/">
- ftp://ftp.postgresql.org/pub/</A>.</P>
-
- <P>На ошибки, уведомление о которых были сделаны через специальную
- форму или отправленные в какой-либо список рассылки PostgreSQL,
- обычно генерируется один из следующих ответов:</P>
- <UL>
- <LI>Это не ошибка и почему</LI>
- <LI>Это известная ошибка и она уже есть в списке
- <A HREF="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A></LI>
- <LI>Данная ошибка была исправлена в текущем выпуске</LI>
- <LI>Данная ошибка была исправлена, но исправление пока не попало в
- официальный выпуск</LI>
- <LI>Запрашивается более детальная информация:
- <UL>
- <LI>Операционная система</LI>
- <LI>Версия PostgreSQL</LI>
- <LI>Тест, воспроизводящий ошибку</LI>
- <LI>Отладочная информация</LI>
- <LI>Вывод backtrace отладчика</LI>
- </UL>
- </LI>
- <LI>Это новая ошибка. Может произойти следующее:
- <UL>
- <LI>Будет создано исправление, которое будет включено в следующий
- выпуск</LI>
- <LI>Ошибка не может быть исправлена немедленно и будет добавлена в список
- <A HREF="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A></LI>
- </UL>
- </LI>
- </UL>
-
- <H3><A name="1.9">1.9</A>) Как найти информацию об известных ошибках
- или отсутствующих возможностях?</H3>
-
- <P>PostgreSQL поддерживает расширенный подкласс <SMALL>SQL:2003</SMALL>.
- Смотрите наш список <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A>
- на предмет известных ошибок, отсутствующих возможностей и будущих
- планов.</P>
-
- <P>На запрос какой-либо возможности обычно приходят следующие ответы:</P>
- <UL>
- <LI>Данная возможность уже есть в списке
- <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A></LI>
- <LI>Данная возможность нежелательна потому что:
- <UL>
- <LI>Она дублирует существующую функциональность, которая следует
- стандарту SQL</LI>
- <LI>Данная возможность сильно усложнила бы код, но дала бы маленькую
- выгоду</LI>
- <LI>Данная возможность небезопасна или ненадёжна</LI>
- </UL>
- </LI>
- <LI>Данная новая возможность добавлена в список
- <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A>
- </LI>
- </UL>
-
- <P>PostgreSQL не использует какую-либо систему отслеживания ошибок,
- потому что мы обнаружили, что использование прямого обращения по
- электронной почте и обновляемого списка
- <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A>
- является более эффективным. На практике, ошибки в программном
- обеспечении сохраняются очень недолго, а ошибки, которые важны
- большому количеству пользователей исправляются моментально. Есть
- только одно место, где можно найти все изменения, улучшения и
- исправления, сделанные в выпуске PostgreSQL - это журналы сообщений
- системы контроля версий
- <A HREF="http://www.postgresql.org/developer/sourcecode/">CVS</A>.
- Даже замечания к выпускам не содержат все изменения, сделанные
- в программном обеспечении.</P>
-
-
- <H3><A name="item1.10">1.10</A>) Какая документация имеется в наличии?</H3>
-
- <P>PostgreSQL содержит много документации, включая большое руководство,
- страницы электронного руководства man и некоторые маленькие тестовые
- примеры. Смотрите в каталог <I>/doc</I>. Вы также можете просматривать
- документацию в Интернет по адресу <A href="http://www.postgresql.org/docs">
- http://www.postgresql.org/docs</A>.</P>
-
- <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, которые можно купить.
- Одну из наиболее популярных написал Корри Дуглас (Korry Douglas).
- Список обзоров по этим книгам доступен по адресу
- <a href="http://www.postgresql.org/docs/books/">http://www.postgresql.org/docs/books/</a>.
- Кроме того, по адресу <a href="http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides%2C_and_Documentation">http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides%2C_and_Documentation</a>
- вы можете найти коллекцию технических статей, посвещенных PostgreSQL.</P>
-
- <P>Клиент командной строки <I>psql</I> имеет несколько команд \d для
- отображения информации по типам, операторам, функциям, агрегатам и т.д. -
- используйте \? для получения списка доступных команд.</P>
-
- <P>Наш сайт содержит еще больше информации.</P>
-
-
- <H3><A name="item1.11">1.11</A>) Как мне научиться <SMALL>SQL</SMALL>?</H3>
-
- <P>Во-первых, возьмите одну из книг по PostgreSQL, о которых говорилось
- выше. Многим из наших пользователей также нравится книга
- <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>
-
- <P>Существует также множество прекрасных учебников доступных в online:
- <UL>
- <LI><A href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
- </LI>
- <LI><A href="http://sqlcourse.com/">http://sqlcourse.com.</A>
- </LI>
- <LI><A href="http://www.w3schools.com/sql/default.asp">http://www.w3school.com/sql/default.asp</A>
- </LI>
- <LI><A href="http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</A>
- </LI>
- </UL>
- </P>
-
- <H3><A name="item1.12">1.12</A>) Как мне прислать исправление или присоединится к команде разработчиков?</H3>
-
- <P>Смотрите <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
- FAQ для разработчиков</A>.</P>
-
-
- <H3><A name="item1.13">1.13</A>) Как сравнить PostgreSQL с другими
- <SMALL>СУБД</SMALL>? Может ли PostgreSQL быть встроенным?</H3>
-
- <P>
- Существует несколько методов сравнения программного обеспечения:
- возможности, производительность, надежность, поддержка и цена.</P>
-
- <DL>
- <DT><B>Возможности</B></DT>
-
- <DD>PostgreSQL имеет большинство возможностей представленных
- в больших коммерческих <SMALL>СУБД</SMALL>, такие как: транзакции,
- подзапросы, триггеры, представления, ссылочной
- целостности вторичного ключа и разные блокировки. У нас есть некоторые возможности,
- которых нет у них: типы, определяемые пользователем, механизм
- наследования, правила и конкуретное многоверсионное управление
- для работы с содержимым блокировок.<BR>
- <BR>
- </DD>
-
- <DT><B>Производительность</B></DT>
-
- <DD>Производительность PostgreSQL сходна с другими коммерческими
- СУБД и с СУБД с открытым исходным кодом. В каких-то вещах мы быстрее,
- в каких-то медленнее. Наша производительности обычно +/-10% по
- сравнению с другими СУБД.
- <BR>
- </DD>
-
- <DT><B>Надежность</B></DT>
-
- <DD>Мы понимали, что наша <SMALL>СУБД</SMALL> должна быть надежной
- или она ничего не будет стоить. Мы стараемся выпускать хорошо проверенный,
- стабильный код, который содержит минимум ошибок. Каждый выпуск
- проходит стадию бета-тестирования по крайней мере в течении одного
- месяца и наша история выпусков показывает что мы можем предоставлять
- стабильные, монолитные выпуски, которые готовы к продуктивному
- использованию. Мы верим, что мы производим проверку не хуже,
- чем у других СУБД.<BR>
- <BR>
- </DD>
-
- <DT><B>Поддержка</B></DT>
-
- <DD>Наш список рассылки предоставляет возможможность общения с
- большой группой разработчиков и пользователей, которые могут помочь решить
- любые возникшие проблемы. В то же время, мы не гарантируем какие-либо
- исправления, но и разработчики коммерческих <SMALL>СУБД</SMALL> не всегда
- делают исправления. Прямой доступ к разработчикам, сообществу
- пользователей, руководствам и исходным текстам часто делают поддержку
- PostgreSQL превосходящей другие <SMALL>СУБД</SMALL>. Существует
- коммерческая поддержка по результам возникших инцидентов, которая
- доступна для тех кому она нужна. (Смотрите <A href="#item1.7">Секцию 1.7</A>.)<BR>
- <BR>
- </DD>
-
- <DT><B>Цена</B></DT>
-
- <DD>Наш продукт бесплатен как для коммерческого так, и не для
- коммерческого использования. Вы можете добавлять свой код в наш
- продукт без ограничений, за исключением тех, что описываются в
- нашей лицензии стиля BSD, которая приведена выше.<BR>
- <BR>
- </DD>
- </DL>
-
- <P>PostgreSQL разрабатывается по архитектуре клиент/сервер, которая
- требует отдельных процессов для каждого клиента и сервера, а также
- несколько вспомогательных процессов. Многие встраиваемые архитектуры
- могут соответствовать таким требованиям. Однако, если ваша встраиваемая
- архитектура требует сервер баз данных для запуска внутри прикладного
- процесса, вы не можете использовать Postgres и вам лучше бы выбрать
- для базы данных какое-либо другое облегченное решение.</P>
-
- <H3><A name="item1.14">1.14</A>) Будет ли PostgreSQL работать с
- последними изменениями, в разных страных, касающимися дневного времени?</H3>
-
- <P>Изменения в сохранении дневного времени в США включены в PostgreSQL версии
- 8.0.[4+] и во все следующие выпуски, например в 8.1. Изменения по Канаде
- и Западной Австралии включены в 8.0.[10+], 8.1.[6+] и все следующие
- выпуски. Выпуски PostgreSQL до 8.0 используют информацию о сохранении
- дневного времени из базы данных временных зон в операционной системе.</p>
- <HR>
-
- <H3 id="item1.15">1.15) Как мне отписаться от списков рассылки PostgreSQL?
- Как избежать получения дублирующих сообщений?</H3>
-
- <P>Страница <a
- href="http://mail.postgresql.org/mj/mj_wwwusr/domain=postgresql.org?user=&amp;passw=&amp;func=login">Majordomo</a>
- на сайте PostgreSQL позволяет подписаться или отписаться от любого из списков
- рассылки PostgreSQL. (Вам может понадобится ваш пароль для Majordomo, который
- отправляется на ваш E-mail, чтобы войти в управление вашими подписками.)</P>
-
- <P>Все списки рассылки PostgreSQL настариваются так, чтобы групповой ответ уходил
- на адрес списка <I>и</I> на адрес автора сообщения. Так сделано, чтобы пользователи
- получали ответы на E-mail как можно быстрее. Если вы не хотите получать дублирующие
- E-mail сообщения из списка, в случаях когда вы уже получили эти сообщения напрямую,
- установите флажок <I>eliminatecc</I> на странице <I>Change Settings</I> в
- Majordomo. Вы также можете избежать получения копий своих сообщений для самого себя,
- если снимите флажок <I>selfcopy</I>.</P>
-
- <HR>
-
- <H2 align="center">Вопросы пользователей по клиентской части</H2>
-
- <H3><A name="item2.1">2.1</A>) Какие интерфейсы есть для PostgreSQL?</H3>
-
- <P>Установка PostgreSQL включает только <small>C</small> и встроенный
- (embedded) <small>C</small> интерфейсы. Все другие интерфейсы
- являются независимыми проектами и загружаются отдельно; самостоятельность
- проектов позволяет им организовать собственное расписание выпусков
- новых версий и иметь собственную команду разработчиков.</P>
-
- <P>Некоторые языки программирования, такие как <small>PHP</small>
- включают в себя интерфейс к PostgreSQL. Интерфейсы для таких языков
- как Perl, <small>TCL</small>, Python и многих других, доступны на
- <a href="http://pgfoundry.org">http://pgfoundry.org</A>.</P>
-
- <H3><A name="item2.2">2.2</A>) Какие инструменты существуют для использования
- PostgreSQL через Web?</H3>
-
- <P>Прекрасное введение во взаимодействие баз данных и Web можно найти на:
- <A href="http://www.webreview.com">http://www.webreview.com</A></P>
-
- <P>Для интеграции с Web, PHP <A href="http://www.php.net">
- http://www.php.net</A> является неплохим интерфейсом.</P>
-
- <P>В сложных случаях, многие пользуются Perl и DBD::Pg с CGI.pm
- или mod_perl.</P>
-
- <H3><A name="item2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс
- пользователя?</H3>
-
- <P>Для PostgreSQL существует большое количество инструментов с
- графическим интерфейсом как коммерческих, так и открытых. Подробности
- можно найти в <A href="http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools">
- Документации сообщества для GUI иструментов PostgreSQL</A></P>
-
- <HR>
-
- <H2 align="center">Вопросы администрирования</H2>
-
- <H3><A name="item3.1">3.1</A>) Как мне установить PostgreSQL в место отличное
- от <I>/usr/local/pgsql</I>?</H3>
-
- <P>Задайте опцию <I>--prefix</I> когда запускаете <I>configure</I>.</P>
-
- <H3><A name="item3.2">3.2</A>) Как мне управлять соединениями от других
- компьютеров?</H3>
-
- <P>По умолчанию, PostgreSQL разрешает только соединения на локальной
- машине через сокеты домена Unix или TCP/IP соединения. Для того, чтобы
- другие машины смогли подключиться к базе вы должны изменить
- <I>listen_addresses</I> в <I>postgresql.conf</I>, разрешить
- host-авторизация в файле <I>$PGDATA/pg_hba.conf</I> и перестартовать
- сервер СУБД.</P>
-
- <H3><A name="item3.3">3.3</A>) Какие настройки мне нужно сделать для улучшения
- производительности?</H3>
-
- <P>Существует три главных области, которые потенциально могут
- увеличить производительность:</P>
-
- <DL>
- <DT><B>Изменение запроса</B></DT>
- <DD>Это означает модификацию запросов для получения лучшей
- производительности:
- <UL>
- <LI>Создание индексов, включая индексы выражений и частичные индексы</LI>
- <LI>Использование COPY вместо множества <small>INSERT</small></LI>
- <LI>Группировка нескольких операторов в единую транзакцию для
- уменьшения нагрузки при выполнении завершения транзакции</LI>
- <LI>Использование <small>CLUSTER</small>, когда из индекса берётся
- множество строк</LI>
- <LI>Использование <small>LIMIT</small> для того, чтобы возвращалась
- только часть вывода от запроса</LI>
- <LI>Использование Подготовленных (Prepared) запросов</LI>
- <LI>Использование <small>ANALYZE</small> для обслуживания статистики
- оптимизатора</LI>
- <LI>Регулярное использование <small>VACUUM</small> или <I>pg_autovacuum</I></LI>
- <LI>Удаление индексов во время больших изменений данных</LI>
- </UL>
- <BR><BR>
- </DD>
-
- <DT><B>Настройка сервера</B></DT>
-
- <DD>Некоторые установки в <I>postgresql.conf</I> влияют на
- производительность. Подробный полный список установок см. в
- <A href="http://www.postgresql.org/docs/current/static/runtime-config.html">
- Administration Guide/Server Run-time Environment/Run-time Configuration</A>,
- а комментарии см. в <A href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">
- http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</A>
- и <A href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">
- http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</A>.
- <BR><BR>
- </DD>
-
- <DT><B>Выбор "железа" - аппаратного обеспечения</B></DT>
-
- <DD>Влияние "железа" на производительность подробно описано в
- <A href="http://www.powerpostgresql.com/PerfList/">
- http://www.powerpostgresql.com/PerfList/</A> и
- <A href="http://momjian.us/main/writings/pgsql/hw_performance/index.html">
- http://momjian.us/main/writings/pgsql/hw_performance/index.html</A>.
- <BR>
- <BR>
- </DD>
- </DL>
-
- <H3><A name="item3.4">3.4</A>) Какие возможности для отладки есть в
- наличии?</H3>
-
- <P>Есть множество установок в настройках сервера, начинающихся
- на <code>log_*</code> на <a
- href="http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html">http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html</a>,
- позволяющих протоколировать запросы и статистику работы процесса,
- которая очень полезна для отладки и измерения производительности.</P>
-
-
- <H3><A name="item3.5">3.5</A>) Почему я получаю сообщение <I>"Sorry, too
- many clients"</I> когда пытаюсь подключиться к базе?</H3>
-
- <P>Вы достигли установленного по умолчанию ограничения в 100 сессий
- подключения к базе данных. Вам необходимо увеличить лимит на количество
- конкурентных backend процессов для вашего сервера БД,
- изменив значение <I>max_connections</I> в файле <I>postgresql.conf</I>
- и перестартовать сервер БД.</P>
-
-
- <H3><A name="item3.6">3.6</A>) Как выполнить обновление PostgreSQL?</H3>
-
- <P>См. информацию об обновлении в <a
- href="http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning</a>
- и специальные инструкции в <a href="http://www.postgresql.org/docs/current/static/install-upgrading.html">
- http://www.postgresql.org/docs/current/static/install-upgrading.html</a>.</P>
-
-
- <H3><A name="item3.7">3.7</A>) Какое компьютерное "железо" я должен
- использовать?</H3>
-
- <P>Поскольку "железо" персональных компьютеров является наиболее
- совместимым, люди склонны верить, что такое "железо" имеет одинаковое
- качество. Это не так. Память ECC, SCSI и качественные материнские платы
- являются более надёжными и имеют более лучшую производительность, чем
- менее дорогое "железо". PostgreSQL будет работать на любом "железе",
- но если для вас важны надёжность и производительность, то с вашей стороны
- будет мудро поставить соответствующее "железо". Обсудить разное "железо"
- можно в наших списках рассылки.</P>
-
- <HR>
-
- <H2 align="center">Вопросы эксплуатации</H2>
-
- <H3><A name="item4.1">4.1</A>) Как выполнить <SMALL>SELECT</SMALL> только
- для нескольких первых строчек запроса? Произвольной строки?</H3>
-
- <P>Для получения только нескольких строк, если вы знаете их количество
- на момент выполнения <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
- FROM tab
- ORDER BY random()
- LIMIT 1;
-</PRE>
-
-
- <H3><A name="item4.2">4.2</A>) Как мне найти какие таблицы, индексы,
- базы данных и пользователи существуют? Как мне увидеть запросы,
- которые использует <I>psql</I> для получения этой информации?</H3>
-
- <P>Чтобы просматривать таблицы в <I>psql</I>, используйте команду \dt.
- Полный список команд в <I>psql</I> вы можете получить, используя \?.
- Кроме того, вы можете посмотреть исходный код <I>psql</I> в файле
- <I>pgsql/src/bin/psql/describe.c</I>. Он содержит команды
- <SMALL>SQL</SMALL> которые генерируются при вводе в <I>psql</I> команд,
- начинающихся с обратной косой черты. Вы также можете запустить
- <I>psql</I> с опцией <I>-E</I> так, чтобы эта программа выдавала
- запросы, которые она использует для выполнения заданных вами
- команд. PostgreSQL также предоставляет <SMALL>SQL</SMALL>
- совместимый с INFORMATION SCHEMA интерфейс, с помощью которого, вы
- можете сформировать запрос на получение информации о базе данных.</P>
-
- <P>Также существуют системные таблицы, начинающиеся с <I>pg_</I>.</P>
-
- <P>Используйте <I>psql -l</I> для получения списка всех баз данных.</P>
-
- <P>Также посмотрите файл <I>pgsql/src/tutorial/syscat.source</I>.
- Он показывает многие из операторов <SMALL>SELECT</SMALL> необходимых
- для получения информации из системных таблиц базы данных.</P>
-
-
- <H3><A name="item4.3">4.3</A>) Как изменить тип данных колонки?</H3>
-
- <P>В 8.0 и более поздних версиях, изменение типа колонки выполняется
- очень легко через <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P>
-
- <P>В более ранних версиях сделайте так:</P>
-<PRE>
- BEGIN;
- ALTER TABLE tab ADD COLUMN new_col <i>new_data_type</i>;
- UPDATE tab SET new_col = CAST(old_col AS <i>new_data_type</i>);
- ALTER TABLE tab DROP COLUMN old_col;
- COMMIT;
-</PRE>
-
- <H3><A name="item4.4">4.4</A>) Каковы максимальные размеры для строк в таблице,
- таблиц и базы данных?</H3>
-
- <P>Существуют следующие ограничения:</P>
-<BLOCKQUOTE>
-<TABLE>
-<TR>
- <TD>Максимальный размер базы?</TD>
- <TD>неограничен (существуют базы на 32 TB)</TD>
-</TR>
-<TR>
- <TD>Максимальный размер таблицы?</TD>
- <TD>32 TB</TD>
-</TR>
-<TR>
- <TD>Максимальный размер строки?</TD>
- <TD>400 Gb</TD>
-</TR>
-<TR>
- <TD>Максимальный размер поля?</TD>
- <TD>1 GB</TD>
-</TR>
-<TR>
- <TD>Максимальное количество строк в таблице?</TD>
- <TD>неограничено</TD>
-</TR>
-<TR>
- <TD>Максимальное количество колонок в таблице?</TD>
- <TD>250-1600 в зависимости от типа</TD>
-</TR>
-<TR>
- <TD>Максимальное количество индексов в таблице?</TD>
- <TD>неограничено</TD>
-</TR>
-</TABLE>
-</BLOCKQUOTE>
-<BR>
- <P>Разумеется, понятие "неограничено" на самом деле ограничивается
- доступным дисковым пространиством и размерами памяти/своппинга.
- Когда значения перечисленные выше неоправдано большие, может
- пострадать производительность.</P>
-
- <P>Максимальный размер таблицы в 32 TB не требует чтобы операционная
- система поддерживала файлы больших размеров. Большие таблицы хранятся
- как множество файлов размером в 1 GB, так что ограничения, которые
- накладывает файловая система не важны.</P>
-
- <P>Максимальный размер таблицы и максимальное количество колонок
- могут быть увеличены в четыре раза, если размер блока по умолчанию будет
- увеличен до 32k.</P>
-
- <P>Существует ограничение, по которому индексы не могут создаваться для
- колонок длиннее чем 2,000 символов. К счастью такие индексы вряд ли
- действительно кому-то нужны. Уникальность гарантируется наилучим образом,
- с помощью функционального индекса из хэша MD5 длинной колонки, а
- полнотекстовое индексирование позволяет искать слова внутри колонки.</P>
-
- <H3><A name="item4.5">4.5</A>) Как много дискового пространства в базе данных
- нужно для сохранения данных из обычного текстового файла?</H3>
-
- <P>СУБД PostgreSQL может потребоваться дискового пространства до 5 раз
- больше для сохранения данных из простого текстового файла.</P>
-
- <P>В качестве примера, рассмотрим файл в 100,000 строк в каждой, из
- которых целое число и текстовое описание. При этом длина текста,
- в среднем, составляет 20 байт. Размер простого файла составит 2.8 MB.
- Размер базы PostgreSQL, содержащей эти же данные составит приблизительно
- 5.2 MB из которых:</P>
-<PRE>
- 24 байт: на каждый заголовок строки в таблице (приблизительно)
- + 24 байта: одно поле с целочисленным типом и одно текстовое поле
- + 4 байта: указатель на странице для всей табличной строки
- ----------------------------------------
- 56 байт на строку в таблице
-
- Размер страницы данных в PostgreSQL составляет 8192 байт (8 KB), так что:
-
- 8192 байт на страницу
- --------------------- = 158 строк в таблице на страницу БД (округлённо)
- 52 байт на строку в таблице
-
- 100000 строк данных
- ----------------------- = 633 страниц в БД (округлённо)
- 158 строк в таблице на страницу
-
- 633 страниц БД * 8192 байт на страницу = 5,185,536 байт (5.2 MB)
-</PRE>
-
- <P>Индексы не требуют так много, но поскольку они создаются для
- большого количества данных, они также могут быть велики.</P>
-
- <P>Значения <small>NULL</small> хранятся как битовые карты и поэтому они
- занимают очень мало места.
- </P>
-
- <H3><A name="item4.6">4.6</A>) Почему мои запросы работают медлено? Почему
- они не используют мои индексы?</H3>
-
- <P>Индексы не используются для каждого запроса. Они
- используются только если таблица больше минимального размера и запрос
- выбирает только маленький процент строк в таблице. Так устроено,
- потому что доступ к диску с применением рандомизации при сканировании
- индексов может быть медленнее, чем простое чтение таблицы или ее
- последовательное сканирование.</P>
-
- <P>Чтобы определить необходимость использования индекса для какой-либо
- таблицы, PostgreSQL должен иметь статистику по этой таблице. Эта
- статистика собирается при использовании <SMALL>VACUUM ANALYZE</SMALL>
- или просто <SMALL>ANALYZE</SMALL>. Используя статистику, оптимизатор
- узнает о том как много строк в таблице и если он должен использовать
- индексы, то он может принимать лучшие решения. Статистика также
- влияет на определение оптимального порядка связывания и метода связывания.
- При изменении содержимого таблицы должен периодически выполнятся
- сбор статистики.</P>
-
- <P>Обычно индексы не используются для <SMALL>ORDER BY</SMALL> или для
- выполнения связываний. Последовательный перебор следующий за явной
- сортировкой обычно быстрее, чем поиск по индексам в большой таблице.
- Однако, <SMALL>ORDER BY</SMALL> часто комбинируется с <SMALL>LIMIT</SMALL>
- и в этом случае индекс будет использоваться, поскольку при выполнении
- будет возвращаться небольшая часть таблицы.</P>
-
- <P>Если вам кажется, что оптимизатор некорректно выбирает последовательный
- перебор, используйте <CODE>SET enable_seqscan TO 'off'</CODE> и
- запустите запрос снова, чтобы увидеть, действительно ли сканирование
- индексов быстрее.
- </P>
-
- <P>Когда используются операции с шаблонами, например <SMALL>LIKE</SMALL>
- или <I>~</I>, индексы могут быть использованы в следующих случаях:</P>
- <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> не использует индексы. Вместо него, используйте индексы
- выражений, которые описываются в секции <A href="#item4.8">4.8</A>.</LI>
- <LI>Во время <i>initdb</i> должна использоваться локаль по умолчанию
- <i>C</i>, потому что не существует возможности узнать следующий наибольший
- символ для не-C локали. Вы можете для таких случаев создать специальный
- индекс <CODE>text_pattern_ops</CODE> который работает только для
- <SMALL>LIKE</SMALL> индексирования. Для поиска слов также можно
- использовать полнотекстовый индекс.</LI>
- </UL>
-
- <H3><A name="item4.7">4.7</A>) Как посмотреть на то, как оптимизатор выполняет
- мой запрос?</H3>
-
- <P>Смотрите страницу руководства посвященную <SMALL>EXPLAIN</SMALL>.</P>
-
-
- <H3><A name="item4.8">4.8</A>) Как мне выполнить поиск регулярного выражения
- и поиск независимый от регистра букв поиск регулярного выражения?
- Как мне использовать индекс для поиска независимого от регистра букв?</H3>
-
- <P>Оператор <I>~</I> производит поиск регулярного выражения, а оператор
- <I>~*</I> производит независимый от регистра букв поиск регулярного
- выражения. Независимый от регистра вариант <SMALL>LIKE</SMALL> называется
- <SMALL>ILIKE</SMALL>.</P>
-
- <P>Независимое от регистра сравнение обычно выражается так:</P>
-<PRE>
- SELECT *
- FROM tab
- WHERE lower(col) = 'abc';
-</PRE>
-
- Эта конструкция не будет использовать стандартный индекс. Однако, если
- вы создадите индекс выражения, он будет использован:
-<PRE>
- CREATE INDEX tabindex ON tab (lower(col));
-</PRE>
- <P>Если вышеуказанный индекс создаётся как <SMALL>UNIQUE</SMALL>, то
- колонка, для которой он создаётся может хранить символы и в верхнем,
- и в нижнем регистре, индес не может иметь идентичных значений, которые
- отличаются только регистром. Чтобы в колонке можно было хранить символы
- только в определённом регистре, используйте ограничение
- <SMALL>CHECK</SMALL> или проверку через триггер.</P>
-
- <H3><A name="item4.9">4.9</A>) Как мне определить, что значение поля в каком-либо
- запросе равно <SMALL>NULL</SMALL>? Как мне соединить возможные
- <SMALL>NULL</SMALL>? Могу я сортировать поля <SMALL>NULL</SMALL> или нет?</H3>
-
- <P>Вы просто сравниваете значение с <SMALL>IS NULL</SMALL> и
- <SMALL>IS NOT NULL</SMALL>, как здесь:</P>
-<PRE>
- SELECT *
- FROM tab
- WHERE col IS NULL;
-</PRE>
-
- <P>Чтобы соединить с возможными значениями <SMALL>NULL</SMALL>, используйте
- <I>COALESCE()</I> как здесь:</P>
-<PRE>
- SELECT COALESCE(col1, '') || COALESCE(col2, '')
- FROM tab
-</PRE>
-
- <P>Чтобы отсортировать данные по значению <NULL> используйте модификаторы
- <SMALL>IS NULL</SMALL> и <SMALL>IS NOT NULL</SMALL> в выражении
- <SMALL>ORDER BY</SMALL>. Когда они будут генерировать значения
- <I>истина</I>, то при сортировке они будут выше, чем значения
- <I>ложь</I>, так что записи с NULL будут в отсортированном списке сверху:</P>
-
-<PRE>
- SELECT *
- FROM tab
- ORDER BY (col IS NOT NULL);
-</PRE>
-
- <H3><A name="item4.10">4.10</A>) Каковы отличия между разными символьными
- типами?</H3>
-<BLOCKQUOTE>
-<TABLE>
-<TR>
- <TH>Тип</TH>
- <TH>Внутреннее имя</TH>
- <TH>Замечания</TH>
-</TR>
-<TR>
- <TD>VARCHAR(n)</TD>
- <TD>varchar</TD>
- <TD>размер задает максимальную длину, нет заполнения</TD>
-</TR>
-<TR>
- <TD>CHAR(n)</TD>
- <TD>bpchar</TD>
- <TD>заполняется пустотой до фиксированной длины</TD>
-</TR>
-<TR>
- <TD>TEXT</TD>
- <TD>text</TD>
- <TD>нет задаваемого верхнего ограничения или длины</TD>
-</TR>
-<TR>
- <TD>BYTEA</TD>
- <TD>bytea</TD>
- <TD>массив байт переменной длины (можно использовать null-байт без опаски)</TD>
-</TR>
-<TR>
- <TD>"char"</TD>
- <TD>char</TD>
- <TD>один символ</TD>
-</TR>
-</TABLE>
-</BLOCKQUOTE>
-
- <P>Внутреннее имя вы можете увидеть, когда смотрите системные каталоги
- и в некоторых сообщениях об ошибках.</P>
-
- <P>Первые четыре типа являются "varlena" типами (т.е., первые
- четыре байта на диске являются длинной, за которой следуют данные).
- Таким образом, фактически используемое пространство больше, чем
- обозначенный размер. Однако, длинные значения также сжимаются,
- так что занимаемое дисковое пространство может также быть и меньше,
- чем ожидалось.</P>
-
- <SMALL>VARCHAR(n)</SMALL> - это лучшее решение, когда нужно хранить
- строки переменной длины, не превышающие определенного размера.
- <SMALL>TEXT</SMALL> - это лучшее решение для строк неограниченной длины,
- с максимально допустимой длиной в 1 гигабайт.
- <P><SMALL>CHAR(n)</SMALL> - это лучшее решение для хранения строк, которые
- обычно имеют одинаковую длину. <SMALL>CHAR(n)</SMALL> заполняется
- пустотой до заданной длины, в то время как <SMALL>VARCHAR(n)</SMALL>
- хранит только символы, из которых состоит строка.
- <SMALL>BYTEA</SMALL> используется для хранения бинарных данных, значения
- которых могут включать <SMALL>NULL</SMALL> байты. Все типы описанные
- здесь, имеют сходные характеристики производительности.</P>
-
- <H3><A name="item4.11.1">4.11.1</A>) Как мне создать поле
- serial/с-авто-увеличением?</H3>
-
- <P>PostgreSQL поддерживает тип данных <SMALL>SERIAL</SMALL>. Он
- автоматически создает последовательность. Например:</P>
-<PRE>
- CREATE TABLE person (
- id SERIAL,
- name TEXT
- );
-</PRE>
-
- автоматически транслируется в:
-<PRE>
- CREATE SEQUENCE person_id_seq;
- CREATE TABLE person (
- id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
- name TEXT
- );
-</PRE>
-
- <P>Автоматически созданная последовательность имеет имя вида
- &lt;<I>таблица</I>&gt;_&lt;<I>колонка_serial</I>&gt;_<I>seq</I>, где
- <I>таблица</I> и <I>колонка_serial</I> - это соответственно имена
- таблицы и колонки с типом <SMALL>SERIAL</SMALL>.
- Смотрите подробности о последовательностях на странице руководства
- посвященной <I>create_sequence</I>.</P>
-
- <H3><A name="item4.11.2">4.11.2</A>) Как мне получить значение при вставке
- <SMALL>SERIAL</SMALL>?</H3>
-
- <P>Простейший способ получить назначенное значение <SMALL>SERIAL</SMALL>
- это использовать <SMALL>RETURNING</SMALL>. Используя для примера таблицу в <A
- href="#item4.11.1">4.11.1</A>, это может выглядеть так:</P>
-
-<PRE>
- INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
-</PRE>
-
- Вы также можете вызвать <I>nextval()</I> и использовать это значение в
- <SMALL>INSERT</SMALL> или вызвать <I>currval()</I> <I>после</I>
- <SMALL>INSERT</SMALL>.
-
-
- <H3><A name="item4.11.3">4.11.3</A>) Не может ли получиться так, что
- использование <I>currval()</I> и <I>nextval()</I> приведет к
- зациклированию с другими пользователями?</H3>
-
- <P>Нет. <i>currval()</i> возвращает текущее значение, назначенное вашей
- сессией, а не другими сессиями.</P>
-
- <H3><A name="item4.11.4">4.11.4</A>) Почему числа из моей последовательности
- не используются снова при отмене транзакции? Почему создаются разрывы
- при нумерации в колонке, где я использую последовательность/SERIAL?</H3>
-
- <P>Для реализации конкуретности, значения последовательностей, при
- необходимости выдаются во время запуска транзакций и не блокируются
- до полного выполнения транзакций. Это может вызывать разрывы в
- нумерации при отмене транзакций.</P>
-
-
- <H3><A name="item4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое
- <SMALL>CTID</SMALL>?</H3>
-
- <P>Если таблица создана с <SMALL>WITH OIDS</SMALL>, то каждая строка
- получает уникальный индентификатор <SMALL>OID</SMALL>.
- O<SMALL>ID</SMALL> - это автоматически назначаемое уникальное 4-х
- байтовое целое число, которое уникально для всей установленной СУБД.
- Однако, после того как его значение превысит 4 миллиарда, значения
- O<SMALL>ID</SMALL> начинают дублироваться. PostgreSQL использует
- <SMALL>OID</SMALL> для связывания своих внутренних таблиц.</P>
-
- <P>Для уникального значения в строках таблицы пользователя, лучшим
- способом является использование <SMALL>SERIAL</SMALL> вместо
- O<SMALL>ID</SMALL>, потому что последовательности <SMALL>SERIAL</SMALL>
- уникальны только внутри таблицы и таким образом меньше подвержены
- переполнению. Для хранения значений 8-ми байтной последовательности
- доступен тип <SMALL>SERIAL8</SMALL>.
-
- <P>C<SMALL>TID</SMALL> используется для идентификации специальных
- физических записей с блочными и offset значениями. C<SMALL>TID</SMALL>
- изменяется после того как строки в таблице были изменены или перегружены.
- <P>T<SMALL>ID</SMALL> используется индексными записями в качестве
- указателя на физические записи.</P>
-
-
- <H3><A name="item4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory
- exhausted in AllocSetAlloc()"</I>?</H3>
-
- <P>Предположительно у вас закончилась виртуальная память
- или что ваше ядро имеет маленький лимит на определенные ресурсы.
- Попытайтесь перед запуском сервера БД выполнить следующие
- команды:</P>
-<PRE>
- ulimit -d 262144
- limit datasize 256m
-</PRE>
-
- В зависимости от командного интерпретатора shell, только одна из данных
- команд выполнится успешно, но она позволит вам установить больший
- сегмент данных процесса и возможно решит проблему. Эта команда
- изменяет параметры текущего процесса и всех его потомков, созданных
- после её запуска. Если у вас возникла проблема с <SMALL>SQL</SMALL>
- клиентом, потому что backend возвращает слишком большой объем данных,
- попытайтесь выполнить эту команду перед запуском клиента.
-
- <H3><A name="item4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL
- запущена?</H3>
-
- <P>Из <I>psql</I>, наберите <CODE>SELECT version();</CODE></P>
-
-
- <H3><A name="item4.15">4.15</A>) Как мне создать колонку которая по умолчанию
- будет содержать текущее время?</H3>
-
- <P>Используйте <I>CURRENT_TIMESTAMP</I>:</P>
-<PRE>
-CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
-</PRE>
-
- <H3><A name="item4.16">4.16</A>) Как мне выполнить внешнее связывание?</H3>
-
- <P>PostgreSQL поддерживает внешнее связывание,
- используя стандартный синтаксис SQL. Вот два примера:</P>
-<PRE>
- SELECT *
- FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-</PRE>
-
- или
-<PRE>
- SELECT *
- FROM t1 LEFT OUTER JOIN t2 USING (col);
-</PRE>
-
- <P>Это идентичные запросы связывания t1.col и t2.col, также возвращают
- любые несвязанные строки в t1 (которые не совпадают с t2).
- <SMALL>RIGHT</SMALL> связывание должно добавить несвязанные строки
- t2. <SMALL>FULL</SMALL> связывание должно возвратить совпавшие
- строки плюс все несвязанные строки из t1 и t2. Слово <SMALL>OUTER</SMALL>
- является необязательным и назначается в <SMALL>LEFT</SMALL>,
- <SMALL>RIGHT</SMALL> и <SMALL>FULL</SMALL> связываниях. Обычные
- связывания называются <SMALL>INNER</SMALL> связывания.</P>
-
- <H3><A name="item4.17">4.17</A>) Как выполнять запросы, использующие несколько
- баз данных?</H3>
-
- <P>Не существует способа создать запрос к базам данных отличным от текущей.
- Поскольку PostgreSQL загружает системные каталоги специфичные для базы
- данных, непонятно даже, как должен себя вести такой межбазовый запрос.</P>
-
- <P><I>contrib/dblink</I> позволяет запросы между базами, используя
- вызовы функций. Разумеется, клиент может одновременно также устанавливать
- соедиенения с различными базами данных и таких образом объединять
- информацию из них.</P>
-
- <H3><A name="item4.18">4.18</A>) Как мне вернуть из функции несколько строк таблицы?</H3>
-
- <P>Вы можете легко использовать функции, возвращающие список,
- <a href="http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions">
- http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions</a>.</P>
-
- <H3><A name="item4.19">4.19</A>) Почему я получаю ошибку "relation with OID ####
- не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?</H3>
-
- <P>В PostgreSQL до версии 8.3, PL/PgSQL кэширует сценарии функции и один из
- негативных эффектов этого состоит в том, что если функция PL/PgSQL обращается
- к временной таблице и эта таблица позднее удаляется и пересоздается, а функция
- затем вызывается снова, то ее вызов приведет к ошибке, потому что скэшированное
- содержимое функции содержит указатель на старую временную таблицу. Чтобы решить
- эту проблему, используйте <SMALL>EXECUTE</SMALL> для доступа к временным
- таблицам в PL/PgSQL. Использование этого оператора заставит запрос
- перегенерироваться каждый раз.</P>
-
- <P>В PostgreSQL 8.3 и позднее, этой проблемы нет.</p>
-
-
- <H3><A name="item4.20">4.20</a>) Какие есть решения для репликации?</H3>
-
- <P>Хотя "репликация" -- это единый термин, есть несколько разных технологий
- для выполнения репликаций с разными особенностями для каждой.</P>
-
- <P>Репликация Master/slave позволяет иметь один главный (master) сервер
- для выполнения запросов чтения/записи, в то время как подчинённые
- (slave) сервера могут производить только запросы
- чтения/<SMALL>SELECT</SMALL>. Наиболее популярным решением для репликации
- master-slave в PostgreSQL является
- <A href="http://main.slony.info/">
- Slony-I</A>.</P>
-
- <P>Репликация Multi-master позволяет выполнять запросы чтения/записи
- на нескольких, реплицируемых друг с другом компьюетрах. Эта особенность
- также приводит к потере производительности, потому что необходима
- синхронизация изменений между несколькими серверами. Наиболее
- популярным решением для такой репликации в PostgreSQL является
- <A href="http://pgfoundry.org/projects/pgcluster/">PGcluster</A>.
-
- <H3><A name="item4.21">4.21</A>) Почему имена таблицы и колонок не
- распознаются в в моём запросе? Почему не сохраняются заглавные буквы?</H3>
-
- <P>Наиболее часто имена нераспознаются из-за использования двойных кавычек в
- имени таблицы или колонки при создании таблицы. При использовании двойных
- кавычек, имя таблицы и колонки (которые называют идентификаторами)
- сохраняются в <A href="http://www.postgresql.org/docs/current/static/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS">
- регистро-зависимом виде</A>; это означает, что вы должны использовать
- двойные кавычки, когда указываете эти имена в запросе. Некоторые
- интерфейсы, такие как pgAdmin, во время создания таблицы добавляют
- двойные кавычки автоматически. Таким образом, чтобы идентификаторы
- распознавались вы должны следовать одному из следующих правил:
- <UL>
- <LI>Избегать использования двойных кавычек при создании таблиц</LI>
- <LI>Использовать в идентификаторах только символы нижнего регистра</LI>
- <LI>Использовать двойные кавычки для идентификаторов в запросах</LI>
- </UL>
-
- </BODY>
-</HTML>