From 49c320b19d34e0e8ee5229311631ef827982159f Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 11 Feb 2005 04:53:51 +0000 Subject: Update to Russian FAQ, HEAD and 8.0.X. --- doc/src/FAQ/FAQ_russian.html | 1127 +++++++++++++++--------------------------- 1 file changed, 389 insertions(+), 738 deletions(-) (limited to 'doc/src') diff --git a/doc/src/FAQ/FAQ_russian.html b/doc/src/FAQ/FAQ_russian.html index c065123f1ce..16f50832dd0 100644 --- a/doc/src/FAQ/FAQ_russian.html +++ b/doc/src/FAQ/FAQ_russian.html @@ -12,7 +12,7 @@

Ответы на часто задаваемые вопросы по PostgreSQL

-

Дата последнего обновления: Среда 15 декабря 20:06:34 EST 2004

+

Дата последнего обновления: Среда 2 февраля 12:44:03 EST 2005

Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (pgman@candle.pha.pa.us)
@@ -22,124 +22,101 @@

Самую свежую английскую версию документа можно найти на - http://www.PostgreSQL.org/docs/faqs/FAQ.html.

+ http://www.PostgreSQL.org/files/documentation/faqs/FAQ.html.

Ответы на вопросы специфичные для конкретных платформ можно найти на - http://www.PostgreSQL.org/docs/index.html.

+ http://www.PostgreSQL.org/docs/faq/.


Общие вопросы

- 1.1) Что такое PostgreSQL? Как произносится это название?
+ 1.1) Что такое PostgreSQL? Как произносится это название?
1.2) Каковы авторские права на PostgreSQL?
- 1.3) На каких Unix платформах работает PostgreSQL?
- 1.4) Существуют ли версии портированные не на Unix системы?
- 1.5) Где можно взять PostgreSQL?
- 1.6) Где получить поддержку?
+ 1.3) На каких платформах работает PostgreSQL?
+ 1.4) Где можно взять PostgreSQL?
+ 1.5) Где получить поддержку?
+ 1.6) Как мне сообщить об ошибке?
1.7) Какая версия последняя?
1.8) Какая документация имеется в наличии?
1.9) Как найти информацию об известных ошибках или отсутствующих возможностях?
1.10) Как научиться SQL?
- 1.11) Решена ли в PostgreSQL проблема 2000-го года (Y2K)?
- 1.12) Как присоединится к команде разработчиков?
- 1.13) Как отправить сообщение об ошибке?
- 1.14) Как сравнивать PostgreSQL с другими + 1.11) Как присоединится к команде разработчиков?
+ 1.12) Как сравнивать PostgreSQL с другими СУБД?
- 1.15) Как оказать финансовую помощь PostgreSQL?
- +

Вопросы пользователей по клиентской части

- 2.1) Существуют ли ODBC драйвера для - PostgreSQL?
+ 2.1) Какие интерфейсы есть для PostgreSQL?
2.2) Какие инструменты существуют для использования PostgreSQL через Web?
2.3) Есть ли у PostgreSQL графический интерфейс пользователя?
- 2.4) Какие языки могут взаимодействовать с - PostgreSQL?

Вопросы администрирования

3.1) Как мне установить PostgreSQL в место отличное от /usr/local/pgsql?
- 3.2) Когда я запускаю postmaster, я получаю - сообщение Bad System Call или сообщение core dumped. Почему?
- 3.3) Когда я пытаюсь запустить postmaster, я - получаю ошибки IpcMemoryCreate. Почему?
- 3.4) Когда я пытаюсь запустить postmaster, я - получаю ошибки IpcSemaphoreCreate. Почему?
- 3.5) Как мне управлять соединениями с других + 3.2) Как мне управлять соединениями с других компьютеров?
- 3.6) Какие настройки мне нужно сделать для улучшения + 3.3) Какие настройки мне нужно сделать для улучшения производительности?
- 3.7) Какие возможности для отладки есть в наличии?
- 3.8) Почему я получаю сообщение "Sorry, too many + 3.4) Какие возможности для отладки есть в наличии?
+ 3.5) Почему я получаю сообщение "Sorry, too many clients" когда пытаюсь подключиться к базе?
- 3.9) Что находится в каталоге pgsql_tmp?
- 3.10) Почему необходимо делать dump и restore при + 3.6) Почему необходимо делать dump и restore при обновлении выпусков PostgreSQL?
- 3.11) Какое компьютерное "железо" я должен + 3.7) Какое компьютерное "железо" я должен использовать?

Вопросы эксплуатации

- 4.1) В чем отличие между бинарным и нормальным - курсором?
- 4.2) Как выполнить SELECT только + 4.1) Как выполнить SELECT только для нескольких первых строчек запроса? Для произвольной строки?
- 4.3) Как получить список таблиц или других - компонентов в psql?
- 4.4) Как удалить колонку из таблицы или изменить - её тип данных?
- 4.5) Каковы максимальные размеры для записей, - таблиц и базы данных?
- 4.6) Как много дискового пространства в базе данных + 4.2) Как мне найти какие таблицы, индексы, + базы данных и пользователи существуют? Как мне увидеть запросы, + которые использует psql для получения этой информации?
+ 4.3) Как изменить тип данных колонки?
+ 4.4) Каковы максимальные размеры для строк в таблице, + таблиц и базы данных?
+ 4.5) Как много дискового пространства в базе данных нужно для сохранения данных из обычного текстового файла?
- 4.7) Как мне убедиться, что существуют нужные мне - таблицы, индексы, базы данных и пользователи?
- 4.8) У меня медленно работают запросы или не - происходит использования индексов. Почему?
- 4.9) Как посмотреть на то, как оптимизатор выполняет + 4.6) Почему мои запросы работают медлено? Почему + они не используют мои индексы?
+ 4.7) Как посмотреть на то, как оптимизатор выполняет мой запрос?
- 4.10) Что такое R-tree индекс?
- 4.11) Что такое Genetic Query Optimizer?
- 4.12) Как мне выполнить поиск регулярного выражения + 4.8) Как мне выполнить поиск регулярного выражения и поиск независимый от регистра букв поиск регулярного выражения? Как мне использовать индекс для поиска независимого от регистра букв?
- 4.13) Как я могу определить, что значение поля равно + 4.9) Как я могу определить, что значение поля равно NULL в каком-либо запросе?
- 4.14) Каковы отличия между разными символьными + 4.10) Каковы отличия между разными символьными типами?
- 4.15.1) Как мне создать поле serial/с-авто-увеличением?
- 4.15.2) Как мне получить значение при вставке + 4.11.1) Как мне создать поле serial/с-авто-увеличением?
+ 4.11.2) Как мне получить значение при вставке SERIAL?
- 4.15.3) Не может ли получиться так, что + 4.11.3) Не может ли получиться так, что использование currval() и nextval() приведет к зациклированию с другими пользователями?
- 4.15.4) Почему числа из моей последовательности + 4.11.4) Почему числа из моей последовательности не используются снова при отмене транзакции? Почему создаются разрывы при нумерации в колонке, где я использую последовательность/SERIAL?
- 4.16) Что такое OID? Что такое + 4.12) Что такое OID? Что такое TID?
- 4.17) Что означают некоторые термины используемые в - PostgreSQL?
- 4.18) Почему я получаю ошибку "ERROR: Memory + 4.13) Почему я получаю ошибку "ERROR: Memory exhausted in AllocSetAlloc()"?
- 4.19) Как мне узнать, какая версия PostgreSQL + 4.14) Как мне узнать, какая версия PostgreSQL запущена?
- 4.20) Почему при работе с моим большим объектом + 4.15) Почему при работе с моим большим объектом я получаю ошибку "invalid large obj descriptor"?
- 4.21) Как мне создать колонку которая по умолчанию + 4.16) Как мне создать колонку которая по умолчанию будет содержать текущее время?
- 4.22) Почему мои подзапросы, использующие - IN так медленно работаеют?
- 4.23) Как выполнить внешнее связывание?
- 4.24) Как выполнять запросы, использующие несколько + 4.17) Как выполнить внешнее связывание?
+ 4.18) Как выполнять запросы, использующие несколько баз данных?
- 4.25) Как мне вернуть из функции несколько записей?
- 4.26) Почему я не могу надежно создавать/удалять + 4.19) Как мне вернуть из функции несколько строк таблицы?
+ 4.20) Почему я не могу надежно создавать/удалять временные таблицы в функциях PL/PgSQL?
- 4.27) Какие опции шифрования существуют?
+ 4.21) Какие опции шифрования существуют?

Расширения PostgreSQL

5.1) Я написал функцию определяемую пользователем. @@ -147,7 +124,7 @@ 5.2) Как я могу внести некоторые классные новые типы и функции в PostgreSQL?
5.3) Как мне написать C функцию, возвращающую - запись?
+ строку таблицы?
5.4) Я изменил исходный файл. Почему после перекомпиляции я не вижу изменений?
@@ -157,50 +134,35 @@

1.1) Что такое PostgreSQL? Как произносится это название?

-

PostgreSQL произносится Post-Gres-Q-L (Пост-Грес-Кью-Эл). - По адресу http://www.postgresql.org/postgresql.mp3 доступен звуковой - файл с примером как это нужно произносить.

- -

PostgreSQL - это расширение СУБД POSTGRES (и поэтому иногда - говорят просто "Postgres"), исследовательский - прототип нового поколения СУБД. - PostgreSQL одновременно сохраняет мощную модель данных и общирное - количество типов POSTGRES, и замещает язык запросов PostQuel на - расширенное подмножество SQL. PostgreSQL - это - свободное и полностью открытое программное обеспечение.

- -

Разработку PostgreSQL выполняет команда разработчиков, все участники - которой подписаны на список рассылки разработчиков. В настоящее время, - их координатором является Марк Фурнье (Marc G. Fournier) (scrappy@PostgreSQL.org). (См. - секцию 1.6 о том, как подключиться к разработке). - Эта команда теперь отвечает за всю разработку PostgreSQL. Данный - проект является общественным и не управляется какой-либо компанией. - Подробности смотрите в FAQ для разработчиков, - http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html -

+

PostgreSQL произносится Post-Gres-Q-L (Пост-Грес-Кью-Эл), + также часто говорят просто Postgres.

-

Авторами PostgreSQL 1.01 являются Эндрю Ю (Andrew Yu) и Джоли Чен - (Jolly Chen). Многие другие внесли свой вклад в перенос на другие - платформы, тестирование, отладку и расширение этого кода. Первоначальный - код Postgres, из которого появился PostgreSQL, был итогом усилий многих - академических студентов, неакадемических студентов и множества - разных программистов, работавших под руководством профессора - Майкла Стоунбрейкера (Michael Stonebraker) в Калифорнийском университете, - Беркли.

+

PostgreSQL - это объектно-реляционная система управления базами + данных (СУБД), которая имеет традиционные возможности коммерческих + СУБД с расширениями, которые есть в СУБД + нового поколения. PostgreSQL - это свободное и полностью открытое + программное обеспечение.

-

Первоначальное имя, данное в Беркли, было Postgres. Когда - в 1995 году была добавлена функциональность SQL, - это имя было изменено на Postgres95. Но и это имя было изменено - в конце 1996 на PostgreSQL.

+

Разработку PostgreSQL выполняет команда разработчиков, разбросанная + по всему миру и связанная через Интернет. Разработка является + общественным проектом и не управляется какой-либо компанией. + Подробности смотрите в FAQ для разработчиков, + + http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html +

1.2) Каковы авторские права на PostgreSQL?

-

PostgreSQL попадает под действие следующего COPYRIGHT:

+

PostgreSQL распространяется по классической лицензии BSD. Эта + лицензия не содержит ограничений на то, как будет использоваться + исходный код. Нам нравится эта лицензия и у нас нет намерений её + менять.

+ +

Вот эта лицензия BSD, которую мы используем:

Система Управления Базами Данных PostgreSQL

-

Portions copyright (c) 1996-2004, PostgreSQL Global Development +

Portions copyright (c) 1996-2005, PostgreSQL Global Development Group Portions Copyright (c) 1994-6 Regents of the University of California

@@ -225,21 +187,13 @@ "КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.

-

Вышеизложенное является BSD лицензией, классической лицензией - программного обеспечения с открытым кодом. Эта лицензия не накладывает - ограничений на использование исходного кода. Нам нравится эта лицензия - и мы не собираемся её менять.

- -

1.3) На каких Unix платформах работает PostgreSQL?

+

1.3) На каких платформах работает PostgreSQL?

Обычно, PostgreSQL может работать на любой современной платформе совместимой с Unix. В инструкции по установке, вы найдете список тех платформ, на которых были проведены тестовые запуски PostgreSQL к моменту выхода данной версии.

-

1.4) Существуют ли версии перенесенные не на Unix - системы?

-

Начиная с версии 8.0, PostgreSQL без всяких ухищрений работает на операционных системах Microsoft Windows, основанных на NT, таких как Win2000, WinXP и Win2003. Пакет инсталлятора доступен по адресу @@ -249,69 +203,30 @@ PostgreSQL с помощью Cygwin.

Также существует версия спортированная под Novell Netware 6 на - http://forge.novell.com.

+ http://forge.novell.com, + и версия для OS/2 (eComStation) на + + http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F.

-

1.5) Где можно взять PostgreSQL?

+

1.4) Где можно взять PostgreSQL?

Например, воспользовавшись анонимным доступом на ftp сайт PostgreSQL ftp://ftp.PostgreSQL.org/pub. Список зеркал вы найдете на нашем основном сайте.

-

1.6) Где получить поддержку?

+

1.5) Где получить поддержку?

-

Основной список рассылки: pgsql-general@PostgreSQL.org. - В нем можно обсуждать любые темы, касающиеся PostgreSQL. Чтобы - подписаться, отправьте письмо по электронной почте, в котором в - теле письма (не в теме) напишите следующие строки:

-
-    subscribe
-    end
-
- -

на адрес pgsql-general-request@PostgreSQL.org.

- -

Существует дайжест список. Чтобы подписаться на него, отправьте - письмо по электронной почте на адрес: pgsql-general-digest-request@PostgreSQL.org - и в теле письма напишите строчки строчки:

-
-    subscribe
-    end
-
- Дайжесты отправляются подписчикам, когда в основном списке рассылки - накопится около 30 килобайт сообщений. - -

Доступен и список рассылки сообщений об ошибках. Чтобы подписаться на этот - список, отправьте по электронной почте письмо на адрес pgsql-bugs-request@PostgreSQL.org - и в теле письма напишите строчки строчки:

-
-    subscribe
-    end
-
- Также имеется список рассылки с дискуссиями разработчиков. Чтобы подписаться - на этот список, отправьте по электронной почте письмо на адрес - pgsql-hackers-request@PostgreSQL.org - и в теле письма напишите строчки строчки: -
-    subscribe
-    end
-
- -

Дополнительные списки рассылки и инфомацию о PostgreSQL можно найти - на домашней страничке PostgreSQL по адресу:

- -
- http://www.PostgreSQL.org -
+

Сообщество PostgreSQL предоставляет помощь множеству пользователей + через E-mail. Основной web-сайт для подписки на списки рассылки по + E-mail это: + http://www.postgresql.org/community/lists/. Хорошим местом для + того, чтобы начать задавать вопросы являются списки general + (общие вопросы) или bugs (ошибки).

Главным IRC каналом является #postgreql, расположенный на сервере Freenode (irc.freenode.net). Чтобы - подключиться, вы можете использовать команду Unix + подключиться, вы можете использовать в Unix вызов программы irc -c '#postgresql' "$USER" irc.freenode.net или любой другой IRC клиент. На этом же сервере существуют каналы на испанском (#postgresql-es) и французском (#postgresqlfr) @@ -320,19 +235,32 @@

Список коммерческой поддержки компаний доступен на http://techdocs.postgresql.org/companies.php.

+ +

1.6) Как мне сообщить об ошибке?

+ +

Посетите страничку со специальной формой отчёта об ошибке в + PostgreSQL по адресу: + + http://www.postgresql.org/support/submitbug.

+ +

Также проверьте наличие более свежей версии PostgreSQL на нашем + FTP сайте + ftp://ftp.PostgreSQL.org/pub. + +

1.7) Какая последняя версия?

-

Последний выпуск PostgreSQL - это версия 7.4.6

+

Последний выпуск PostgreSQL - это версия 8.0.1

-

Мы планируем выпускать новые версии каждые 6-8 месяцев.

+

Мы планируем выпускать новые версии каждые 10-12 месяцев.

1.8) Какая документация имеется в наличии?

-

В дистрибутив включаются различные руководства, страницы - электронного руководства man и некоторые маленькие тестовые примеры. - Смотрите в каталог /doc. Вы также можете просматривать - документацию в Интернет по адресу - http://www.PostgreSQL.org/docs.

+

PostgreSQL содержит много документации, включая большое руководство, + страницы электронного руководства man и некоторые маленькие тестовые + примеры. Смотрите в каталог /doc. Вы также можете просматривать + документацию в Интернет по адресу + http://www.PostgreSQL.org/docs.

Существует две книги по PostgreSQL доступные по адресам http://www.PostgreSQL.org/docs/awbook.html @@ -342,9 +270,9 @@ Кроме того, по адресу http://techdocs.PostgreSQL.org/ вы можете найти коллекцию технических статей посвященных PostgreSQL.

- -

psql имеет несколько прекрасных команд \d для отображения - информации по типам, операторам, функциям, агрегатам и т.д.

+

Клиент командной строки psql имеет несколько команд \d для + отображения информации по типам, операторам, функциям, агрегатам и т.д. - + используйте \? для получения списка доступных команд.

Наш сайт содержит еще больше информации.

@@ -381,15 +309,11 @@ Bowman, Judith S., et al., Addison-Wesley. Другим нравится The Complete Reference SQL, Groff et al., McGraw-Hill.

-

1.11) Решена ли в PostgreSQL проблема 2000-го года (Y2K)?

- -

Да, мы легко работаем с датами после 2000 года и перед 2000 годом.

- -

1.12) Как присоединится к команде разработчиков?

+

1.11) Как присоединится к команде разработчиков?

Для начала, скачайте последнюю версию исходных текстов и прочтите - документацию разработчиков PostgreSQL на нашем сайте или в дистрибутиве. - Затем, подпишитесь на списки рассылки pgsql-hackers и + FAQ и документацию для разработчиков PostgreSQL на нашем сайте или в + дистрибутиве. Затем, подпишитесь на списки рассылки pgsql-hackers и pgsql-patches. Далее, отправляйте исправления (patches) высокого качества в список pgsql-patches.

@@ -400,16 +324,7 @@ превилегии вносить изменения, и мы уверены, что те исправления, которые они внесут будут высокого качества.

-

1.13) Как отправить сообщение об ошибке??

- -

Заполните форму об ошибке в PostgreSQL, которая расположена на - http://www.postgresql.org/bugform.html.

- -

Также не забудьте посмотреть на ftp://ftp.PostgreSQL.org/pub - на предмет более свежих версий PostgreSQL или заплат.

- -

1.14) Как сравнивать PostgreSQL с другими +

1.12) Как сравнивать PostgreSQL с другими СУБД?

@@ -431,24 +346,16 @@

Производительность
-
PostgreSQL имеет производительность сходную с другими коммерческими - СУБД и с СУБД с открытым исходным кодом, в каких-то аспектах работая - быстрее чем они, в каких-то медленее. В сравнении с MySQL или обыденнее - СУБД, мы быстрее, когда пользователей много, а также на комплексных - запросах и чтении/записи загрузки запроса. MySQL быстрее для простых +
Производительность PostgreSQL сходна с другими коммерческими + СУБД и с СУБД с открытым исходным кодом. В каких-то вещах мы быстрее, + в каких-то медленнее. В сравнении с MySQL или линейной + СУБД, мы быстрее, когда пользователей много, а также на сложных + запросах и при чтении/записи загрузки запроса. MySQL быстрее для простых SELECT запросов, выполняемых небольшим количеством пользователей. И разумеется, MySQL не имеет каких-либо возможностей из перечисленых выше, в секции Возможности. Мы делаем упор на надежность и расширенные возможности, но мы также - продолжаем увеличивать производительность с каждым выпуском. Существует - интересная страничка в Интернет, сравнивающая PostgreSQL и MySQL на - - http://openacs.org/philosophy/why-not-mysql.html. Также, MySQL - - это компания, которая распространяет свой продукт через открытые - исходные тексты и требует коммерческую лицензию на закрытое - программное обеспечение, а не сообщество разработчиков с открытыми - исходными текстами, как PostgreSQL.
- + продолжаем увеличивать производительность с каждым выпуском.

@@ -475,7 +382,7 @@ пользователей, руководствам и исходным текстам часто делают поддержку PostgreSQL превосходящей другие СУБД. Существует коммерческая поддержка по результам возникших инцидентов, которая - доступна для тех кому она нужна. (Смотрите Секцию 1.6.)
+ доступна для тех кому она нужна. (Смотрите Секцию 1.5.)

@@ -489,57 +396,23 @@ -

1.15) Как оказать финансовую помощь - PostgreSQL?

- -

PostgreSQL имеет одноранговую инфраструктуру с того самого времени - как мы начали разработку в 1996 году. Мы должны благодарить за - это Марка Фурнье (Marc Fournier), который создал эту инфраструктуру и - управляет ей на протяжении этих лет.

- -

Качественная инфраструктура очень важна для проектов с открытым - исходным кодом. Она предотвращает расколы, которые могут сильно - задержать поступательное движение проекта.

- -

Разумеется, эта инфраструктура не является дешевой. Существует - некоторое количество ежемесячных и одноразовых расходов, которые - требуют денег. Если вы или ваша компания имеет деньги, которые - можно передать в помощь нашим усилиям, пожалуйста посетите страничку - - https://store.pgsql.com/shopping/ - и сделайте свой вклад.

- -

Хотя на страничке говорится о PostgreSQL, Inc, пункт - "contributions" предназначен исключительно для поддержки проекта - PostgreSQL и не передается какой-либо конкретной компании. - Если хотите, то можете это проверить, написав письмо на контактный адрес.

-
-

Если у вас есть истории по успешному применению PostgreSQL, пожалуйста, - присылайте их на наш сайт пропаганды - http://advocacy.postgresql.org.

Вопросы пользователей по клиентской части

-

2.1) Существуют ли ODBC драйвера - для PostgreSQL?

- -

Существует два ODBC драйвера, PsqlODBC - и OpenLink ODBC.

+

2.1) Какие интерфейсы есть для PostgreSQL?

-

Вы можете скачать PsqlODBC с - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.

- -

OpenLink ODBC можно взять на http://www.openlinksw.com. Этот - драйвер работает с их стандартным клиентским программным обеспечением, - использующим ODBC, и таким образом, ODBC - драйверы для PostgreSQL доступны для каждой из поддерживаемых ими - платформ (Win, Mac, Unix, VMS).

+

Установка PostgreSQL включает только C и встроенный + (embedded) C интерфейсы. Все другие интерфейсы + являются независимыми проектами и загружаются отдельно; самостоятельность + проектов позволяет им организовать собственное расписание выпусков + новых версий и иметь собственную команду разработчиков.

+ +

Некоторые языки программирования, такие как PHP + включают в себя интерфейс к PostgreSQL. Интерфейсы для таких языков + как Perl, TCL, Python и многих других, доступны на + http://gborg.postgresql.org + в секции Drivers/Interfaces, а также через поиск в Интернет.

-

Возможно они будут продавать свой продукт тем кому нужна коммерческая - поддержка, но бесплатная версия всегда будет доступна. Пожалуйста, - направляйте вопросы на адрес postgres95@openlink.co.uk.

2.2) Какие инструменты существуют для использования PostgreSQL через Web?

@@ -547,49 +420,25 @@

Прекрасное введение во взаимодействие баз данных и Web можно найти на: http://www.webreview.com

-

Для интеграции с Web, одним из превосходных инструментов является PHP. - Домашняя станичка http://www.php.net.

+

Для интеграции с Web, PHP + http://www.php.net является неплохим интерфейсом.

-

Для комплексных решений, многие пользуются Perl интерфейсом и CGI.pm или mod_perl.

+

В сложных случаях, многие пользуются Perl и CGI.pm или mod_perl.

2.3) Есть ли у PostgreSQL графический интерфейс пользователя?

Да, существует несколько графических интерфейсов для PostgreSQL. - Это PgAccess (http://www.pgaccess.org), - PgAdmin III (http://www.pgadmin.org), + Они включают PgAdmin III (http://www.pgadmin.org), + PgAccess (http://www.pgaccess.org), RHDB Admin (http://sources.redhat.com/rhdb/), - TORA (http://www.globecom.net/tora/ - (частично коммерческое ПО) - и Rekall ( - http://www.thekompany.com/products/rekall/, коммерческий). Также есть + TORA (http://www.globecom.net/tora/ + частично коммерческое ПО) + и Rekall ( + http://www.rekallrevealed.org/). Также есть PhpPgAdmin ( - http://phppgadmin.sourceforge.net/) - интерфейс к PostgreSQL, основанный - на Web.

- -

2.4) Какие языки могут взаимодействовать с PostgreSQL?

- -

Какие-либо интерфейсы для PostgreSQL существуют для большинства - популярных языков программирования. Посмотрите список модулей расширения - для тех языков программирования, которыми вы пользуетесь.

- -

Следующие интерфейсы включаются в дистрибутив PostgreSQL:

- -

Дополнительные интерфейсы доступны по адресу - http://gborg.PostgreSQL.org - в секции Drivers/Interfaces. -

+ http://phppgadmin.sourceforge.net/) - интерфейс к PostgreSQL, + основанный на Web.


Вопросы администрирования

@@ -599,144 +448,100 @@

Задайте опцию --prefix когда запускаете configure.

-

3.2) Когда я запускаю postmaster, я получаю - сообщение Bad System Call или сообщение core dumped. Почему?

- -

Это может быть вызвано разными проблемами, но первое, что - нужно сделать - это убедиться в том, что в вашем ядре установлено - расширение System V. PostgreSQL требует, чтобы ядро поддерживало - разделяемую память и семафоры.

- -

3.3) Когда я пытаюсь запустить postmaster, я - получаю ошибки IpcMemoryCreate. Почему?

- -

Либо у вас в ядре неправильные настройки разделяемой памяти, либо - вашему ядру нужно большее количество доступной разделяемой памяти. - Те конкретные действия, которые вам нужно произвести зависят от - архитектуры вашей машины и от того как много буферов и backend - процессов вы настроили для postmaster. Для большинства систем, - с количеством буферов и процессов по умолчанию, необходимый минимум - - это около 1 мегабайта. Подробности о разделяемой памяти и семафорах - смотрите в Руководстве - администратора PostgreSQL..

- -

3.4) Когда я пытаюсь запустить postmaster, я - получаю ошибки IpcSemaphoreCreate. Почему?

- -

Если это сообщение IpcSemaphoreCreate: semget failed (No - space left on device) то настройки вашего ядра таковы, что ему не - хватает семафоров. Postgres требует один семафор на потенциальный - backend процесс. Временным решением является запуск postmaster - с настройками на мешьшее количество backend процессов. Используйте - -N с значением меньшим чем 32, которое принято по умолчанию. - Более правильное решение - это увеличить значения SEMMNS - и SEMMNI в настрйках ядра.

- -

Неисправные семафоры также могут привести к падению СУБД во время - доступа к базе данных.

- -

Если вы получили какое-либо другое сообщение об ошибке, то вполне - возможно, что в вашем ядре вообще не настроена поддержка семафоров. - Смотрите подробности о разделяемой памяти и семафорах в Руководстве - Администратора PostgreSQL.

- -

3.5) Как мне управлять соединениями с других +

3.2) Как мне управлять соединениями с других компьютеров?

По умолчанию, PostgreSQL разрешает только соединения на локальной - машине через сокеты домена Unix или TCP/IP соединения. Другие машины - не смогут подключиться к базе пока вы не измените listen_addresses в - postgresql.conf и пока не будет разрешена host-авторизация в файле - $PGDATA/pg_hba.conf.

+ машине через сокеты домена Unix или TCP/IP соединения. Для того, чтобы + другие машины смогли подключиться к базе вы должны изменить + listen_addresses в postgresql.conf, разрешить + host-авторизация в файле $PGDATA/pg_hba.conf и перестартовать + сервер.

-

3.6) Какие настройки мне нужно сделать для улучшения +

3.3) Какие настройки мне нужно сделать для улучшения производительности?

-

Несомненно, индексы могут увеличить скорость выполнения запросов. Команда - EXPLAIN ANALYZE позволяет вам посмотреть как PostgreSQL - интерпретирует ваш запрос и какие индексы используются.

- -

Если вы выполняете много операторов INSERT, - рассмотрите возможность выполнять их в большой пачке, используя - команду COPY. Это значительно быстрее, чем отдельные - INSERT. Во-вторых, операторы вне блока транзакции - BEGIN WORK/COMMIT сами выполняют транзакцию. Подумайте - над выполнением нескольких операторов в одном блоке транзакции. - Это уменьшит количество транзакций. Также, задумайтесь над удалением - и пересозданием индексов, когда вы выполняете большие изменения - данных.

- -

Существует несколько опций настройки в - - Руководстве Администратора PostgreSQL. Вы можете запретить - fsync() при старте postmaster с опцией -o -F. - Это предотвратит вызовы fsync(), которые приводят к сбросу - данных на диск после каждой транзакции.

- -

Вы можете также использовать опцию shared_buffers -B - для увеличения количества буферов разделяемой памяти, которая - используется backend процессами. Если вы сделаете значение этого параметра - слишком большим, то postmaster может не запустится потому что - вы исчерпаете ограничение ядра на объем разделяемой памяти. Каждый - буфер имеет размер в 8 килобайт и по умолчанию выделяется 1000 буферов.

- -

Вы можете также использовать backend опции sort_mem и - work_mem для увеличения максимального количества памяти, которое - используется backend процессом для временных сортировок. Значение по - умолчанию составляет 1024 (т.е. 1MB).

- -

Вы также можете использовать команду CLUSTER для - группировки данных в таблицах на совпадающий индекс. Подробности смотрите - на странице руководства по команде CLUSTER.

- -

3.7) Какие возможности для отладки есть в - наличии?

- -

PostgreSQL имеет несколько возможностей, позволяющие получить - информацию о состоянии, которая может быть использована в отладочных - целях.

+

Существует три главных области, которые потенциально могут + увеличить производительность:

+ +
+
Изменение запроса
+
Это означает модификацию запросов для получения лучшей + производительности: +
    +
  • Создание индексов, включая индексы выражений и частичные индексы
  • +
  • Использование COPY вместо множества INSERT
  • +
  • Группировка нескольких операторов в единую транзакцию для + уменьшения нагрузки при выполнении завершения транзакции
  • +
  • Использование CLUSTER, когда из индекса берётся + множество строк
  • +
  • Использование LIMIT для того, чтобы возвращалась + только часть вывода от запроса
  • +
  • Использование Подготовленных (Prepared) запросов
  • +
  • Использование ANALYZE для обслуживания статистики + оптимизатора
  • +
  • Регулярное использование VACUUM или pg_autovacuum
  • +
  • Удаление индексов во время больших изменений данных
  • +
+

+
-

Во-первых, при запуске configure с опцией --enable-cassert, - многие вызовы assert() позволяют отслеживать работу backend - процесса и остановку программы при возникновении каких-либо - неожиданностей.

+
Настройка сервера
+ +
Некоторые установки в postgresql.conf влияют на + производительность. Подробный полный список установок см. в + + Administration Guide/Server Run-time Environment/Run-time Configuration, + а комментарии см. в + http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html + и + http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. +

+
+ +
Выбор "железа" - аппаратного обеспечения
+ +
Влияние "железа" на производительность подробно описано в + + http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html и + + http://www.powerpostgresql.com/PerfList/. +

+
+
-

И postmaster, и postgres имеют несколько отладочных - опций. Во-первых, при запуске postmaster, убедитесь, что - стандартный вывод и вывод ошибок осуществляются в файл журнала:

-
-    cd /usr/local/pgsql
-    ./bin/postmaster >server.log 2>&1 &
-
+

3.4) Какие возможности для отладки есть в + наличии?

-

Это приведет к появлению файла server.log в главном каталоге - PostgreSQL. Этот файл содержит полезную информацию о проблемах или - ошибках, возникших на сервере. Postmaster имеет опцию -d, - которая позволяет получать при протоколировании более детальную - инфрмацию. Для опции -d указывается число, которое задает уровень - отладки. Будьте осторожны, так как высокий уровень отладки приводит - к генерации файлов журнала большого размера.

+

Есть множество установок в настройках сервера, начинающихся + на log_*, позволяющих протоколировать запросы + и статистику работы процесса, которая очень полезна для отладки + и измерения производительности.

+ +

Для предоставления более детальной информации разработчикам + сервера при отладке какой-либо проблемы должны пользоваться + следующие инструкции.

+ +

Таким же образом можно производить и отладку севера, если он + работает неправильно. Во-первых, при запуске configure с + опцией --enable-cassert, многие вызовы assert() позволяют + отслеживать работу backend процесса и остановку программы при + возникновении каких-либо неожиданностей.

Если postmaster не запущен, вы можете запустить postgres backend из командной строки и ввести ваш оператор SQL напрямую. Это рекомендуется только для целей отладки. Заметим, что в этом режиме, запрос завершается символом новой строки, а не точкой с запятой. Если вы производили компиляцию - с отладочными символоами, вы можете использовать любой отладчик, чтобы + с отладочными символами, вы можете использовать любой отладчик, чтобы посмотреть, что случилось. Поскольку backend запускается не из postmaster, он не запускается в идентичном окружении и значит проблемы итераций блокировок/backend не могут быть воспроизведены.

Если postmaster запущен, запустите psql в одном окне, затем найдите PID процесса postgres, - используемый psql, используя

- -
-	SELECT pg_backend_pid()
-    
- -

Используйте отдадчик для подключения к postgres PID. + используемый psql, используя SELECT pg_backend_pid(). + Используйте отладчик для подключения к postgres PID. Вы можете установить точки прерывания в отладчике и запустить запрос из psql. Если вы производите отладку запуска postgres, вы можете установить @@ -745,10 +550,6 @@ вы можете подключить к процессу отладчик, установить любые точки прерывания и продолжить запуск.

-

Программа postgres имеет опции -s, -A, и -t - которые могут быть очень полезными для отладки и измерения - производительности.

-

Вы также можете скомпилировать PostgreSQL с профилированием для того, чтобы увидеть какие функции сколько времени выполняются. Файлы профилирования backend'а находятся в каталоге @@ -756,51 +557,23 @@ будет помещен в текущий каталог клиента. В Linux для выполнения профилирования требуется компиляции с -DLINUX_PROFILE.

-

3.8) Почему я получаю сообщение "Sorry, too +

3.5) Почему я получаю сообщение "Sorry, too many clients" когда пытаюсь подключиться к базе?

-

Вам нужно увеличить ограничение на количество конкуретных - backend процессов при запуске postmaster.

- -

По умолчанию установлен лимит на 32 процесса. Вы можете - увеличить этот лимит перезапустив postmaster с нужным - значением процессов, которое указывается в опции -N или - изменив файл postgresql.conf.

- -

Заметим, что если вы зададите в опции -N значение больше - 32, то вы также должны увеличить значение в опции -B которое - по умолчанию установлено в 64; Значение опции -B должно быть - по крайней мере вдвое больше значения опции -N, и возможно - ещё больше для лучшей производительности. Для большего количества - backend процессов, вам также неплохо было бы увеличить некоторые - параметры ядра Unix. Это такие параметры, как максимальное количество - блоков разделяемой памяти, SHMMAX; максимальное количество - семафоров, SEMMNS и SEMMNI; максимальное - количество процессов, NPROC; максимальное количество - процессов на пользователя, MAXUPRC; и максимальное - количество открытых файлов, NFILE и NINODE. - Причина создания ограничения на количество backend процессов как - раз и состоит в том, чтобы вашей системе хватило ресурсов.

- -

3.9) Что находится в каталоге pgsql_tmp?

- -

Данный каталог содержит временные файлы, генерируемые обработчиком - запроса. Например, если для выполнения ORDER BY нужна - сортировка и эта сортировка требует памяти больше, чем допускает параметр -S - у backend'а, то для хранения дополнительных данных создаются временные - файлы.

- -

Эти временные файлы должны удаляться автоматически, но этого может не - произойти, если backend рухнул во время сортировки. Останов и запуск - серверного процесса обеспечит их удаление из каталога.

+

Вы достигли установленного по умолчанию ограничения на 100 сессий + подключения к базе данных. Вам необходимо увеличить для + postmaster лимит на количество конкурентных backend процессов, + изменив значение max_connections в файле postgresql.conf + и перестартовать postmaster.

+ -

3.10) Почему необходимо делать dump и restore при +

3.6) Почему необходимо делать dump и restore при обновлении выпусков PostgreSQL?

Разработчики PostgreSQL делают только небольшие изменения между - подвыпусками. Таким образом обновление с версии 7.2 до 7.2.1 не требует + подвыпусками. Таким образом обновление с версии 7.4 до 7.4.1 не требует выполнения dump и restore. Однако при выходе очередного выпуска - (т.е. при обновлении например, с 7.2 на 7.3) часто меняется внутренний + (т.е. при обновлении например, с 7.3 на 7.4) часто меняется внутренний формат системных таблиц и файлов данных. Эти изменения часто носят комплексный характер, так что нет возможности обеспечить обратную совместимость файлов данных. Выполение dump позволяет получить данные @@ -812,7 +585,7 @@ использования dump/restore. Комментарии к выпуску говорит когда можно использовать pg_upgrade для этого выпуска.

-

3.11) Какое компьютерное "железо" я должен +

3.7) Какое компьютерное "железо" я должен использовать?

Поскольку "железо" персональных компьютеров является наиболее совместимым, люди склонны верить, что такое "железо" имеет одинаковое @@ -827,24 +600,15 @@

Вопросы эксплуатации

-

4.1) В чем отличие между бинарным и нормальным - курсором?

- -

Смотрите описание на страницах руководства посвященным - DECLARE.

- -

4.2) Как выполнить SELECT только +

4.1) Как выполнить SELECT только для нескольких первых строчек запроса? Произвольной строки?

-

Смотрите станицу руководства посвященную FETCH - или используйте SELECT ... LIMIT....

- -

Даже если вы хотите получить только первые несколько записей, - будет выполнен весь запрос. Рассмотрим запрос, который имеет - ORDER BY. Если есть какой-либо индекс, который - совпадает с ORDER BY, PostgreSQL может - выдать только несколько первых запрошенных записей или может - выполнять запрос пока не будут выданы желаемые записи.

+

Для получения только нескольких строк, если вы знаете их количество + на момент выполнения SELECT используйте LIMIT.

+ Если есть какой-либо индекс, который совпадает с ORDER BY, + то возможно, что весь запрос выполнен и не будет. Если вы не знаете + количества необходимых строк на момент выполнения SELECT, + используйте курсор и FETCH.

To SELECT a random row, use:

    SELECT col
@@ -854,8 +618,9 @@
 

-

4.3) Как получить список таблиц или других - компонентов в psql?

+

4.2) Как мне найти какие таблицы, индексы, + базы данных и пользователи существуют? Как мне увидеть запросы, + которые использует psql для получения этой информации?

Чтобы просматривать таблицы в psql, используйте команду \dt. Полный список команд в psql вы можете получить, используя \?. @@ -865,28 +630,25 @@ начинающихся с обратной косой черты. Вы также можете запустить psql с опцией -E так, чтобы эта программа выдавала запросы, которые она использует для выполнения заданных вами - команд. PostgreSQL также предоставляет SQLi + команд. PostgreSQL также предоставляет SQL совместимый с INFORMATION SCHEMA интерфейс, с помощью которого, вы можете сформировать запрос на получение информации о базе данных.

+ +

Также существуют системные таблицы, начинающиеся с pg_.

+ +

Используйте psql -l для получения списка всех баз данных.

-

4.4) Как удалить колонку из таблицы или - изменить её тип данных?

+

Также посмотрите файл pgsql/src/tutorial/syscat.source. + Он показывает многие из операторов SELECT необходимых + для получения информации из системных таблиц базы данных.

-

DROP COLUMN функциональность была добавлена в выпуск - 7.3 с оператором ALTER TABLE DROP COLUMN. В ранних версиях, - можно сделать так:

-
-    BEGIN;
-    LOCK TABLE old_table;
-    SELECT ...  -- выборка всех колонок за исключением той, которую хотите удалить
-    INTO TABLE new_table
-    FROM old_table;
-    DROP TABLE old_table;
-    ALTER TABLE new_table RENAME TO old_table;
-    COMMIT;
-
-

Для изменения типа данных колонки, сделайте так:

+

4.3) Как изменить тип данных колонки?

+ +

В 8.0 и более поздних версиях, изменение типа колонки выполняется + очень легко через ALTER TABLE ALTER COLUMN TYPE. + +

В более ранних версиях сделайте так:

     BEGIN;
     ALTER TABLE tab ADD COLUMN new_col new_data_type;
@@ -895,24 +657,49 @@
     COMMIT;
 
-

4.5) Каковы максимальные размеры для записей, +

4.4) Каковы максимальные размеры для строк в таблице, таблиц и базы данных?

Существуют следующие ограничения:

-
-    Максимальный размер базы?                    неограничен (существуют базы на 32 TB)
-    Максимальный размер таблицы?                 32 TB
-    Максимальный размер записи?                  1.6 TB
-    Максимальный размер поля?                    1 GB
-    Максимальное количество записей в таблице?   неограничено
-    Максимальное количество колонок в таблице?   250-1600 в зависимости от типа
-    Максимальное количество индексов в таблице?  неограничено
-
- - Разумеется, понятие "неограничено" на самом деле ограничивается +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Максимальный размер базы?неограничен (существуют базы на 32 TB)
Максимальный размер таблицы?32 TB
Максимальный размер строки?1.6 TB
Максимальный размер поля?1 GB
Максимальное количество строк в таблице?неограничено
Максимальное количество колонок в таблице?250-1600 в зависимости от типа
Максимальное количество индексов в таблице?неограничено
+
+
+

Разумеется, понятие "неограничено" на самом деле ограничивается доступным дисковым пространиством и размерами памяти/своппинга. Когда значения перечисленные выше неоправдано большие, может - пострадать производительность. + пострадать производительность.

Максимальный размер таблицы в 32 TB не требует чтобы операционная система поддерживала файлы больших размеров. Большие таблицы хранятся @@ -923,7 +710,7 @@ могут быть увеличены в четыре раза, если размер блока по умолчанию будет увеличен до 32k.

-

4.6) Как много дискового пространства в базе данных +

4.5) Как много дискового пространства в базе данных нужно для сохранения данных из обычного текстового файла?

СУБД PostgreSQL может потребоваться дискового пространства до 5 раз @@ -935,21 +722,21 @@ Размер базы PostgreSQL, содержащей эти же данные составит приблизительно 6.4 MB из которых:

-    32 байт: на каждый заголовок записи (приблизительно)
+    32 байт: на каждый заголовок строки в таблице (приблизительно)
   + 24 байта: одно поле с целочисленным типом и одно текстовое поле
-  +  4 байта: указатель на странице для всей записи
+  +  4 байта: указатель на странице для всей табличной строки
    ----------------------------------------
-    60 байт на запись
+    60 байт на строку в таблице
 
    Размер страницы данных в PostgreSQL составляет 8192 байт (8 KB), так что:
 
    8192 байт на страницу
-   ---------------------   =  136 записей на страницу БД (округлённо)
-     60 байт на запись
+   ---------------------   =  136 строк в таблице на страницу БД (округлённо)
+     60 байт на строку в таблице
 
      100000 строк данных
    ----------------------- =  735 страниц в БД (округлённо)
-   128 записей на страницу
+   128 строк в таблице на страницу
 
    735 страниц БД * 8192 байт на страницу = 6,021,120 байт (6 MB)
 
@@ -961,25 +748,12 @@ занимают очень мало места.

-

4.7) Как мне убедиться, что существуют нужные мне - таблицы, индексы, базы данных и пользователи?

- -

psql имеет несколько команд, начинающихся с обратной косой - черты, для того чтобы просматривать такую информацию. Используйте - \? для того, чтобы увидеть эти команды. Также существуют системные - таблицы, имя которых начинается на pg_ и в которых также содержится - эта информация. Ещё, psql -l покажет список всех баз данных.

- -

Также смотрите файл pgsql/src/tutorial/syscat.source. В нем - представлены многие операторы SELECT которые нужны - для получения информации из системных таблиц базы данных.

- -

4.8) У меня медленно работают запросы или не - происходит использования индексов. Почему?

+

4.6) Почему мои запросы работают медлено? Почему + они не используют мои индексы?

Индексы не используются для каждого запроса автоматически. Они используются только если таблица больше минимального размера и запрос - выбирает только маленький процент записей в таблице. Так устроено, + выбирает только маленький процент строк в таблице. Так устроено, потому что доступ к диску с применением рандомизации при сканировании индексов может быть медленнее, чем простое чтение таблицы или ее последовательное сканирование.

@@ -988,11 +762,11 @@ таблицы, PostgreSQL должен иметь статистику по этой таблице. Эта статистика собирается при использовании VACUUM ANALYZE или просто ANALYZE. Используя статистику, оптимизатор - узнает о том как много записей в таблице и если он должен использовать + узнает о том как много строк в таблице и если он должен использовать индексы, то он может принимать лучшие решения. Статистика также влияет на определение оптимального порядка связывания и метода связывания. - Сбор статистики должен периодически выполнятся при изменении содержимого - таблицы.

+ При изменении содержимого таблицы должен периодически выполнятся + сбор статистики.

Обычно индексы не используются для ORDER BY или для выполнения связываний. Последовательный перебор следующий за явной @@ -1024,67 +798,26 @@

  • Строка поиска не должна начинаться с символа класса, т.е. [a-e].
  • Поиск независимый от регистра, такой как ILIKE и - ~* не использует индексы. Вместо него, используйте функциональные - индексы, которые описываются в секции 4.12.
  • + ~* не использует индексы. Вместо него, используйте индексы + выражений, которые описываются в секции 4.8.
  • Во время initdb должна использоваться локаль по умолчанию - C, потому что не существует возможности узнать next-greater + C, потому что не существует возможности узнать следующий наибольший символ для не-C локали. Вы можете для таких случаев создать специальный - индекс -
    -	text_pattern_ops
    -    
    - который работает только для -
    -	LIKE
    -    
    - индексирования.
  • + индекс text_pattern_ops который работает только для + LIKE индексирования. -

    В выпусках до версии 8.0, индексы часто нельзя было использовать, если типы данных точно не совпадали с индексными типами колонок. Это особенно касалось int2, int8 и numeric индексов колонок.

    -

    4.9) Как посмотреть на то, как оптимизатор выполняет +

    4.7) Как посмотреть на то, как оптимизатор выполняет мой запрос?

    Смотрите страницу руководства посвященную EXPLAIN.

    -

    4.10) Что такое R-tree индекс?

    - -

    R-tree индекс используется для индексирования пространственных данных. - Индекс хэша не может управлять поисками диапазона. B-tree индекс - управляет только поисками диапазона в одном измерении. R-tree индекс - может управлять многоразмерными данными. Например, если R-tree индекс - может быть встроен в атрибут типа point, то система может - более эффективно ответить на запрос типа "выбрать все точки внутри - заданного четырехугольника."

    -

    Канонический источник, описывающий первоначальное создание R-tree - это:

    - -

    Guttman, A. "R-trees: A Dynamic Index Structure for Spatial - Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt - of Data, 45-57.

    - -

    Вы можете найти этот документ в книге Стоунбрейкера "Readings in - Database Systems".

    - -

    Встроеннные R-tree могут управлять полигонами и боксами. В теории, - R-tree могут быть расширены для управления большим количеством - измерений. На практике, расширение R-tree требует некоторых усилий и - у нас, в данный момент, нет какой-либо документации о том, как это - сделать.

    - -

    4.11) Что такое Genetic Query - Optimizer?

    - -

    Модуль GEQO производит быструю оптимизацию запроса, - когда происходит связывание многих таблиц через Genetic Algorithm (GA). - Это позволяет управлять большими запросами на связывание через - неистощающий поиск.

    - -

    4.12) Как мне выполнить поиск регулярного выражения +

    4.8) Как мне выполнить поиск регулярного выражения и поиск независимый от регистра букв поиск регулярного выражения? Как мне использовать индекс для поиска независимого от регистра букв?

    @@ -1101,28 +834,55 @@ Эта конструкция не будет использовать стандартный индекс. Однако, если - вы создадите функциональный индекс, он будет использован: + вы создадите индекс выражения, он будет использован:
         CREATE INDEX tabindex ON tab (lower(col));
     
    -

    4.13) Как я могу определить, что значение поля +

    4.9) Как я могу определить, что значение поля равно NULL в каком-либо запросе?

    Вы просто сравниваете значение с IS NULL и IS NOT NULL.

    -

    4.14) Каковы отличия между разными символьными +

    4.10) Каковы отличия между разными символьными типами?

    -
    -Тип            Внутреннее имя   Замечания
    ---------------------------------------------------
    -VARCHAR(n)      varchar         размер задает максимальную длину, нет заполнения
    -CHAR(n)         bpchar          заполняется пустотой до фиксированной длины
    -TEXT            text            нет задаваемого верхнего ограничения или длины
    -BYTEA           bytea           массив байт переменной длины (можно использовать null-байт без опаски)
    -"char"          char            один символ
    -
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ТипВнутреннее имяЗамечания
    VARCHAR(n)varcharразмер задает максимальную длину, нет заполнения
    CHAR(n)bpcharзаполняется пустотой до фиксированной длины
    TEXTtextнет задаваемого верхнего ограничения или длины
    BYTEAbyteaмассив байт переменной длины (можно использовать null-байт без опаски)
    "char"charодин символ
    +

    Внутреннее имя вы можете увидеть, когда смотрите системные каталоги и в некоторых сообщениях об ошибках.

    @@ -1147,7 +907,7 @@ BYTEA bytea которых могут включать NULL байты. Все типы описанные здесь, имеют сходные характеристики производительности.

    -

    4.15.1) Как мне создать поле +

    4.11.1) Как мне создать поле serial/с-авто-увеличением?

    PostgreSQL поддерживает тип данных SERIAL. Он @@ -1169,20 +929,15 @@ BYTEA bytea Смотрите подробности о последовательностях на странице руководства - посвященной create_sequence. Вы также можете использовать - каждое поле OID в записи как уникальное значение. Однако, - если вам нужен дамп и перезагрузка базы данных, вам необходимо - использовать команду pg_dump с опцией -o или опцию - COPY WITH OIDS для сохранения значений поля - OID. - -

    4.15.2) Как мне получить значение при вставке + посвященной create_sequence. + +

    4.11.2) Как мне получить значение при вставке SERIAL?

    Один из способов состоит в получении следующего значения SERIAL из объекта sequence с помощью функции nextval() перед вставкой и затем вставлять это значение - явно. Используйте таблицу-пример в 4.15.1, пример + явно. Используйте таблицу-пример в 4.11.1, пример в псевдоязыке покажет как это делается:

         new_id = execute("SELECT nextval('person_id_seq')");
    @@ -1205,23 +960,15 @@ BYTEA           bytea           
         new_id = execute("SELECT currval('person_id_seq')");
     
    - И наконец, вы можете использовать значение - OID, возращаемое из опертора - INSERT чтобы увидеть значение по умолчанию, что - предположительно является наименее переносимым на другие платформы - решением, к тому же значение oid будет урезаться, когда оно достигнет - 4 миллиардов. В Perl, используя DBI с модулем Edmund Mergl'я DBD::Pg, - значение oid становится доступным через $sth->{pg_oid_status} - после $sth->execute(). -

    4.15.3) Не может ли получиться так, что +

    4.11.3) Не может ли получиться так, что использование currval() и nextval() приведет к зациклированию с другими пользователями?

    -

    Нет. currval() возвращает текущее значение, назначенное вашем - backend'ом, а не другими пользователями.

    +

    Нет. currval() возвращает текущее значение, назначенное вашей + сессией, а не другими сессиями.

    -

    4.15.4) Почему числа из моей последовательности +

    4.11.4) Почему числа из моей последовательности не используются снова при отмене транзакции? Почему создаются разрывы при нумерации в колонке, где я использую последовательность/SERIAL?

    @@ -1231,78 +978,32 @@ BYTEA bytea нумерации при отмене транзакций.

    -

    4.16) Что такое OID? Что такое +

    4.12) Что такое OID? Что такое TID?

    -

    Поля OID служат уникальными идетификаторами записей - в PostgreSQL. Каждая запись, которая создаётся в PostgreSQL получает - уникальный OID. Все значения OID - генерируемые во время initdb имеют значения меньше 16384 (из - include/access/transam.h). Все созданные пользователем - OID имеют бОльшие значение. По умолчанию, все эти - OID являются уникальными не только внутри какой-либо - таблицы или базы данных, но и внутри всей СУБД PostgreSQL.

    - -

    PostgreSQL использует OID в своих внутренних системных - таблицах для связи записей и таблиц. Значения OID могут - быть использованы для идентификации заданных пользователем записей, - а также использоваться при связываниях. Рекомендуется использовать - тип колонки OID для хранения значений OID - Вы можете создать индекс на поле OID для более быстрого - доступа.

    - -

    Значения OID назначаются для всех новых записей из - центральной области, которые используются всеми всеми базами данных. - Если вы хотите изменить OID на какое-либо другое - значение или если вы хотите создать копию таблицы с такимиже - OID, то это можно сделать так:

    -
    -        CREATE TABLE new_table(mycol int);
    -        SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table;
    -        COPY tmp_table TO '/tmp/pgtable';
    -        COPY new_table WITH OIDS FROM '/tmp/pgtable';
    -	DROP TABLE tmp_table;
    -
    -

    OID хранится как 4-х байтное целое и не может превышать - значение в 4 миллиарда. Однако, еще никто не сообщил о том, что такое - произошло, но мы планируем до того как это случиться избавится от - этого ограничения.

    +

    Каждая, создаваемая в PostgreSQL табличная строка, получает уникальный + индентификатор OID за исключением случая когда + использовалось WITHOUT OIDS. OID - это + автоматически назначаемое уникальное 4-х байтовое целое число. + Однако, после того как его значение превысит 4 миллиарда, значения + OID начинают дублироваться. PostgreSQL использует + OID для связывания своих внутренних таблиц.

    + +

    Для уникальных значений в колонках таблицы пользователя, лучшим + способом является использование SERIAL вместо + OID, потому что последовательности SERIAL + уникальны только внутри таблицы и таким образом меньше подвержены + переполнению. Для хранения значений 8-ми байтной последовательности + доступен тип SERIAL8.

    TID используется для идентификации специальных физических записей с блочными и offset значениями. TID - изменяется после того как записи были изменены или перегружены. + изменяется после того как строки в таблице были изменены или перегружены.

    TID используется индексными записями в качестве указателя на физические записи.

    -

    4.17) Что означают некоторые термины используемые в - PostgreSQL?

    - -

    Некоторый исходный код и старая документация используют - общеупотребительные термины. Вот некоторые из них:

    - -
      -
    • table, relation, class
    • - -
    • row, record, tuple
    • - -
    • column, field, attribute
    • - -
    • retrieve, select
    • -
    • replace, update
    • - -
    • append, insert
    • - -
    • OID, serial value
    • - -
    • portal, cursor
    • - -
    • range variable, table name, table alias
    • -
    - -

    Список общих терминов по базам данных можно найти на http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html

    - -

    4.18) Почему я получаю ошибку "ERROR: Memory +

    4.13) Почему я получаю ошибку "ERROR: Memory exhausted in AllocSetAlloc()"?

    Предположительно у вас закончилась виртуальная память @@ -1322,12 +1023,12 @@ BYTEA bytea клиентом, потому что backend возвращает слишком большой объем данных, попытайтесь выполнить эту команду перед запуском клиента. -

    4.19) Как мне узнать, какая версия PostgreSQL +

    4.14) Как мне узнать, какая версия PostgreSQL запущена?

    Из psql, наберите SELECT version();

    -

    4.20) Почему при работе с моим большим объектом +

    4.15) Почему при работе с моим большим объектом я получаю ошибку "invalid large obj descriptor"?

    Вам нужно при использовании большого объекта поместить в начале @@ -1345,46 +1046,15 @@ BYTEA bytea

    Если вы используете такой интерфейс клиента как ODBC, вам возможно понадобится установить auto-commit off.

    -

    4.21) Как мне создать колонку которая по умолчанию +

    4.16) Как мне создать колонку которая по умолчанию будет содержать текущее время?

    Используйте CURRENT_TIMESTAMP:

    -CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
    -
    +CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
     
    -

    4.22) Почему мои подзапросы, использующие - IN так медленно работаеют?

    - -

    В версиях до 7.4, подзапросы связывались с родительскими запросами - через последовательный перебор результатов позапроса для каждой - записи родительского запроса. Если подзапрос возвращает только несколько - записей, а родительский запрос возвращает много записей, - IN работает наиболее быстро. Чтобы - увеличить скорость в других запросах, замените IN на - EXISTS:

    -
    -    SELECT *
    -    FROM tab
    -    WHERE col IN (SELECT subcol FROM subtab);
    -
    - - на: -
    -    SELECT *
    -    FROM tab
    -    WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
    -
    - - Чтобы такая конструкция работала быстро, колонка subcol - должна быть проиндексирована. - -

    В версии 7.4 и выше, IN фактически использует такой же - механизм связывания как и обычные запросы, поэтому предпочтительным - является использование EXISTS

    . - -

    4.23) Как мне выполнить внешнее связывание?

    +

    4.17) Как мне выполнить внешнее связывание?

    PostgreSQL поддерживает внешнее связывание, используя стандартный синтаксис SQL. Вот два примера:

    @@ -1400,32 +1070,15 @@ BYTEA bytea

    Это идентичные запросы связывания t1.col и t2.col, также возвращают - любые несвязанные записи в t1 (которые не совпадают с t2). - RIGHT связывание должно добавить несвязанные записи + любые несвязанные строки в t1 (которые не совпадают с t2). + RIGHT связывание должно добавить несвязанные строки t2. FULL связывание должно возвратить совпавшие - записи плюс все несвязанные записи из t1 и t2. Слово OUTER + строки плюс все несвязанные строки из t1 и t2. Слово OUTER является необязательным и назначается в LEFT, RIGHT и FULL связываниях. Обычные связывания называются INNER связывания.

    -

    В предыдущих версиях, внешние связывания могли быть эмулированы - используя UNION и NOT IN. Например, - когда происходит связывание tab1 и tab2, следующий - запрос выполняет внешнее связывание двух таблиц:
    -
    -

    -
    -    SELECT tab1.col1, tab2.col2
    -    FROM tab1, tab2
    -    WHERE tab1.col1 = tab2.col1
    -    UNION ALL
    -    SELECT tab1.col1, NULL
    -    FROM tab1
    -    WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
    -    ORDER BY col1
    -
    - -

    4.24) Как выполнять запросы, использующие несколько +

    4.18) Как выполнять запросы, использующие несколько баз данных?

    Не существует способа создать запрос к базам данных отличным от текущей. @@ -1433,20 +1086,19 @@ BYTEA bytea данных, непонятно даже, как должен себя вести такой межбазовый запрос.

    contrib/dblink позволяет запросы между базами, используя - вызовы функций. Разумеется, клиент может одновременно устанавливать + вызовы функций. Разумеется, клиент может одновременно также устанавливать соедиенения с различными базами данных и таких образом объединять информацию из них.

    -

    4.25) Как мне вернуть из функции несколько записей?

    +

    4.19) Как мне вернуть из функции несколько строк таблицы?

    -

    В версии 7.3, вы можете легко вернуть несколько записей или колонок из - какой-либо функции, - - http://techdocs.postgresql.org/guides/SetReturningFunctions.

    +

    Вы можете легко использовать функции, возвращающие список, + + http://techdocs.postgresql.org/guides/SetReturningFunctions.

    -

    4.26) Почему я не могу надежно создавать/удалять +

    4.20) Почему я не могу надежно создавать/удалять временные таблицы в функциях PL/PgSQL?

    -

    PL/PgSQL кэширует содержимое функции и один из негативных эффектов этого +

    PL/PgSQL кэширует сценарии функции и один из негативных эффектов этого состоит в том, что если функция PL/PgSQL обращается к временной таблице и эта таблица позднее удаляется и пересоздается, а функция затем вызывается снова, то ее вызов приведет к ошибке, потому что скэшированное содержимое @@ -1455,7 +1107,7 @@ BYTEA bytea таблицам в PL/PgSQL. Использование этого оператора заставит запрос перегенерироваться каждый раз.

    -

    4.27) Какие опции шифрования существуют? +

    4.21) Какие опции шифрования существуют?

    • contrib/pgcrypto содержит много функций шифрования для @@ -1468,8 +1120,7 @@ BYTEA bytea возможно использование независимых внешних шифрующих транспортов, таких как stunnel или ssh, вместо собственных SSL соединений PostgreSQL).
    • Пароли пользователей к базе данных автоматически шифруются, при - сохранении в версии 7.3. В предыдущих версиях, вы должны разрешить - опцию PASSWORD_ENCRYPTION в postgresql.conf.
    • + сохранении в системных таблицах.
    • Сервер можно запустить, используя шифрованную файловую систему.

    @@ -1489,7 +1140,7 @@ BYTEA bytea и они по возможности будут помещены в подкаталог contrib/.

    5.3) Как мне написать C функцию, возвращающую - запись?

    + строку таблицы?

    В версиях PostgreSQL, начиная с 7.3, функции, возвращающие таблицы полностью поддерживаются в C, PL/PgSQL и SQL. Подробности смотрите в -- cgit v1.2.3