diff options
author | Bruce Momjian <bruce@momjian.us> | 2002-02-22 13:03:01 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2002-02-22 13:03:01 +0000 |
commit | 876eda539c48076723b5f5392bd065bb36aeec78 (patch) | |
tree | ead06f21647e827850da30a0a8fba42ccee12f6f | |
parent | a81dc0d168f2343a764169081002cb6217ba3a1c (diff) | |
download | postgresql-876eda539c48076723b5f5392bd065bb36aeec78.tar.gz |
BACKPATCH:
Add Russian FAQ to 7.2.1. Why not?
-rw-r--r-- | doc/FAQ_russian | 1146 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_russian.html | 1373 |
2 files changed, 2519 insertions, 0 deletions
diff --git a/doc/FAQ_russian b/doc/FAQ_russian new file mode 100644 index 0000000000..9639d5f3fa --- /dev/null +++ b/doc/FAQ_russian @@ -0,0 +1,1146 @@ + + Ответы на часто задаваемые вопросы по PostgreSQL + + Дата последнего обновления: Четверг 18 Февраля 17:56:04 EST 2002 + + Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) + (pgman@candle.pha.pa.us) + + Перевел на русский: Виктор Вислобоков (victor_v@permonline.ru) + + Самую свежую английскую версию документа можно найти на + http://www.PostgreSQL.org/docs/faq-english.html. + + Ответы на вопросы специфичные для конкретных платформ можно найти на + http://www.PostgreSQL.org/users-lounge/docs/faq.html. + _________________________________________________________________ + + Общие вопросы + + 1.1) Что такое PostgreSQL? Как произносится это название? + 1.2) Каковы авторские права на PostgreSQL? + 1.3) На каких Unix платформах работает PostgreSQL? + 1.4) Существуют ли версии портированные не на Unix системы? + 1.5) Где можно взять PostgreSQL? + 1.6) Где получить поддержку? + 1.7) Какая последняя версия? + 1.8) Какая документация имеется в наличии? + 1.9) Как найти информацию об известных ошибках или отсутствующих + возможностях? + 1.10) Как научиться SQL? + 1.11) Решена ли в PostgreSQL проблема 2000-го года (Y2K)? + 1.12) Как присоединится к команде разработчиков? + 1.13) Как отравить сообщение об ошибке? + 1.14) Как сравнивать PostgreSQL с другими СУБД? + 1.15) Как оказать финансовую помощь PostgreSQL? + + Вопросы пользователей по клиентской части + + 2.1) Существуют ли ODBC драйвера для 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.6) Какие настройки мне нужно сделать для улучшения + производительности? + 3.7) Какие возможности для отладки есть в наличии? + 3.8) Почему я получаю сообщение "Sorry, too many clients" когда + пытаюсь подключиться к базе? + 3.9) Что это за файлы pg_sorttempNNN.NN в моем каталоге с базой + данных? + + Вопросы эксплуатации + + 4.1) В чем отличие между бинарным и нормальным курсором? + 4.2) Как выполнить SELECT только для нескольких первых строчек + запроса? + 4.3) Как получить список таблиц или других компонентов в psql? + 4.4) Как удалить колонку из таблицы? + 4.5) Каковы максимальные размеры для записей, таблиц и базы данных? + 4.6) Как много дискового пространства в базе данных нужно для + сохранения данных из обычного текстового файла? + 4.7) Как мне убедиться, что нужные мне таблицы или индексы определены + в базе данных? + 4.8) У меня медленно работают запросы или не происходит использования + индексов. Почему? + 4.9) Как посмотреть на то, как оптимизатор выполняет мой запрос? + 4.10) Что такое R-tree индекс? + 4.11) Что такое Genetic Query Optimizer? + 4.12) Как мне выполнить поиск регулярного выражения и поиск + независимый от регистра букв поиск регулярного выражения? Как мне + использовать индекс для поиска независимого от регистра букв? + 4.13) Как я могу определить, что значение поля равно NULL в каком-либо + запросе? + 4.14) Каковы отличия между разными символьными типами? + 4.15.1) Как мне создать поле serial/с-авто-увеличением? + 4.15.2) Как мне получить значение при вставке SERIAL? + 4.15.3) Не может ли получиться так, что использование currval() и + nextval() приведет к зациклированию с другими пользователями? + 4.15.4) Почему числа из моей последовательности не используются снова + при отмене транзакции? Почему создаются разрывы при нумерации в + колонке, где я использую последовательность/SERIAL? + 4.16) Что такое OID? Что такое TID? + 4.17) Что означают некоторые термины используемые в PostgreSQL? + 4.18) Почему я получаю ошибку "ERROR: Memory exhausted in + AllocSetAlloc()"? + 4.19) Как мне узнать, какая версия PostgreSQL запущена? + 4.20) Почему при работе с моим большим объектом я получаю ошибку + "invalid large obj descriptor"? + 4.21) Как мне создать колонку которая по умолчанию будет содержать + текущее время? + 4.22) Почему мои подзапросы, использующие IN так медленно работаеют? + 4.23) Как выполнить внешнее связывание? + 4.24) Как выполнять запросы, использующие несколько баз данных? + + Расширения PostgreSQL + + 5.1) Я написал функцию определяемую пользователем. Когда я запускаю ее + в psql, почему я получаю dump core? + 5.2) Как я могу внести некоторые классные новые типы и функции в + PostgreSQL? + 5.3) Как мне написать C функцию, возвращающую запись? + 5.4) Я изменил исходный файл. Почему после перекомпиляции я не вижу + изменений? + _________________________________________________________________ + + Общие вопросы + + 1.1) Что такое PostgreSQL? + + PostgreSQL произносится Post-Gres-Q-L (Пост-Грес-Кью-Эл). + + PostgreSQL - это расширение СУБД POSTGRES, исследовательский прототип + нового поколения СУБД. PostgreSQL одновременно сохраняет мощную модель + данных и общирное количество типов POSTGRES, и замещает язык запросов + PostQuel на расширенное подмножество SQL. PostgreSQL - это свободное и + полностью открытое программное обеспечение. + + Разработку PostgreSQL выполняет команда, связанная через Internet, все + участники которой подписаны на список рассылки разработчиков. В + настоящее время, их координатором является Марк Форнай (Marc G. + Fournier) (scrappy@PostgreSQL.org). (См. ниже о том, как подключиться + к разработке). Эта команда теперь отвечает за всю разработку + PostgreSQL. + + Авторами PostgreSQL 1.01 являются Эндрю Ю (Andrew Yu) и Джоли Чен + (Jolly Chen). Многие другие внесли свой вклад в перенос на другие + платформы, тестирование, отладку и расширение этого кода. + Первоначальный код Postgres, из которого появился PostgreSQL, был + итогом усилий многих академических студентов, неакадемических + студентов и множества разных программистов, работавших под + руководством профессора Майкла Стоунбрейкера (Michael Stonebraker) в + Калифорнийском университете, Беркли. + + Первоначальное имя, данное в Беркли, было Postgres. Когда в 1995 году + была добавлена функциональность SQL, это имя было изменено на + Postgres95. Но и это имя было изменено в конце 1996 на PostgreSQL. + + 1.2) Каковы авторские права на PostgreSQL? + + PostgreSQL попадает под действие следующего COPYRIGHT: + + Система Управления Базами Данных PostgreSQL + + Portion copyright (c) 1996-2002, PostgreSQL Global Development Group + Portions Copyright (c) 1994-6 Regents of the University of California + + Предоставляются права на использование, копирование, изменение и + распространение данного программного обеспечения и его документации + для любых целей, бесплатно и без подписания какого-либо соглашения, + при условии что для каждой копии будут предоставлены данное выше + замечание об авторских правах, текущий параграф и два следующих + параграфа. + + КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ + ПОВРЕЖДЕНИЯ, ВКЛЮЧАЯ ПОТЕРЮ ДОХОДА, НАНЕСЕННЫЕ ПРЯМЫМ ИЛИ НЕПРЯМЫМ, + СПЕЦИАЛЬНЫМ ИЛИ СЛУЧАЙНЫМ ИСПОЛЬЗОВАНИЕМ ДАННОГО ПРОГРАММНОГО + ОБЕСПЕЧЕНИЯ ИЛИ ЕГО ДОКУМЕНТАЦИИ, ДАЖЕ ЕСЛИ КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ + БЫЛ ИЗВЕЩЕН О ВОЗМОЖНОСТИ ТАКИХ ПОВРЕЖДЕНИЙ. + + КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ СПЕЦИАЛЬНО ОТКАЗЫВАЗЫВАЕТСЯ ПРЕДОСТАВЛЯТЬ + ЛЮБЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ТОЛЬКО ЭТИМИ ГАРАНТИЯМИ: + НЕЯВНЫЕ ГАРАНТИИ ПРИГОДНОСТИ ТОВАРА ИЛИ ПРИГОДНОСТИ ДЛЯ ОТДЕЛЬНОЙ + ЦЕЛИ. ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ НА ОСНОВЕ ПРИЦИПА + "КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ + СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ. + + Вышеизложенное является BSD лицензией, классической лицензией + программного обеспечения с открытым кодом. Эта лицензия не накладывает + ограничений на использование исходного кода. Нам нравится эта лицензия + и мы не собираемся её менять. + + 1.3) На каких Unix платформах работает PostgreSQL? + + Обычно, PostgreSQL может работать на любой современной платформе + совместимой с Unix. В инструкции по установке, вы найдете список тех + платформ, на которых были проведены тестовые запуски PostgreSQL к + моменту выхода данной версии. + + 1.4) Существуют ли версии перенесенные не на Unix системы? + + Клиент + + Для запуска на платформах MS Windows возможна компиляция C библиотеки + libpq, psql и других интерфесов и бинарных файлов. В этом случае, + клиент запускается на MS Windows и связывается по TCP/IP с сервером, + запущенным на одной из поддерживаемых Unix платформ. В дистрибутив + включается файл win31.mak для того, чтобы можно было провести сборку + библиотеки libpq и psql для Win32. PostgreSQL также работает через + ODBC. + + Сервер + + Сервер БД может быть запущен на Windows NT и Win2k, используя + библиотеку Cygwin, разработанную для переноса программного обеспечения + Unix в NT. Смотрите pgsql/doc/FAQ_MSWIN в дистрибутиве или MS Windows + FAQ на нашем сайте. Мы не планируем специально переносить PostgreSQL + на какую-либо платформу Microsoft. + + 1.5) Где можно взять PostgreSQL? + + Например, воспользовавшись анонимным доступом на ftp сайт PostgreSQL + ftp://ftp.PostgreSQL.org/pub. Список зеркал вы найдете на нашем + основном сайте. + + 1.6) Где получить поддержку? + + Основной список рассылки: 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 + + Еще существует IRC канал на EFNet, с названием #PostgreSQL. Я + использую для подключения к этому каналу команду Unix irc -c + '#PostgreSQL' "$USER" irc.phoenix.net. + + Список коммерческой поддержки компаний доступен на + http://www.postgresql.org/users-lounge/commercial-support.html. + + 1.7) Какая последняя версия? + + Последний выпуск PostgreSQL - это версия 7.2. + + Мы планируем выпускать новые версии каждые четыре месяца. + + 1.8) Какая документация имеется в наличии? + + В дистрибутив включаются различные руководства, страницы электронного + руководства man и некоторые маленькие тестовые примеры. Смотрите в + каталог /doc. Вы также можете просматривать документацию в Интернет по + адресу http://www.PostgreSQL.org/users-lounge/docs/. + + Существует две книги по PostgreSQL доступные по адресам + http://www.PostgreSQL.org/docs/awbook.html и + http://www.commandprompt.com/ppbook/. Список книг по PostgreSQL, + которые можно купить доступен по адресу + http://www.postgresql.org/books/. Кроме того, по адресу + http://techdocs.postgresql.org/ вы можете найти коллекцию технических + статей посвященных PostgreSQL. + + psql имеет несколько прекрасных команд \d для отображения информации + по типам, операторам, функциям, агрегатам и т.д. + + Наш сайт содержит еще больше информации. + + 1.9) Как найти информацию об известных ошибках или отсутствующих + возможностях? + + PostgreSQL поддерживает расширенный подкласс SQL-92. Смотрите наш + список TODO на предмет известных ошибок, отсутствующих особенностях и + будущих планов. + + 1.10) Как мне научиться SQL? + + Книга по PostgreSQL на http://www.PostgreSQL.org/docs/awbook.html + научит SQL. Существует другая книга по PostgreSQL на + http://www.commandprompt.com/ppbook. Есть прекрасный учебник на + http://www.intermedia.net/support/sql/sqltut.shtm, на + http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM, + и на http://sqlcourse.com. + + Еще один учебник - это книга "Teach Yourself SQL in 21 Days, Second + Edition" (Освой самостоятельно SQL за 21 день, Вторая редакция) на + http://members.tripod.com/er4ebus/sql/index.htm + + Многим из наших пользователей нравится книга The Practical SQL + Handbook, 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) Как присоединится к команде разработчиков? + + Для начала, скачайте последнюю версию исходных текстов и прочтите + документацию разработчиков PostgreSQL на нашем сайте или в + дистрибутиве. Затем, подпишитесь на списки рассылки pgsql-hackers и + pgsql-patches. Далее, отправляйте исправления (patches) высокого + качества в список pgsql-patches. + + Существует ограниченный список людей, который имеют привелегию вносить + изменения в CVS архив PostgreSQL. Каждый из этих людей в свое время + отправил так много высококачественных исправлений, что их было + невозможно оставить без внимания и они были удостоены превилегии + вносить изменения, и мы уверены, что те исправления, которые они + внесут будут высокого качества. + + 1.13) Как отравить сообщение об ошибке?? + + Пожалуйста посетите страничку PostgreSQL BugTool, на которой + предоставлены детальные инструкции о том как отправить сообщение об + ошибке. + + Также не забудьте посмотреть на ftp://ftp.PostgreSQL.org/pub на + предмет более свежих версий PostgreSQL или заплат. + + 1.14) Как сравнивать PostgreSQL с другими СУБД? + + Существует несколько методов сравнения программного обеспечения: + возможности, производительность, надежность, поддержка и цена. + + Возможности + PostgreSQL имеет большинство возможностей представленных в + больших коммерческих СУБД, такие как: транзакции, подзапросы, + триггеры, обзоры (views), внешний ключ ссылочной целостности и + разные блокировки. У нас есть некоторые возможности, которых + нет у них: типы, определяемые пользователем, механизм + наследования, правила и конкуретное многоверсионное управление + для работы с содержимым блокировок. + + Производительность + PostgreSQL может работать в двух режима. В нормальном fsync + режиме, каждая завершенная транзакция сбрасывается на диск, + гарантируя, что если операционная система или питание рухнет в + следующие несколько секунд, все ваши данные безопасно + сохранятся на диске. В этом режиме, мы работаем медленее, чем + большинство коммерческих СУБД, отчасти потому, что некоторые из + них делают у себя по умолчанию такой консервативный сброс на + диск. В режиме no-fsync, мы обычно быстрее чем коммерческие + СУБД, но в этом режиме, падение операциооной системы может + привести к потере данных. Мы работаем над тем чтобы + предоставить промежуточный режим, который обеспечивал более + высокую производительность, чем fsync режим и позволял + сохранить целостность данных записанных в течении 30 секунд до + падения операционной системы. + В сравнении с MySQL или линейными СУБД, мы медленее при + операциях вставки/обновления, потому что мы управляем + транзакциями. И разумеется, MySQL не имеет каких-либо + возможностей из перечисленых в секции Возможности. Мы делаем + упор на удобстве и возможностях, но мы также продолжаем + увеличивать производительность путем профилирования и анализа + исходных текстов. Существует интересная страничка в Интернет, + сравнивающая PostgreSQL и MySQL на + http://openacs.org/why-not-mysql.html + Мы управляем каждым пользовательским соединением, создавая Unix + backend процесс. Backend процессы разделяют буферы данных и + информацию о блокировках. При наличии нескольких процессоров, + несколько backend процессов легко могут быть запущены на разных + процессорах. + + Надежность + Мы понимали, что наша СУБД должна быть надежной или она ничего + не будет стоить. Мы стараемся выпускать хорошо проверенный, + стабильный код, который содержит минимум ошибок. Каждый выпуск + проходит стадию бета-тестирования по крайней мере в течении + одного месяца и наша история выпусков показывает что мы можем + предоставлять стабильные, монолитные выпуски, которые готовы к + продуктивному использованию. Мы верим, что мы производим + проверку не хуже, чем у других СУБД. + + Поддержка + Наш список рассылки представлен большой группой разработчиков и + пользователей, которые могут помочь решить любые возникшие + проблемы. В то же время, мы не гарантируем какие-либо + исправления, но и разработчики коммерческих СУБД не всегда + делают исправления. Прямой доступ к разработчикам, сообществу + пользователей, руководствам и исходным текстам часто делают + поддержку PostgreSQL превосходящей другие СУБД. Существует + коммерческая поддержка по результам возникших инцидентов, + которая доступна для тех кому она нужна. (Смотрите Как получить + поддержку?.) + + Цена + Наш продукт бесплатен как для коммерческого так, и не для + коммерческого использования. Вы можете добавлять свой код в наш + продукт без ограничений, за исключением тех, что описываются в + нашей лицензии стиля BSD, которая приведена выше. + + 1.15) Как оказать финансовую помощь PostgreSQL? + + PostgreSQL имеет одноранговую инфраструктуру с того самого времени как + мы начали разработку 6 лет назад. Мы должны благодарить за это Марка + Фоная (Marc Fournier), который создал эту инфраструктуру и управляет + ей на протяжении этих лет. + + Качественная инфраструктура очень важна для проектов с открытым + исходным кодом. Она предотвращает расколы, которые могут сильно + задержать поступательное движение проекта. + + Разумеется, эта инфраструктура не является дешевой. Существует + некоторое количество ежемесячных и одноразовых расходов, которые + требуют денег. Если вы или ваша компания имеет деньги, которые можно + передать в помощь нашим усилиям, пожалуйста посетите страничку + http://www.pgsql.com/pg_goodies и сделайте свой вклад. + + Хотя на страничке говорится о PostgreSQL, Inc, пункт "contributions" + предназначен исключительно для поддержки проекта PostgreSQL и не + передается какой-либо конкретной компании. Если хотите, то можете это + проверить, написав письмо на контактный адрес. + _________________________________________________________________ + + Вопросы пользователей по клиентской части + + 2.1) Существуют ли ODBC драйвера для PostgreSQL? + + Существует два ODBC драйвера, PsqlODBC и OpenLink ODBC. + + PsqlODBC включается в дистрибутив. Больше информации об этом драйвере + можно найти на ftp://ftp.PostgreSQL.org/pub/odbc/. + + OpenLink ODBC можно взять на http://www.openlinksw.com. Этот драйвер + работает с их стандартным клиентским программным обеспечением, + использующим ODBC, и таким образом, ODBC драйверы для PostgreSQL + доступны для каждой из поддерживаемых ими платформ (Win, Mac, Unix, + VMS). + + Возможно они будут продавать свой продукт тем кому нужна коммерческая + поддержка, но бесплатная версия всегда будет доступна. Пожалуйста, + направляйте вопросы на адрес postgres95@openlink.co.uk. + + Также посмотрите ODBC раздел в руководстве программиста. + + 2.2) Какие инструменты существуют для использования PostgreSQL через Web? + + Прекрасное введение во взаимодействие баз данных и Web можно найти на: + http://www.webreview.com + + Также загляните на http://www.phone.net/home/mwm/hotlist/. + + Для интеграции с Web, одним из превосходных инструментов является PHP. + Домашняя станичка http://www.php.net. + + Для комплексных решений, многие пользуются Perl интерфейсом и CGI.pm. + + 2.3) Есть ли у PostgreSQL графический интерфейс пользователя? Генератор + отчетов? Встроенный интерфейс для языка запросов? + + У нас есть прекрасный горафический интерфейс, называемый pgaccess, + который является частью дистрибутива. pgaccess также емеет генератор + отчетов. Его страничка http://www.flex.ro/pgaccess + + Мы также включаем ecpg, который предоставляет встроенный интерфейс к + языку запросов SQL из C. + + 2.4) Какие языки могут взаимодействовать с PostgreSQL? + + Вот эти: + * C (libpq) + * C++ (libpq++) + * Embedded C (ecpg) + * Java (jdbc) + * Perl (perl5) + * ODBC (odbc) + * Python (PyGreSQL) + * TCL (libpgtcl) + * C Easy API (libpgeasy) + * Embedded HTML (PHP from http://www.php.net) + _________________________________________________________________ + + Вопросы администрирования + + 3.1) Как мне установить PostgreSQL в место отличное от /usr/local/pgsql? + + Задайте опцию --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) Как мне управлять соединениями с других компьютеров? + + По умолчанию, PostgreSQL разрешает только соединения на локальной + машине через сокеты домена Unix. Другие машины не смогут подключиться + к базе пока для postmaster не будет задан флаг -i и пока не будет + разрешена host-авторизация в файле $PGDATA/pg_hba.conf. Эти действия + делают возможными TCP/IP соединения. + + 3.6) Какие настройки мне нужно сделать для улучшения производительности? + + Несомненно, индексы могут увеличить скорость выполнения запросов. + Команда EXPLAIN позволяет вам посмотреть как PostgreSQL интерпретирует + ваш запрос и какие индексы используются. + + Если вы выполняете много операторов INSERT, рассмотрите возможность + выполнять их в большой пачке, используя команду COPY. Это значительно + быстрее, чем отдельные INSERT. Во-вторых, операторы вне блока + транзакции BEGIN WORK/COMMIT сами выполняют транзакцию. Подумайте над + выполнением нескольких операторов в одном блоке транзакции. Это + уменьшит количество транзакций. Также, задумайтесь над удалением и + пересозданием индексов, когда вы выполняете большие изменения данных. + + Существует несколько опций настройки. Вы можете запретить fsync() при + старте postmaster с опцией -o -F. Это предотвратит вызовы fsync(), + которые приводят к сбросу данных на диск после каждой транзакции. + + Вы можете также использовать для postmaster опцию -B для увеличения + количества буферов разделяемой памяти, которая используется backend + процессами. Если вы сделаете значение этого параметра слишком большим, + то postmaster может не запустится потому что вы исчерпаете ограничение + ядра на объем разделяемой памяти. Каждый буфер имеет размер в 8 + килобайт и по умолчанию выделяется 64 буфера. + + Вы можете также использовать backend опцию -S для увеличения + максимального количества памяти, которое используется backend + процессом для временных сортировок. Значение для опции -S задается в + килобайтах и по умолчанию равно 512 (т.е. 512K). + + Вы также можете использовать команду CLUSTER для группировки данных в + таблицах на совпадающий индекс. Подробности смотрите на странице + руководства по команде CLUSTER. + + 3.7) Какие возможности для отладки есть в наличии? + + PostgreSQL имеет несколько возможностей, позволяющие получить + информацию о состоянии, которая может быть использована в отладочных + целях. + + Во-первых, при запуске configure с опцией --enable-cassert, многие + вызовы assert() позволяют отслеживать работу backend процесса и + остановку программы при возникновении каких-либо неожиданностей. + + И postmaster, и postgres имеют несколько отладочных опций. Во-первых, + при запуске postmaster, убедитесь, что стандартный вывод и вывод + ошибок осуществляются в файл журнала: + cd /usr/local/pgsql + ./bin/postmaster >server.log 2>&1 & + + Это приведет к появлению файла server.log в главном каталоге + PostgreSQL. Этот файл содержит полезную информацию о проблемах или + ошибках, возникших на сервере. Postmaster имеет опцию -d, которая + позволяет получать при протоколировании более детальную инфрмацию. Для + опции -d указывается число, которое задает уровень отладки. Будьте + осторожны, так как высокий уровень отладки приводит к генерации файлов + журнала большого размера. + + Если postmaster не запущен, вы можете запустить postgres backend из + командной строки и ввести ваш оператор SQL напрямую. Это рекомендуется + только для целей отладки. Заметим, что в этом режиме, запрос + завершается символом новой строки, а не точкой с запятой. Если вы + производили компиляцию с отладочными символоами, вы можете + использовать любой отладчик, чтобы посмотреть, что случилось. + Поскольку backend запускается не из postmaster, он не запускается в + идентичном окружении и значит проблемы итераций блокировок/backend не + могут быть воспроизведены. + + Если postmaster запущен, запустите psql в одном окне, затем найдите + PID процесса postgres, используемый psql. Используйте отдадчик для + подключения к postgres PID. Вы можете установить точки прерывания в + отладчике и запустить запрос из psql. Если вы производите отладку + запуска postgres, вы можете установить PGOPTIONS="-W n", и затем + запустить psql. Эта опция приводит к задержке процесса запуска на n + секунд, в течение которых вы можете подключить к процессу отладчик, + установить любые точки прерывания и продолжить запуск. + + Программа postgres имеет опции -s, -A, и -t которые могут быть очень + полезными для отладки и измерения производительности. + + Вы также можете скомпилировать PostgreSQL с профилированием для того, + чтобы увидеть какие функции сколько времени выполняются. Файлы + профилирования backend'а находятся в каталоге pgsql/data/base/dbname. + Файл профилирования клиента будет помещен в текущий каталог клиента. + + 3.8) Почему я получаю сообщение "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 процессов как раз и состоит в том, чтобы вашей системе хватило + ресурсов. + + В PostgreSQL до версии 6.5, максимальное количество backend процессов + было 64, и изменение этого количества требовало перекомпиляции после + установки константы MaxBackendId в include/storage/sinvaladt.h. + + 3.9) Что это за файлы pg_sorttempNNN.NN в моем каталоге с базой данных? + + Это временные файлы, генерируемые во время выполнения запроса. + Например, если для оператора ORDER BY должна быть выполнена + сортировка, которая требует больше места чем выделенно для backend + процесса в опции -S, то создается временный файл для хранения + дополнительных данных. + + Временные файлы должны удаляться автоматически, но этого может не + происходить, если backend процесс падает во время сортировки. Если у + вас не запущено ни одного backend процесса, то вы можете спокойно + удалить файлы pg_tempNNN.NN. + _________________________________________________________________ + + Вопросы эксплуатации + + 4.1) В чем отличие между бинарным и нормальным курсором? + + Смотрите описание на страницах руководства посвященным DECLARE. + + 4.2) Как выполнить SELECT только для нескольких первых строчек запроса? + + Смотрите станицу руководства посвященную FETCH или используйте SELECT + ... LIMIT.... + + Даже если вы хотите получить только первые несколько записей, будет + выполнен весь запрос. Рассмотрим запрос, который имеет ORDER BY. Если + есть какой-либо индекс, который совпадает с ORDER BY, PostgreSQL может + выдать только несколько первых запрошенных записей или может выполнять + запрос пока не будут выданы желаемые записи. + + 4.3) Как получить список таблиц или других компонентов в psql? + + Вы можете посмотреть исходный код psql в файле + pgsql/src/bin/psql/describe.c. Он содержит команды SQL которые + генерируются при вводе в psql команд, начинающихся с обратной косой + черты. Вы также моежете запустить psql с опцией -E так, чтобы эта + программа выдавала запросы, которые она использует для выполнения + заданных вами команд. + + 4.4) Как удалить колонку из таблицы? + + Мы не поддерживаем ALTER TABLE DROP COLUMN, но можно сделать так: + SELECT ... -- выборка всех колонок за исключением той, которую хотите удал +ить + INTO TABLE new_table + FROM old_table; + DROP TABLE old_table; + ALTER TABLE new_table RENAME TO old_table; + + 4.5) Каковы максимальные размеры для записей, таблиц и базы данных? + + Существуют следующие ограничения: + Максимальный размер базы? неограничен (существуют базы на 60 G +B) + Максимальный размер таблицы? 16 TB + Максимальный размер записи? неограничен начиная с версии 7.1 + Максимальный размер поля? 1 GB начиная с версии 7.1 + Максимальное количество записей в таблице? неограничено + Максимальное количество колонок в таблице? 250-1600 в зависимости от тип +а + Максимальное количество индексов в таблице? неограничено + + Разумеется, понятие "неограничено" на самом деле ограничивается + доступным дисковым пространиством и размерами памяти/своппинга. Когда + значения перечисленные выше неоправдано большие, может пострадать + производительность. + + Максимальный размер таблицы в 16 TB не требует чтобы операционная + система поддерживала файлы больших размеров. Большие таблицы хранятся + как множество файлов размером в 1 GB, так что ограничения, которые + накладывает файловая система не важны. + + Максимальный размер таблицы и максимальное количество колонок могут + быть увеличены, если размер блока по умолчанию будет увеличен до 32k. + + 4.6) Как много дискового пространства в базе данных нужно для сохранения + данных из обычного текстового файла? + + СУБД PostgreSQL может потребоваться дискового пространства до 5 раз + больше для сохранения данных из простого текстового файла. + + В качестве примера, рассмотрим файл в 100,000 строк в каждой, из + которых целое число и текстовое описание. При этом длина текста, в + среднем, составляет 20 байт. Размер простого файла составит 2.8 MB. + Размер базы PostgreSQL, содержащей эти же данные составит + приблизительно 6.4 MB из которых: + 36 байт: на каждый заголовок записи (приблизительно) + + 24 байта: одно поле с целочисленным типом и одно текстовое поле + + 4 байта: указатель на странице для всей записи + ---------------------------------------- + 64 байт на запись + + Размер страницы данных в PostgreSQL составляет 8192 байт (8 KB), так что: + + 8192 байт на страницу + ------------------- = 128 записей на страницу БД (с округлением) + 64 байт на запись + + 100000 строк данных + -------------------- = 782 страницы в БД + 128 записей на страницу + +782 страницы БД * 8192 байт на страницу = 6,406,144 байт (6.4 MB) + + Индексы не требуют так много, но поскольку они создаются для большого + количества данных, они также могут быть велики. + + 4.7) Как мне убедиться, что нужные мне таблицы или индексы определены в + базе данных? + + psql имеет несколько команд, начинающихся с обратной косой черты, для + того чтобы просматривать такую информацию. Используйте \? для того, + чтобы увидеть эти команды. + + Также смотрите файл pgsql/src/tutorial/syscat.source. В нем + представлены многие операторы SELECT которые нужны для получения + информации из системных таблиц базы данных. + + 4.8) У меня медленно работают запросы или не происходит использования + индексов. Почему? + + PostgreSQL не управляет статистикой автоматически. Для обновления + статистики должен быть запущен оператор VACUUM. После того, как + статистика обновилась, оптимизатор узнает о том как много записей в + таблице и если он должен использовать индексы, то он может принимать + лучшие решения. Заметим, что оптимизатор не использует индексы в + случае, когда таблица маленькая, потому что простой последовательный + перебор будет быстрее. + + Для специфической статистики по колонкам, используйте VACUUM ANALYZE. + VACUUM ANALYZE является важным для комплексных запросов множественного + связывания, так как оптимизатор может оценить количество записей, + возвращаемых от каждой таблицы и выбрать правильный порядок + связывания. Backend не осуществляет для себя отслеживание статистики + по колонкам, так что для сбора статистики нужно периодически запускать + VACUUM ANALYZE. + + Обычно индексы не используются для ORDER BY или связываний. + Последовательный перебор через явную сортировку будет быстрее, чем + поиск по индексам всех записей в большой таблице, потому что доступ к + диску с использованием рандомизации очень медленен. + + Когда используются операции с шаблонами, например LIKE или ~, индексы + могут быть использованы только если начало строки-шаблона для поиска, + соответствует началу искомой строки. Так что для того, чтобы + использовать индексы, строка шаблона в LIKE не должна начинаться на %, + а в ~ (поиск регулярного выражения) должна начинаться с ^. + + 4.9) Как посмотреть на то, как оптимизатор выполняет мой запрос? + + Смотрите страницу руководства посвященную 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. + + Вы можете найти этот документ в книге Stonebraker'а "Readings in + Database Systems". + + Встроеннные R-tree могут управлять полигонами и боксами. В теории, + R-tree могут быть расширены для управления большим количеством + измерений. На практике, расширение R-tree требует некоторых усилий и у + нас, в данный момент, нет какой-либо документации о том, как это + сделать. + + 4.11) Что такое Genetic Query Optimizer? + + Модуль GEQO производит быструю оптимизацию запроса, когда происходит + связывание многих таблиц через Genetic Algorithm (GA). Это позволяет + управлять большими запросами на связывание через неистощающий поиск. + + 4.12) Как мне выполнить поиск регулярного выражения и поиск независимый от + регистра букв поиск регулярного выражения? Как мне использовать индекс для + поиска независимого от регистра букв? + + Оператор ~ производит поиск регулярного выражения, а оператор ~* + производит независимый от регистра букв поиск регулярного выражения. + Независимый от регистра вариант LIKE называется ILIKE в PostgreSQL + начиная с версии 7.1. + + Независимое от регистра сравнение обычно выражается так: + SELECT * + FROM tab + WHERE lower(col) = 'abc' + + Эта конструкция не будет использовать стандартный индекс. Однако, если + вы создадите функциональный индекс, он будет использован: + CREATE INDEX tabindex on tab (lower(col)); + + 4.13) Как я могу определить, что значение поля равно NULL в каком-либо + запросе? + + Вы просто сравниваете значение с IS NULL и IS NOT NULL. + + 4.14) Каковы отличия между разными символьными типами? + +Тип Внутреннее имя Замечания +-------------------------------------------------- +"char" char 1 символ +CHAR(#) bpchar заполняется пустотой до фиксированной длины +VARCHAR(#) varchar размер задает максимальную длину, нет заполнени +я +TEXT text нет задаваемого верхнего ограничения или длины +BYTEA bytea массив байт переменной длины (можно использоват +ь null-байт без опаски) + + Внутреннее имя вы можете увидеть, когда смотрите системные каталоги и + в некоторых сообщениях об ошибках. + + Последние четыре типа являются "varlena" типами (т.е., первые четыре + байта на диске являются длинной, за которой следуют данные). Таким + образом, фактически используемое пространство больше, чем обозначенный + размер. Однако, эти типы данных также поддаются сжатию или могут быть + сохранены не в строком виде через TOAST, так что занимаемое дисковое + пространство может также быть и меньше, чем ожидалось. + + CHAR() - это лучшее решение для хранения строк, которые обычно имеют + одинаковую длину. VARCHAR() - это лучшее решение, когда нужно хранить + строки переменной длины, но не превышающие определенного размера. TEXT + - это лучшее решение для строк неограниченной длины, с максимально + допустимой длиной в 1 гигабайт. BYTEA для хранения бинарных данных, + значения которых могут включать NULL байты. + + 4.15.1) Как мне создать поле serial/с-авто-увеличением? + + PostgreSQL поддерживает тип данных SERIAL. Он автоматически создает + последовательность и индекс для колонки. Например: + CREATE TABLE person ( + id SERIAL, + name TEXT + ); + + автоматически транслируется в: + CREATE SEQUENCE person_id_seq; + CREATE TABLE person ( + id INT4 NOT NULL DEFAULT nextval('person_id_seq'), + name TEXT + ); + CREATE UNIQUE INDEX person_id_key ON person ( id ); + + Смотрите подробности о последовательностях на странице руководства + посвященной create_sequence. Вы также можете использовать каждое поле + OID в записи как уникальное значение. Однако, если вам нужен дамп и + перезагрузка базы данных, вам необходимо использовать команду pg_dump + с опцией -o или опцию COPY WITH OIDS для сохранения значений поля OID. + + 4.15.2) Как мне получить значение при вставке SERIAL? + + Один из способов состоит в получении следующего значения SERIAL из + объекта sequence с помощью функции nextval() перед вставкой и затем + вставлять это значение явно. Используйте таблицу-пример в 4.15.1, + чтобы увидеть как это делается в Perl: + new_id = output of "SELECT nextval('person_id_seq')" + INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal'); + + Затем вы должны также сохранить новое значение в переменной new_id для + его использования в других запросах (например таких как внешний ключ + для таблицы person). Заметим, что имя автоматически созданного объекта + SEQUENCE будет <table>_<serialcolumn>_seq, где table и serialcolumn + являются соответственно именами вашей таблицы и вашей колонки SERIAL. + + В качестве альтернативы, вы можете получить назначенное значение + SERIAL с помощью функции currval() после проведения обычной операции + вставки, например + INSERT INTO person (name) VALUES ('Blaise Pascal'); + new_id = output of "SELECT currval('person_id_seq')"; + + И наконец, вы можете использовать значение OID, возращаемое из + опертора INSERT чтобы увидеть значение по умолчанию, что + предположительно является наименее переносимым на другие платформы + решением. В Perl, используя DBI с модулеи Edmund Mergl'я DBD::Pg, + значение oid становится доступным через $sth->{pg_oid_status} после + $sth->execute(). + + 4.15.3) Не может ли получиться так, что использование currval() и nextval() + приведет к зациклированию с другими пользователями? + + Нет. Currval() возвращает текущее значение, назначенное вашем + backend'ом, а не другими пользователями. + + 4.15.4) Почему числа из моей последовательности не используются снова при + отмене транзакции? Почему создаются разрывы при нумерации в колонке, где я + использую последовательность/SERIAL? + + Для реализации конкуретности, значения последовательностей, при + необходимости выдаются во время запуска транзакций и не блокируются до + полного выполнения транзакций. Это может вызывать разрывы в нумерации + при отмене транзакций + + 4.16) Что такое OID? Что такое TID? + + Поля OID служат уникальными идетификаторами записей в PostgreSQL. + Каждая запись, которая создаётся в PostgreSQL получает уникальный OID. + Все значения OID генерируемые во время initdb имеют значения меньше + 16384 (из backend/access/transam.h). Все созданные пользователем OID + имеют бОльшие значение. По умолчанию, все эти OID являются уникальными + не только внутри какой-либо таблицы или базы данных, но и внутри всей + СУБД PostgreSQL. + + PostgreSQL использует OID в своих внутренних системных таблицах для + связи записей и таблиц. Значения OID могут быть использованы для + идентификации заданных пользователем записей, а также использоваться + при связываниях. Рекомендуется использовать тип колонки OID для + хранения значений OID Вы можете создать индекс на поле OID для более + быстрого доступа. + + Значения OID назначаются для всех новых записей из центральной + области, которые используются всеми всеми базами данных. Если вы + хотите изменить OID на какое-либо другое значение или если вы хотите + создать копию таблицы с такимиже OID, то это можно сделать так: + CREATE TABLE new_table(old_oid oid, mycol int); + SELECT old_oid, mycol INTO new FROM old; + COPY new TO '/tmp/pgtable'; + DELETE FROM new; + COPY new WITH OIDS FROM '/tmp/pgtable'; + + OID хранится как 4-х байтное целое и не может превышать значение в 4 + миллиарда. Однако, еще никто не сообщил о том, что такое произошло, но + мы планируем до того как это случиться избавится от этого ограничения. + + 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://www.comptechnews.com/~reaster/dbdesign.html + + 4.18) Почему я получаю ошибку "ERROR: Memory exhausted in AllocSetAlloc()"? + + Если у вас версия ниже 7.1, то обновление версии может решить эту + проблему. Также возможно, что у вас закончилась виртуальная память или + что ваше ядро имеет маленький лимит на определенные ресурсы. + Попытайтесь перед запуском postmaster выполнить следующие команды: + ulimit -d 262144 + limit datasize 256m + + В зависимости от командного интерпретатора shell, только одна из + данных команд выполнится успешно, но она позволит вам установить + больший сегмент данных процесса и возможно решит проблему. Эта команда + изменяет параметры текущего процесса и всех его потомков, созданных + после её запуска. Если у вас возникла проблема с SQL клиентом, потому + что backend возвращает слишком большой объем данных, попытайтесь + выполнить эту команду перед запуском клиента. + + 4.19) Как мне узнать, какая версия PostgreSQL запущена? + + Из psql, наберите select version(); + + 4.20) Почему при работе с моим большим объектом я получаю ошибку "invalid + large obj descriptor"? + + Вам нужно при использовании большого объекта поместить в начале BEGIN + WORK и в конце COMMIT, а внутри получившегося блока lo_open ... + lo_close. + + В настоящий момент PostgreSQL требует, чтобы при закрытии большого + объекта происходило выполнение транзакции. Таким образом, первая же + попытка сделать что-либо с большим объектом, не соблюдая данного + правила приведет к сообщению invalid large obj descriptor, так как код + выполняющий работу над большим объектом (по крайней мере в настоящий + момент) будет генерировать сообщение об ошибке если вы не используете + транзакцию. + + Если вы используете такой интерфейс клиента как ODBC, вам возможно + понадобится установить auto-commit off. + + 4.21) Как мне создать колонку которая по умолчанию будет содержать текущее + время? + + Используйте CURRENT_TIMESTAMP: +CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); + + 4.22) Почему мои подзапросы, использующие IN так медленно работаеют? + + В настоящий момент, мы связываем позапросы для внешних запросов через + последовательный перебор результата подзапроса для каждой записи + внешнего запроса. Попробуйте заменить IN на EXISTS: +SELECT * + FROM tab + WHERE col1 IN (SELECT col2 FROM TAB2) + + на: +SELECT * + FROM tab + WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2) + + Мы надеемся убрать это ограничение в будущем выпуске. + + 4.23) Как мне выполнить внешнее связывание? + + PostgreSQL начиная с версии 7.1 поддерживает внешнее связывание, + используя стандартный синтаксис SQL. Вот два примера: + SELECT * + FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); + + or + SELECT * + FROM t1 LEFT OUTER JOIN t2 USING (col); + + Это идентичные запросы связывания t1.col и t2.col, также возвращают + любые несвязанные записи в t1 (которые не совпадают с t2). RIGHT + связывание должно добавить несвязанные записи t2. FULL связывание + должно возвратить совпавшие записи плюс все несвязанные записи из 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) Как выполнять запросы, использующие несколько баз данных? + + Не существует способа создать запрос к базам данных отличным от + текущей. Поскольку PostgreSQL загружает системные каталоги специфичные + для базы данных, непонятно даже, как должен себя вести такой + межбазовый запрос. + + Разумеется, клиент может одновременно устанавливать соедиенения с + различными базами данных и таких образом объединять информацию из них. + _________________________________________________________________ + + Расширения PostgreSQL + + 5.1) Я написал функцию определяемую пользователем. Когда я запускаю ее в + psql, почему я получаю dump core? + + Проблема может заключаться в нескольких вещах. Попытайтесь сперва + протестировать вашу функцию в отдельной самостоятельной программе. + + 5.2) Как я могу внести некоторые классные новые типы и функции в + PostgreSQL? + + Отправьте ваши расширения в список рассылки pgsql-hackers и они по + возможности будут помещены в подкаталог contrib/. + + 5.3) Как мне написать C функцию, возвращающую запись? + + Это требует некоего шаманства так как авторы никогда не пробовали + делать это, хотя в приницпе это возможно. + + 5.4) Я изменил исходный файл. Почему после перекомпиляции я не вижу + изменений? + + Файлы Makefile не имеют правильных зависимостей для include файлов. Вы + должны выполнить make clean и затем make. Если вы используете GCC вы + можете использовать опцию --enable-depend в configure чтобы поручить + компилятору автоматически отслеживать зависимости. diff --git a/doc/src/FAQ/FAQ_russian.html b/doc/src/FAQ/FAQ_russian.html new file mode 100644 index 0000000000..a05321b167 --- /dev/null +++ b/doc/src/FAQ/FAQ_russian.html @@ -0,0 +1,1373 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD html 4.01 transitional//EN"> + +<HTML> + <!-- DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN" --> + <!-- HTML --> + + <HEAD> + <META name="generator" content="HTML Tidy, see www.w3.org"> + + <TITLE>PostgreSQL FAQ</TITLE> + </HEAD> + + <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" + alink="#0000ff"> + <H1>Ответы на часто задаваемые вопросы по PostgreSQL</H1> + + <P>Дата последнего обновления: Четверг 18 Февраля 17:56:04 EST 2002</P> + + <P>Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (<A href= + "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR> + </P> + <P>Перевел на русский: Виктор Вислобоков (<A href= + "mailto:pgman@candle.pha.pa.us">victor_v@permonline.ru</A>)<BR> + </P> + + <P>Самую свежую английскую версию документа можно найти на <A + href= + "http://www.postgresql.org/docs/faq-english.html">http://www.PostgreSQL.org/docs/faq-english.html</A>.</P> + + <P>Ответы на вопросы специфичные для конкретных платформ можно найти на <A href= + "http://www.postgresql.org/users-lounge/docs/faq.html">http://www.PostgreSQL.org/users-lounge/docs/faq.html</A>.</P> + <HR> + + <H2 align="center">Общие вопросы</H2> + <A href="#1.1">1.1</A>) Что такое PostgreSQL? Как произносится это + название?<BR> + <A href="#1.2">1.2</A>) Каковы авторские права на PostgreSQL?<BR> + <A href="#1.3">1.3</A>) На каких Unix платформах работает PostgreSQL?<BR> + <A href="#1.4">1.4</A>) Существуют ли версии портированные не на Unix системы?<BR> + <A href="#1.5">1.5</A>) Где можно взять PostgreSQL?<BR> + <A href="#1.6">1.6</A>) Где получить поддержку?<BR> + <A href="#1.7">1.7</A>) Какая последняя версия?<BR> + <A href="#1.8">1.8</A>) Какая документация имеется в наличии?<BR> + <A href="#1.9">1.9</A>) Как найти информацию об известных ошибках или отсутствующих + возможностях?<BR> + <A href="#1.10">1.10</A>) Как научиться <SMALL>SQL</SMALL>?<BR> + <A href="#1.11">1.11</A>) Решена ли в PostgreSQL проблема 2000-го года (Y2K)?<BR> + <A href="#1.12">1.12</A>) Как присоединится к команде разработчиков?<BR> + <A href="#1.13">1.13</A>) Как отравить сообщение об ошибке?<BR> + <A href="#1.14">1.14</A>) Как сравнивать PostgreSQL с другими + <SMALL>СУБД</SMALL>?<BR> + <A href="#1.15">1.15</A>) Как оказать финансовую помощь PostgreSQL?<BR> + + + <H2 align="center">Вопросы пользователей по клиентской части</H2> + <A href="#2.1">2.1</A>) Существуют ли <SMALL>ODBC</SMALL> драйвера для + PostgreSQL?<BR> + <A href="#2.2">2.2</A>) Какие инструменты существуют для использования + PostgreSQL через Web?<BR> + <A href="#2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс + пользователя? Генератор отчетов? Встроенный интерфейс для языка + запросов?<BR> + <A href="#2.4">2.4</A>) Какие языки могут взаимодействовать с + PostgreSQL?<BR> + + + <H2 align="center">Вопросы администрирования</H2> + <A href="#3.1">3.1</A>) Как мне установить PostgreSQL в место отличное + от <I>/usr/local/pgsql</I>?<BR> + <A href="#3.2">3.2</A>) Когда я запускаю <I>postmaster</I>, я получаю + сообщение <I>Bad System Call</I> или сообщение core dumped. Почему?<BR> + <A href="#3.3">3.3</A>) Когда я пытаюсь запустить <I>postmaster</I>, я + получаю ошибки <I>IpcMemoryCreate</I>. Почему?<BR> + <A href="#3.4">3.4</A>) Когда я пытаюсь запустить <I>postmaster</I>, я + получаю ошибки <I>IpcSemaphoreCreate</I>. Почему?<BR> + <A href="#3.5">3.5</A>) Как мне управлять соединениями с других + компьютеров?<BR> + <A href="#3.6">3.6</A>) Какие настройки мне нужно сделать для улучшения + производительности?<BR> + <A href="#3.7">3.7</A>) Какие возможности для отладки есть в наличии?<BR> + <A href="#3.8">3.8</A>) Почему я получаю сообщение <I>"Sorry, too many + clients"</I> когда пытаюсь подключиться к базе?<BR> + <A href="#3.9">3.9</A>) Что это за файлы <I>pg_sorttempNNN.NN</I> + в моем каталоге с базой данных?<BR> + + + <H2 align="center">Вопросы эксплуатации</H2> + <A href="#4.1">4.1</A>) В чем отличие между бинарным и нормальным + курсором?<BR> + <A href="#4.2">4.2</A>) Как выполнить <SMALL>SELECT</SMALL> только + для нескольких первых строчек запроса?<BR> + <A href="#4.3">4.3</A>) Как получить список таблиц или других + компонентов в <I>psql</I>?<BR> + <A href="#4.4">4.4</A>) Как удалить колонку из таблицы?<BR> + <A href="#4.5">4.5</A>) Каковы максимальные размеры для записей, + таблиц и базы данных?<BR> + <A href="#4.6">4.6</A>) Как много дискового пространства в базе данных + нужно для сохранения данных из обычного текстового файла?<BR> + <A href="#4.7">4.7</A>) Как мне убедиться, что нужные мне таблицы или индексы + определены в базе данных?<BR> + <A href="#4.8">4.8</A>) У меня медленно работают запросы или не + происходит использования индексов. Почему?<BR> + <A href="#4.9">4.9</A>) Как посмотреть на то, как оптимизатор выполняет + мой запрос?<BR> + <A href="#4.10">4.10</A>) Что такое R-tree индекс?<BR> + <A href="#4.11">4.11</A>) Что такое Genetic Query Optimizer?<BR> + <A href="#4.12">4.12</A>) Как мне выполнить поиск регулярного выражения + и поиск независимый от регистра букв поиск регулярного выражения? + Как мне использовать индекс для поиска независимого от регистра букв?<BR> + <A href="#4.13">4.13</A>) Как я могу определить, что значение поля равно + <SMALL>NULL</SMALL> в каком-либо запросе?<BR> + <A href="#4.14">4.14</A>) Каковы отличия между разными символьными + типами?<BR> + <A href="#4.15.1">4.15.1</A>) Как мне создать поле serial/с-авто-увеличением?<BR> + <A href="#4.15.2">4.15.2</A>) Как мне получить значение при вставке + <SMALL>SERIAL</SMALL>?<BR> + <A href="#4.15.3">4.15.3</A>) Не может ли получиться так, что + использование <I>currval()</I> и <I>nextval()</I> приведет к + зациклированию с другими пользователями?<BR> + <A href="#4.15.4">4.15.4</A>) Почему числа из моей последовательности + не используются снова при отмене транзакции? Почему создаются разрывы + при нумерации в колонке, где я использую последовательность/SERIAL?<BR> + <A href="#4.16">4.16</A>) Что такое <SMALL>OID</SMALL>? Что такое + <SMALL>TID</SMALL>?<BR> + <A href="#4.17">4.17</A>) Что означают некоторые термины используемые в + PostgreSQL?<BR> + <A href="#4.18">4.18</A>) Почему я получаю ошибку <I>"ERROR: Memory + exhausted in AllocSetAlloc()"</I>?<BR> + <A href="#4.19">4.19</A>) Как мне узнать, какая версия PostgreSQL + запущена?<BR> + <A href="#4.20">4.20</A>) Почему при работе с моим большим объектом + я получаю ошибку <I>"invalid large obj descriptor"</I>?<BR> + <A href="#4.21">4.21</A>) Как мне создать колонку которая по умолчанию + будет содержать текущее время?<BR> + <A href="#4.22">4.22</A>) Почему мои подзапросы, использующие + <CODE><SMALL>IN</SMALL></CODE> так медленно работаеют?<BR> + <A href="#4.23">4.23</A>) Как выполнить внешнее связывание?<BR> + <A href="#4.24">4.24</A>) Как выполнять запросы, использующие несколько + баз данных?<BR> + + + <H2 align="center">Расширения PostgreSQL</H2> + <A href="#5.1">5.1</A>) Я написал функцию определяемую пользователем. + Когда я запускаю ее в <I>psql</I>, почему я получаю dump core?<BR> + <A href="#5.2">5.2</A>) Как я могу внести некоторые классные новые + типы и функции в PostgreSQL?<BR> + <A href="#5.3">5.3</A>) Как мне написать C функцию, возвращающую + запись?<BR> + <A href="#5.4">5.4</A>) Я изменил исходный файл. Почему после + перекомпиляции я не вижу изменений?<BR> + + <HR> + + <H2 align="center">Общие вопросы</H2> + + <H4><A name="1.1">1.1</A>) Что такое PostgreSQL?</H4> + + <P>PostgreSQL произносится <I>Post-Gres-Q-L (Пост-Грес-Кью-Эл)</I>.</P> + + <P>PostgreSQL - это расширение СУБД POSTGRES, исследовательский + прототип нового поколения <SMALL>СУБД</SMALL>. + PostgreSQL одновременно сохраняет мощную модель данных и общирное + количество типов POSTGRES, и замещает язык запросов PostQuel на + расширенное подмножество <SMALL>SQL</SMALL>. PostgreSQL - это + свободное и полностью открытое программное обеспечение.</P> + + <P>Разработку PostgreSQL выполняет команда, + связанная через Internet, все участники которой подписаны на список + рассылки разработчиков. В настоящее время, их координатором + является Марк Форнай (Marc G. Fournier) (<A href= + "mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A>). (См. + ниже о том, как подключиться к разработке). Эта команда теперь + отвечает за всю разработку PostgreSQL.</P> + + <P>Авторами PostgreSQL 1.01 являются Эндрю Ю (Andrew Yu) и Джоли Чен + (Jolly Chen). Многие другие внесли свой вклад в перенос на другие + платформы, тестирование, отладку и расширение этого кода. Первоначальный + код Postgres, из которого появился PostgreSQL, был итогом усилий многих + академических студентов, неакадемических студентов и множества + разных программистов, работавших под руководством профессора + Майкла Стоунбрейкера (Michael Stonebraker) в Калифорнийском университете, + Беркли.</P> + + <P>Первоначальное имя, данное в Беркли, было Postgres. Когда + в 1995 году была добавлена функциональность <SMALL>SQL</SMALL>, + это имя было изменено на Postgres95. Но и это имя было изменено + в конце 1996 на PostgreSQL.</P> + + <H4><A name="1.2">1.2</A>) Каковы авторские права на PostgreSQL?</H4> + + <P>PostgreSQL попадает под действие следующего COPYRIGHT:</P> + + <P>Система Управления Базами Данных PostgreSQL</P> + + <P>Portion copyright (c) 1996-2002, PostgreSQL Global Development + Group Portions Copyright (c) 1994-6 Regents of the University of + California</P> + + <P>Предоставляются права на использование, копирование, изменение + и распространение данного программного обеспечения и его документации + для любых целей, бесплатно и без подписания какого-либо соглашения, + при условии что для каждой копии будут предоставлены данное выше + замечание об авторских правах, текущий параграф и два следующих + параграфа.</P> + + <P>КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ + ЗА ЛЮБЫЕ ПОВРЕЖДЕНИЯ, ВКЛЮЧАЯ ПОТЕРЮ ДОХОДА, НАНЕСЕННЫЕ ПРЯМЫМ + ИЛИ НЕПРЯМЫМ, СПЕЦИАЛЬНЫМ ИЛИ СЛУЧАЙНЫМ ИСПОЛЬЗОВАНИЕМ ДАННОГО + ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ЕГО ДОКУМЕНТАЦИИ, ДАЖЕ ЕСЛИ + КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ БЫЛ ИЗВЕЩЕН О ВОЗМОЖНОСТИ ТАКИХ + ПОВРЕЖДЕНИЙ.</P> + + <P>КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ СПЕЦИАЛЬНО ОТКАЗЫВАЗЫВАЕТСЯ ПРЕДОСТАВЛЯТЬ + ЛЮБЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ТОЛЬКО ЭТИМИ ГАРАНТИЯМИ: + НЕЯВНЫЕ ГАРАНТИИ ПРИГОДНОСТИ ТОВАРА ИЛИ ПРИГОДНОСТИ ДЛЯ ОТДЕЛЬНОЙ ЦЕЛИ. + ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ НА ОСНОВЕ ПРИЦИПА + "КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ + СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.</P> + + <P>Вышеизложенное является BSD лицензией, классической лицензией + программного обеспечения с открытым кодом. Эта лицензия не накладывает + ограничений на использование исходного кода. Нам нравится эта лицензия + и мы не собираемся её менять.</P> + + <H4><A name="1.3">1.3</A>) На каких Unix платформах работает PostgreSQL?</H4> + + <P>Обычно, PostgreSQL может работать на любой современной платформе + совместимой с Unix. В инструкции по установке, вы найдете список + тех платформ, на которых были проведены тестовые запуски PostgreSQL + к моменту выхода данной версии.</P> + + <H4><A name="1.4">1.4</A>) Существуют ли версии перенесенные не на Unix + системы?</H4> + + <P><STRONG>Клиент</STRONG></P> + + <P>Для запуска на платформах MS Windows возможна компиляция C + библиотеки <I>libpq</I>, psql и других интерфесов и бинарных файлов. + В этом случае, клиент запускается на MS Windows и связывается по + TCP/IP с сервером, запущенным на одной из поддерживаемых Unix + платформ. В дистрибутив включается файл <I>win31.mak</I> для того, + чтобы можно было провести сборку библиотеки <I>libpq</I> и + <I>psql</I> для Win32. PostgreSQL также работает через + <SMALL>ODBC</SMALL>.</P> + + <P><STRONG>Сервер</STRONG></P> + + <P>Сервер БД может быть запущен на Windows NT и Win2k, используя + библиотеку Cygwin, разработанную для переноса программного обеспечения Unix + в NT. Смотрите <I>pgsql/doc/FAQ_MSWIN</I> в дистрибутиве или <A href= + "http://www.postgresql.org/docs/faq-mswin.html">MS Windows FAQ</A> + на нашем сайте. Мы не планируем специально переносить PostgreSQL + на какую-либо платформу Microsoft.</P> + + <H4><A name="1.5">1.5</A>) Где можно взять PostgreSQL?</H4> + + <P>Например, воспользовавшись анонимным доступом на ftp сайт + PostgreSQL <A href= + "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>. + Список зеркал вы найдете на нашем основном сайте.</P> + + <H4><A name="1.6">1.6</A>) Где получить поддержку?</H4> + + <P>Основной список рассылки: <A href= + "mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>. + В нем можно обсуждать любые темы, касающиеся PostgreSQL. Чтобы + подписаться, отправьте письмо по электронной почте, в котором в + теле письма (не в теме) напишите следующие строки:</P> +<PRE> + subscribe + end +</PRE> + + <P>на адрес <A href= + "mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P> + + <P>Существует дайжест список. Чтобы подписаться на него, отправьте + письмо по электронной почте на адрес: <A href= + "mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A> + и в теле письма напишите строчки строчки:</P> +<PRE> + subscribe + end +</PRE> + Дайжесты отправляются подписчикам, когда в основном списке рассылки + накопится около 30 килобайт сообщений. + + <P>Доступен и список рассылки сообщений об ошибках. Чтобы подписаться на этот + список, отправьте по электронной почте письмо на адрес <A href= + "mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A> + и в теле письма напишите строчки строчки:</P> +<PRE> + subscribe + end +</PRE> + Также имеется список рассылки с дискуссиями разработчиков. Чтобы подписаться + на этот список, отправьте по электронной почте письмо на адрес + <A href= + "mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A> + и в теле письма напишите строчки строчки: +<PRE> + subscribe + end +</PRE> + + <P>Дополнительные списки рассылки и инфомацию о PostgreSQL можно найти + на домашней страничке PostgreSQL по адресу:</P> + + <BLOCKQUOTE> + <A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A> + </BLOCKQUOTE> + + <P>Еще существует IRC канал на EFNet, с названием + <I>#PostgreSQL</I>. Я использую для подключения к этому каналу команду Unix + <CODE>irc -c '#PostgreSQL' "$USER" irc.phoenix.net.</CODE></P> + + <P>Список коммерческой поддержки компаний доступен на + <A href= + "http://www.postgresql.org/users-lounge/commercial-support.html">http://www.postgresql.org/users-lounge/commercial-support.html</A>.</P> + + <H4><A name="1.7">1.7</A>) Какая последняя версия?</H4> + + <P>Последний выпуск PostgreSQL - это версия 7.2.</P> + + <P>Мы планируем выпускать новые версии каждые четыре месяца.</P> + + <H4><A name="1.8">1.8</A>) Какая документация имеется в наличии?</H4> + + <P>В дистрибутив включаются различные руководства, страницы + электронного руководства man и некоторые маленькие тестовые примеры. + Смотрите в каталог <I>/doc</I>. Вы также можете просматривать + документацию в Интернет по адресу <A href= + "http://www.PostgreSQL.org/users-lounge/docs/">http://www.PostgreSQL.org/users-lounge/docs/</A>.</P> + + <P>Существует две книги по PostgreSQL доступные по адресам <A href= + "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> + и <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>. + Список книг по PostgreSQL, которые можно купить доступен по адресу + <a href="http://www.postgresql.org/books/">http://www.postgresql.org/books/</a>. + Кроме того, по адресу <a href="http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</a> + вы можете найти коллекцию технических статей посвященных PostgreSQL.</p> + + + <P><I>psql</I> имеет несколько прекрасных команд \d для отображения + информации по типам, операторам, функциям, агрегатам и т.д.</P> + + <P>Наш сайт содержит еще больше информации.</P> + + <H4><A name="1.9">1.9</A>) Как найти информацию об известных ошибках + или отсутствующих возможностях?</H4> + + <P>PostgreSQL поддерживает расширенный подкласс <SMALL>SQL</SMALL>-92. + Смотрите наш список <A href="http://developer.postgresql.org/todo.php">TODO</A> + на предмет известных ошибок, отсутствующих особенностях и будущих + планов.</P> + + <H4><A name="1.10">1.10</A>) Как мне научиться <SMALL>SQL</SMALL>?</H4> + + <P>Книга по PostgreSQL на <A href= + "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> + научит <SMALL>SQL</SMALL>. Существует другая книга по PostgreSQL на + <A href="http://www.commandprompt.com/ppbook/"> + http://www.commandprompt.com/ppbook.</A> + Есть прекрасный учебник на <A href= + "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A> + на <A href= + "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM"> + http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A> + и на <A href= + "http://sqlcourse.com/">http://sqlcourse.com.</A></P> + + <P>Еще один учебник - это книга "Teach Yourself SQL in 21 Days, Second Edition" + (Освой самостоятельно SQL за 21 день, Вторая редакция) + на <A href= + "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P> + + <P>Многим из наших пользователей нравится книга + <I>The Practical SQL Handbook</I>, + Bowman, Judith S., et al., Addison-Wesley. Другим нравится <I>The + Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P> + + <H4><A name="1.11">1.11</A>) Решена ли в PostgreSQL проблема 2000-го года (Y2K)?</H4> + + <P>Да, мы легко манипулируем датами после 2000 года и перед 2000 годом.</P> + + <H4><A name="1.12">1.12</A>) Как присоединится к команде разработчиков?</H4> + + <P>Для начала, скачайте последнюю версию исходных текстов и прочтите + документацию разработчиков PostgreSQL на нашем сайте или в дистрибутиве. + Затем, подпишитесь на списки рассылки <I>pgsql-hackers</I> и + <I>pgsql-patches</I>. Далее, отправляйте исправления (patches) высокого + качества в список pgsql-patches.</P> + + <P>Существует ограниченный список людей, который имеют привелегию + вносить изменения в <SMALL>CVS</SMALL> архив PostgreSQL. Каждый + из этих людей в свое время отправил так много высококачественных исправлений, + что их было невозможно оставить без внимания и они были удостоены + превилегии вносить изменения, и мы уверены, что те исправления, которые + они внесут будут высокого качества.</P> + + <H4><A name="1.13">1.13</A>) Как отравить сообщение об ошибке??</H4> + + <P>Пожалуйста посетите страничку <A href= + "http://www.postgresql.org/bugs/bugs.php">PostgreSQL BugTool</A>, + на которой предоставлены детальные инструкции о том как отправить + сообщение об ошибке.</P> + + <P>Также не забудьте посмотреть на <A href= + "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A> + на предмет более свежих версий PostgreSQL или заплат.</P> + + <H4><A name="1.14">1.14</A>) Как сравнивать PostgreSQL с другими + <SMALL>СУБД</SMALL>?</H4> + + <P> + Существует несколько методов сравнения программного обеспечения: + возможности, производительность, надежность, поддержка и цена.</P> + + <DL> + <DT><B>Возможности</B></DT> + + <DD>PostgreSQL имеет большинство возможностей представленных + в больших коммерческих <SMALL>СУБД</SMALL>, такие как: транзакции, + подзапросы, триггеры, обзоры (views), внешний ключ ссылочной + целостности и разные блокировки. У нас есть некоторые возможности, + которых нет у них: типы, определяемые пользователем, механизм + наследования, правила и конкуретное многоверсионное управление + для работы с содержимым блокировок.<BR> + <BR> + </DD> + + <DT><B>Производительность</B></DT> + + <DD>PostgreSQL может работать в двух режима. В нормальном <I>fsync</I> + режиме, каждая завершенная транзакция сбрасывается на диск, + гарантируя, что если операционная система или питание рухнет + в следующие несколько секунд, все ваши данные безопасно + сохранятся на диске. В этом режиме, мы работаем медленее, + чем большинство коммерческих СУБД, отчасти потому, что некоторые + из них делают у себя по умолчанию такой консервативный сброс на диск. + В режиме <I>no-fsync</I>, мы обычно быстрее чем коммерческие СУБД, + но в этом режиме, падение операциооной системы может привести к + потере данных. Мы работаем над тем чтобы предоставить промежуточный + режим, который обеспечивал более высокую производительность, + чем <I>fsync</I> режим и позволял сохранить целостность данных + записанных в течении 30 секунд до падения операционной системы.<BR> + <BR> + В сравнении с MySQL или линейными СУБД, мы медленее при операциях + вставки/обновления, потому что мы управляем транзакциями. И разумеется, + MySQL не имеет каких-либо возможностей из перечисленых в секции + <I>Возможности</I>. Мы делаем упор на удобстве и + возможностях, но мы также продолжаем увеличивать производительность + путем профилирования и анализа исходных текстов. Существует + интересная страничка в Интернет, сравнивающая PostgreSQL и MySQL на <A href= + "http://openacs.org/why-not-mysql.html">http://openacs.org/why-not-mysql.html</A><BR> + + <BR> + Мы управляем каждым пользовательским соединением, создавая + Unix backend процесс. Backend процессы разделяют буферы данных и информацию + о блокировках. При наличии нескольких процессоров, несколько + backend процессов легко могут быть запущены на разных процессорах.<BR> + <BR> + </DD> + + <DT><B>Надежность</B></DT> + + <DD>Мы понимали, что наша <SMALL>СУБД</SMALL> должна быть надежной + или она ничего не будет стоить. Мы стараемся выпускать хорошо проверенный, + стабильный код, который содержит минимум ошибок. Каждый выпуск + проходит стадию бета-тестирования по крайней мере в течении одного + месяца и наша история выпусков показывает что мы можем предоставлять + стабильные, монолитные выпуски, которые готовы к продуктивному + использованию. Мы верим, что мы производим проверку не хуже, + чем у других СУБД.<BR> + <BR> + </DD> + + <DT><B>Поддержка</B></DT> + + <DD>Наш список рассылки представлен большой группой разработчиков + и пользователей, которые могут помочь решить любые возникшие + проблемы. В то же время, мы не гарантируем какие-либо исправления, + но и разработчики коммерческих <SMALL>СУБД</SMALL> не всегда делают + исправления. Прямой доступ к разработчикам, сообществу пользователей, + руководствам и исходным текстам часто делают поддержку PostgreSQL + превосходящей другие <SMALL>СУБД</SMALL>. Существует коммерческая + поддержка по результам возникших инцидентов, которая доступна для + тех кому она нужна. (Смотрите <A href="#1.6">Как получить поддержку?</A>.)<BR> + <BR> + </DD> + + <DT><B>Цена</B></DT> + + <DD>Наш продукт бесплатен как для коммерческого так, и не для + коммерческого использования. Вы можете добавлять свой код в наш + продукт без ограничений, за исключением тех, что описываются в + нашей лицензии стиля BSD, которая приведена выше.<BR> + <BR> + </DD> + </DL> + + <H4><A name="1.15">1.15</A>) Как оказать финансовую помощь + PostgreSQL?</H4> + + <P>PostgreSQL имеет одноранговую инфраструктуру с того самого времени + как мы начали разработку 6 лет назад. Мы должны благодарить за + это Марка Фоная (Marc Fournier), который создал эту инфраструктуру и + управляет ей на протяжении этих лет.</P> + + <P>Качественная инфраструктура очень важна для проектов с открытым + исходным кодом. Она предотвращает расколы, которые могут сильно + задержать поступательное движение проекта.</P> + + <P>Разумеется, эта инфраструктура не является дешевой. Существует + некоторое количество ежемесячных и одноразовых расходов, которые + требуют денег. Если вы или ваша компания имеет деньги, которые + можно передать в помощь нашим усилиям, пожалуйста посетите страничку + <A href= + "http://www.pgsql.com/pg_goodies">http://www.pgsql.com/pg_goodies</A> + и сделайте свой вклад.</P> + + <P>Хотя на страничке говорится о PostgreSQL, Inc, пункт + "contributions" предназначен исключительно для поддержки проекта + PostgreSQL и не передается какой-либо конкретной компании. + Если хотите, то можете это проверить, написав письмо на контактный адрес.</P> + <HR> + + <H2 align="center">Вопросы пользователей по клиентской части</H2> + + <H4><A name="2.1">2.1</A>) Существуют ли <SMALL>ODBC</SMALL> драйвера + для PostgreSQL?</H4> + + <P>Существует два <SMALL>ODBC</SMALL> драйвера, PsqlODBC + и OpenLink <SMALL>ODBC</SMALL>.</P> + + <P>PsqlODBC включается в дистрибутив. Больше информации об этом драйвере + можно найти на <A href= + "ftp://ftp.PostgreSQL.org/pub/odbc/">ftp://ftp.PostgreSQL.org/pub/odbc/</A>.</P> + + <P>OpenLink <SMALL>ODBC</SMALL> можно взять на <A href= + "http://www.openlinksw.com/">http://www.openlinksw.com</A>. Этот + драйвер работает с их стандартным клиентским программным обеспечением, + использующим <SMALL>ODBC</SMALL>, и таким образом, <SMALL>ODBC</SMALL> + драйверы для PostgreSQL доступны для каждой из поддерживаемых ими + платформ (Win, Mac, Unix, VMS).</P> + + <P>Возможно они будут продавать свой продукт тем кому нужна коммерческая + поддержка, но бесплатная версия всегда будет доступна. Пожалуйста, + направляйте вопросы на адрес <A href= + "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P> + + <P>Также посмотрите <A href= + "http://www.postgresql.org/devel-corner/docs/programmer/odbc.html">ODBC + раздел в руководстве программиста</A>.</P> + + <H4><A name="2.2">2.2</A>) Какие инструменты существуют для использования + PostgreSQL через Web?</H4> + + <P>Прекрасное введение во взаимодействие баз данных и Web можно найти на: + <A href="http://www.webreview.com">http://www.webreview.com</A></P> + + <P>Также загляните на <A href= + "http://www.phone.net/home/mwm/hotlist/">http://www.phone.net/home/mwm/hotlist/.</A></P> + + <P>Для интеграции с Web, одним из превосходных инструментов является PHP. + Домашняя станичка <A + href="http://www.php.net">http://www.php.net</A>.</P> + + <P>Для комплексных решений, многие пользуются Perl интерфейсом и CGI.pm.</P> + + <H4><A name="2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс + пользователя? Генератор отчетов? Встроенный интерфейс для языка + запросов?</H4> + + <P>У нас есть прекрасный горафический интерфейс, называемый + <I>pgaccess</I>, который является частью дистрибутива. <I>pgaccess</I> + также емеет генератор отчетов. Его страничка <A href= + "http://www.flex.ro/pgaccess">http://www.flex.ro/pgaccess</A></P> + + <P>Мы также включаем <I>ecpg</I>, который предоставляет встроенный + интерфейс к языку запросов SQL из C.</P> + + <H4><A name="2.4">2.4</A>) Какие языки могут взаимодействовать с + PostgreSQL?</H4> + + <P>Вот эти:</P> + + <UL> + <LI>C (libpq)</LI> + + <LI>C++ (libpq++)</LI> + + <LI>Embedded C (ecpg)</LI> + + <LI>Java (jdbc)</LI> + + <LI>Perl (perl5)</LI> + + <LI>ODBC (odbc)</LI> + + <LI>Python (PyGreSQL)</LI> + + <LI>TCL (libpgtcl)</LI> + + <LI>C Easy API (libpgeasy)</LI> + + <LI>Embedded <SMALL>HTML</SMALL> (<A href= + "http://www.php.net">PHP from http://www.php.net</A>)</LI> + </UL> + <HR> + + <H2 align="center">Вопросы администрирования</H2> + + <H4><A name="3.1">3.1</A>) Как мне установить PostgreSQL в место отличное + от <I>/usr/local/pgsql</I>?</H4> + + <P>Задайте опцию <I>--prefix</I> когда запускаете <I>configure</I>.</P> + + <H4><A name="3.2">3.2</A>) Когда я запускаю <I>postmaster</I>, я получаю + сообщение <I>Bad System Call</I> или сообщение core dumped. Почему?</H4> + + <P>Это может быть вызвано разными проблемами, но первое, что + нужно сделать - это убедиться в том, что в вашем ядре установлено + расширение System V. PostgreSQL требует, чтобы ядро поддерживало + разделяемую память и семафоры.</P> + + <H4><A name="3.3">3.3</A>) Когда я пытаюсь запустить <I>postmaster</I>, я + получаю ошибки <I>IpcMemoryCreate</I>. Почему?</H4> + + <P>Либо у вас в ядре неправильные настройки разделяемой памяти, либо + вашему ядру нужно большее количество доступной разделяемой памяти. + Те конкретные действия, которые вам нужно произвести зависят от + архитектуры вашей машины и от того как много буферов и backend + процессов вы настроили для <I>postmaster</I>. Для большинства систем, + с количеством буферов и процессов по умолчанию, необходимый минимум - + это около 1 мегабайта. Подробности о разделяемой памяти и семафорах + смотрите в <A href= + "http://www.postgresql.org/idocs/index.php?kernel-resources.html">Руководстве + администратора PostgreSQL</A>.</P> + + <H4><A name="3.4">3.4</A>) Когда я пытаюсь запустить <I>postmaster</I>, я + получаю ошибки <I>IpcSemaphoreCreate</I>. Почему?</H4> + + <P>Если это сообщение <I>IpcSemaphoreCreate: semget failed (No + space left on device)</I> то настройки вашего ядра таковы, что ему не + хватает семафоров. Postgres требует один семафор на потенциальный + backend процесс. Временным решением является запуск <I>postmaster</I> + с настройками на мешьшее количество backend процессов. Используйте + <I>-N</I> с значением меньшим чем 32, которое принято по умолчанию. + Более правильное решение - это увеличить значения <SMALL>SEMMNS</SMALL> + и <SMALL>SEMMNI</SMALL> в настрйках ядра.</P> + + <P>Неисправные семафоры также могут привести к падению СУБД во время + доступа к базе данных.</P> + + <P>Если вы получили какое-либо другое сообщение об ошибке, то вполне + возможно, что в вашем ядре вообще не настроена поддержка семафоров. + Смотрите подробности о разделяемой памяти и семафорах в Руководстве + Администратора PostgreSQL.</P> + + <H4><A name="3.5">3.5</A>) Как мне управлять соединениями с других + компьютеров?</H4> + + <P>По умолчанию, PostgreSQL разрешает только соединения на локальной + машине через сокеты домена Unix. Другие машины не смогут подключиться к + базе пока для <I>postmaster</I> не будет задан флаг <I>-i</I> + <B>и</B> пока не будет разрешена host-авторизация в файле + <I>$PGDATA/pg_hba.conf</I>. Эти действия делают возможными TCP/IP + соединения.</P> + + <H4><A name="3.6">3.6</A>) Какие настройки мне нужно сделать для улучшения + производительности?</H4> + + <P>Несомненно, индексы могут увеличить скорость выполнения запросов. Команда + <SMALL>EXPLAIN</SMALL> позволяет вам посмотреть как PostgreSQL + интерпретирует ваш запрос и какие индексы используются.</P> + + <P>Если вы выполняете много операторов <SMALL>INSERT</SMALL>, + рассмотрите возможность выполнять их в большой пачке, используя + команду <SMALL>COPY</SMALL>. Это значительно быстрее, чем отдельные + <SMALL>INSERT.</SMALL> Во-вторых, операторы вне блока транзакции + <SMALL>BEGIN WORK/COMMIT</SMALL> сами выполняют транзакцию. Подумайте + над выполнением нескольких операторов в одном блоке транзакции. + Это уменьшит количество транзакций. Также, задумайтесь над удалением + и пересозданием индексов, когда вы выполняете большие изменения + данных.</P> + + <P>Существует несколько опций настройки. Вы можете запретить + <I>fsync()</I> при старте <I>postmaster</I> с опцией <I>-o -F</I>. + Это предотвратит вызовы <I>fsync()</I>, которые приводят к сбросу + данных на диск после каждой транзакции.</P> + + <P>Вы можете также использовать для <I>postmaster</I> опцию <I>-B</I> + для увеличения количества буферов разделяемой памяти, которая + используется backend процессами. Если вы сделаете значение этого параметра + слишком большим, то <I>postmaster</I> может не запустится потому что + вы исчерпаете ограничение ядра на объем разделяемой памяти. Каждый + буфер имеет размер в 8 килобайт и по умолчанию выделяется 64 буфера.</P> + + <P>Вы можете также использовать backend опцию <I>-S</I> для увеличения + максимального количества памяти, которое используется backend процессом + для временных сортировок. Значение для опции <I>-S</I> задается в + килобайтах и по умолчанию равно 512 (т.е. 512K).</P> + + <P>Вы также можете использовать команду <SMALL>CLUSTER</SMALL> для + группировки данных в таблицах на совпадающий индекс. Подробности смотрите + на странице руководства по команде <SMALL>CLUSTER</SMALL>.</P> + + <H4><A name="3.7">3.7</A>) Какие возможности для отладки есть в + наличии?</H4> + + <P>PostgreSQL имеет несколько возможностей, позволяющие получить + информацию о состоянии, которая может быть использована в отладочных + целях.</P> + + <P>Во-первых, при запуске <I>configure</I> с опцией --enable-cassert, + многие вызовы <I>assert()</I> позволяют отслеживать работу backend + процесса и остановку программы при возникновении каких-либо + неожиданностей.</P> + + <P>И <I>postmaster</I>, и <I>postgres</I> имеют несколько отладочных + опций. Во-первых, при запуске <I>postmaster</I>, убедитесь, что + стандартный вывод и вывод ошибок осуществляются в файл журнала:</P> +<PRE> + cd /usr/local/pgsql + ./bin/postmaster >server.log 2>&1 & +</PRE> + + <P>Это приведет к появлению файла server.log в главном каталоге + PostgreSQL. Этот файл содержит полезную информацию о проблемах или + ошибках, возникших на сервере. <I>Postmaster</I> имеет опцию <I>-d</I>, + которая позволяет получать при протоколировании более детальную + инфрмацию. Для опции <I>-d</I> указывается число, которое задает уровень + отладки. Будьте осторожны, так как высокий уровень отладки приводит + к генерации файлов журнала большого размера.</P> + + <P>Если <I>postmaster</I> не запущен, вы можете запустить + <I>postgres</I> backend из командной строки и ввести ваш оператор + <SMALL>SQL</SMALL> напрямую. Это рекомендуется <B>только</B> для + целей отладки. Заметим, что в этом режиме, запрос завершается символом + новой строки, а не точкой с запятой. Если вы производили компиляцию + с отладочными символоами, вы можете использовать любой отладчик, чтобы + посмотреть, что случилось. Поскольку backend запускается не из + <I>postmaster</I>, он не запускается в идентичном окружении и значит + проблемы итераций блокировок/backend не могут быть воспроизведены.</P> + + <P>Если <I>postmaster</I> запущен, запустите <I>psql</I> в одном + окне, затем найдите <SMALL>PID</SMALL> процесса <I>postgres</I>, + используемый <I>psql</I>. Используйте отдадчик для подключения к + <I>postgres</I> <SMALL>PID.</SMALL> Вы можете установить точки + прерывания в отладчике и запустить запрос из <I>psql</I>. Если + вы производите отладку запуска <I>postgres</I>, вы можете установить + PGOPTIONS="-W n", и затем запустить <I>psql</I>. Эта опция приводит + к задержке процесса запуска на <I>n</I> секунд, в течение которых + вы можете подключить к процессу отладчик, установить любые точки + прерывания и продолжить запуск.</P> + + <P>Программа <I>postgres</I> имеет опции <I>-s, -A</I>, и <I>-t</I> + которые могут быть очень полезными для отладки и измерения + производительности.</P> + + <P>Вы также можете скомпилировать PostgreSQL с профилированием для + того, чтобы увидеть какие функции сколько времени выполняются. + Файлы профилирования backend'а находятся в каталоге + <I>pgsql/data/base/dbname</I>. Файл профилирования клиента + будет помещен в текущий каталог клиента.</P> + + <H4><A name="3.8">3.8</A>) Почему я получаю сообщение <I>"Sorry, too + many clients"</I> когда пытаюсь подключиться к базе?</H4> + + <P>Вам нужно увеличить ограничение на количество конкуретных + backend процессов при запуске <I>postmaster</I>.</P> + + <P>По умолчанию установлен лимит на 32 процесса. Вы можете + увеличить этот лимит перезапустив <I>postmaster</I> с нужным + значением процессов, которое указывается в опции <I>-N</I> или + изменив файл <I>postgresql.conf</I>.</P> + + <P>Заметим, что если вы зададите в опции <I>-N</I> значение больше + 32, то вы также должны увеличить значение в опции <I>-B</I> которое + по умолчанию установлено в 64; Значение опции <I>-B</I> должно быть + по крайней мере вдвое больше значения опции <I>-N</I>, и возможно + ещё больше для лучшей производительности. Для большего количества + backend процессов, вам также неплохо было бы увеличить некоторые + параметры ядра Unix. Это такие параметры, как максимальное количество + блоков разделяемой памяти, <SMALL>SHMMAX;</SMALL> максимальное количество + семафоров, <SMALL>SEMMNS</SMALL> и <SMALL>SEMMNI;</SMALL> максимальное + количество процессов, <SMALL>NPROC;</SMALL> максимальное количество + процессов на пользователя, <SMALL>MAXUPRC;</SMALL> и максимальное + количество открытых файлов, <SMALL>NFILE</SMALL> и <SMALL>NINODE.</SMALL> + Причина создания ограничения на количество backend процессов как + раз и состоит в том, чтобы вашей системе хватило ресурсов.</P> + + <P>В PostgreSQL до версии 6.5, максимальное количество backend процессов + было 64, и изменение этого количества требовало перекомпиляции после + установки константы MaxBackendId в <I>include/storage/sinvaladt.h</I>.</P> + + <H4><A name="3.9">3.9</A>) Что это за файлы <I>pg_sorttempNNN.NN</I> + в моем каталоге с базой данных?</H4> + + <P>Это временные файлы, генерируемые во время выполнения запроса. + Например, если для оператора <SMALL>ORDER BY</SMALL> должна быть + выполнена сортировка, которая требует больше места чем выделенно + для backend процесса в опции <I>-S</I>, то создается временный файл для + хранения дополнительных данных.</P> + + <P>Временные файлы должны удаляться автоматически, но этого может + не происходить, если backend процесс падает во время сортировки. + Если у вас не запущено ни одного backend процесса, то вы можете + спокойно удалить файлы pg_tempNNN.NN.</P> + <HR> + + <H2 align="center">Вопросы эксплуатации</H2> + + <H4><A name="4.1">4.1</A>) В чем отличие между бинарным и нормальным + курсором?</H4> + + <P>Смотрите описание на страницах руководства посвященным + <SMALL>DECLARE</SMALL>.</P> + + <H4><A name="4.2">4.2</A>) Как выполнить <SMALL>SELECT</SMALL> только + для нескольких первых строчек запроса?</H4> + + <P>Смотрите станицу руководства посвященную <SMALL>FETCH</SMALL> + или используйте <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P> + + <P>Даже если вы хотите получить только первые несколько записей, + будет выполнен весь запрос. Рассмотрим запрос, который имеет + <SMALL>ORDER BY.</SMALL> Если есть какой-либо индекс, который + совпадает с <SMALL>ORDER BY</SMALL>, PostgreSQL может + выдать только несколько первых запрошенных записей или может + выполнять запрос пока не будут выданы желаемые записи.</P> + + <H4><A name="4.3">4.3</A>) Как получить список таблиц или других + компонентов в <I>psql</I>?</H4> + + <P>Вы можете посмотреть исходный код <I>psql</I> в файле + <I>pgsql/src/bin/psql/describe.c</I>. Он содержит команды + <SMALL>SQL</SMALL> которые генерируются при вводе в psql команд, + начинающихся с обратной косой черты. Вы также моежете запустить + <I>psql</I> с опцией <I>-E</I> так, чтобы эта программа выдавала + запросы, которые она использует для выполнения заданных вами + команд.</P> + + <H4><A name="4.4">4.4</A>) Как удалить колонку из таблицы?</H4> + + <P>Мы не поддерживаем <SMALL>ALTER TABLE DROP COLUMN,</SMALL> но + можно сделать так:</P> +<PRE> + SELECT ... -- выборка всех колонок за исключением той, которую хотите удалить + INTO TABLE new_table + FROM old_table; + DROP TABLE old_table; + ALTER TABLE new_table RENAME TO old_table; +</PRE> + + <H4><A name="4.5">4.5</A>) Каковы максимальные размеры для записей, + таблиц и базы данных?</H4> + + <P>Существуют следующие ограничения:</P> +<PRE> + Максимальный размер базы? неограничен (существуют базы на 60 GB) + Максимальный размер таблицы? 16 TB + Максимальный размер записи? неограничен начиная с версии 7.1 + Максимальный размер поля? 1 GB начиная с версии 7.1 + Максимальное количество записей в таблице? неограничено + Максимальное количество колонок в таблице? 250-1600 в зависимости от типа + Максимальное количество индексов в таблице? неограничено +</PRE> + Разумеется, понятие "неограничено" на самом деле ограничивается + доступным дисковым пространиством и размерами памяти/своппинга. + Когда значения перечисленные выше неоправдано большие, может + пострадать производительность. + + <P>Максимальный размер таблицы в 16 TB не требует чтобы операционная + система поддерживала файлы больших размеров. Большие таблицы хранятся + как множество файлов размером в 1 GB, так что ограничения, которые + накладывает файловая система не важны.</P> + + <P>Максимальный размер таблицы и максимальное количество колонок + могут быть увеличены, если размер блока по умолчанию будет увеличен + до 32k.</P> + + <H4><A name="4.6">4.6</A>) Как много дискового пространства в базе данных + нужно для сохранения данных из обычного текстового файла?</H4> + + <P>СУБД PostgreSQL может потребоваться дискового пространства до 5 раз + больше для сохранения данных из простого текстового файла.</P> + + <P>В качестве примера, рассмотрим файл в 100,000 строк в каждой, из + которых целое число и текстовое описание. При этом длина текста, + в среднем, составляет 20 байт. Размер простого файла составит 2.8 MB. + Размер базы PostgreSQL, содержащей эти же данные составит приблизительно + 6.4 MB из которых:</P> +<PRE> + 36 байт: на каждый заголовок записи (приблизительно) + + 24 байта: одно поле с целочисленным типом и одно текстовое поле + + 4 байта: указатель на странице для всей записи + ---------------------------------------- + 64 байт на запись + + Размер страницы данных в PostgreSQL составляет 8192 байт (8 KB), так что: + + 8192 байт на страницу + ------------------- = 128 записей на страницу БД (с округлением) + 64 байт на запись + + 100000 строк данных + -------------------- = 782 страницы в БД + 128 записей на страницу + +782 страницы БД * 8192 байт на страницу = 6,406,144 байт (6.4 MB) +</PRE> + + <P>Индексы не требуют так много, но поскольку они создаются для + большого количества данных, они также могут быть велики.</P> + + <H4><A name="4.7">4.7</A>) Как мне убедиться, что нужные мне таблицы или индексы + определены в базе данных?</H4> + + <P><I>psql</I> имеет несколько команд, начинающихся с обратной косой + черты, для того чтобы просматривать такую информацию. Используйте + \? для того, чтобы увидеть эти команды.</P> + + <P>Также смотрите файл <I>pgsql/src/tutorial/syscat.source</I>. В нем + представлены многие операторы <SMALL>SELECT</SMALL> которые нужны + для получения информации из системных таблиц базы данных.</P> + + <H4><A name="4.8">4.8</A>) У меня медленно работают запросы или не + происходит использования индексов. Почему?</H4> + + <P>PostgreSQL не управляет статистикой автоматически. Для обновления + статистики должен быть запущен оператор V<SMALL>ACUUM</SMALL>. + После того, как статистика обновилась, оптимизатор узнает о том как + много записей в таблице и если он должен использовать индексы, то + он может принимать лучшие решения. Заметим, что оптимизатор не использует + индексы в случае, когда таблица маленькая, потому что простой + последовательный перебор будет быстрее.</P> + + <P>Для специфической статистики по колонкам, используйте <SMALL>VACUUM + ANALYZE.</SMALL> V<SMALL>ACUUM ANALYZE</SMALL> является важным для + комплексных запросов множественного связывания, так как оптимизатор + может оценить количество записей, возвращаемых от каждой таблицы и + выбрать правильный порядок связывания. Backend не осуществляет + для себя отслеживание статистики по колонкам, так что для сбора + статистики нужно периодически запускать <SMALL>VACUUM ANALYZE</SMALL>.</P> + + <P>Обычно индексы не используются для <SMALL>ORDER BY</SMALL> или + связываний. Последовательный перебор через явную сортировку будет + быстрее, чем поиск по индексам всех записей в большой таблице, + потому что доступ к диску с использованием рандомизации очень + медленен.</P> + + <P>Когда используются операции с шаблонами, например <SMALL>LIKE</SMALL> + или <I>~</I>, индексы могут быть использованы только если начало + строки-шаблона для поиска, соответствует началу искомой строки. + Так что для того, чтобы использовать индексы, строка шаблона в + <SMALL>LIKE</SMALL> не должна начинаться на <I>%</I>, а в <I>~</I> + (поиск регулярного выражения) должна начинаться с <I>^</I>.</P> + + <H4><A name="4.9">4.9</A>) Как посмотреть на то, как оптимизатор выполняет + мой запрос?</H4> + + <P>Смотрите страницу руководства посвященную <SMALL>EXPLAIN</SMALL>.</P> + + <H4><A name="4.10">4.10</A>) Что такое R-tree индекс?</H4> + + <P>R-tree индекс используется для индексирования пространственных данных. + Индекс хэша не может управлять поисками диапазона. B-tree индекс + управляет только поисками диапазона в одном измерении. R-tree индекс + может управлять многоразмерными данными. Например, если R-tree индекс + может быть встроен в атрибут типа <I>point</I>, то система может + более эффективно ответить на запрос типа "выбрать все точки внутри + заданного четырехугольника."</P> + + <P>Канонический источник, описывающий первоначальное создание R-tree + это:</P> + + <P>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.</P> + + <P>Вы можете найти этот документ в книге Stonebraker'а "Readings in + Database Systems".</P> + + <P>Встроеннные R-tree могут управлять полигонами и боксами. В теории, + R-tree могут быть расширены для управления большим количеством + измерений. На практике, расширение R-tree требует некоторых усилий и + у нас, в данный момент, нет какой-либо документации о том, как это + сделать.</P> + + <H4><A name="4.11">4.11</A>) Что такое Genetic Query + Optimizer?</H4> + + <P>Модуль <SMALL>GEQO</SMALL> производит быструю оптимизацию запроса, + когда происходит связывание многих таблиц через Genetic Algorithm (GA). + Это позволяет управлять большими запросами на связывание через + неистощающий поиск.</P> + + <H4><A name="4.12">4.12</A>) Как мне выполнить поиск регулярного выражения + и поиск независимый от регистра букв поиск регулярного выражения? + Как мне использовать индекс для поиска независимого от регистра букв?</H4> + + <P>Оператор <I>~</I> производит поиск регулярного выражения, а оператор + <I>~*</I> производит независимый от регистра букв поиск регулярного + выражения. Независимый от регистра вариант <SMALL>LIKE</SMALL> называется + <SMALL>ILIKE</SMALL> в PostgreSQL начиная с версии 7.1.</P> + + <P>Независимое от регистра сравнение обычно выражается так:</P> +<PRE> + SELECT * + FROM tab + WHERE lower(col) = 'abc' + +</PRE> + Эта конструкция не будет использовать стандартный индекс. Однако, если + вы создадите функциональный индекс, он будет использован: +<PRE> + CREATE INDEX tabindex on tab (lower(col)); + +</PRE> + + <H4><A name="4.13">4.13</A>) Как я могу определить, что значение поля + равно <SMALL>NULL</SMALL> в каком-либо запросе?</H4> + + <P>Вы просто сравниваете значение с <SMALL>IS NULL</SMALL> и + <SMALL>IS NOT NULL</SMALL>.</P> + + <H4><A name="4.14">4.14</A>) Каковы отличия между разными символьными + типами?</H4> +<PRE> +Тип Внутреннее имя Замечания +-------------------------------------------------- +"char" char 1 символ +CHAR(#) bpchar заполняется пустотой до фиксированной длины +VARCHAR(#) varchar размер задает максимальную длину, нет заполнения +TEXT text нет задаваемого верхнего ограничения или длины +BYTEA bytea массив байт переменной длины (можно использовать null-байт без опаски) +</PRE> + + <P>Внутреннее имя вы можете увидеть, когда смотрите системные каталоги + и в некоторых сообщениях об ошибках.</P> + + <P>Последние четыре типа являются "varlena" типами (т.е., первые + четыре байта на диске являются длинной, за которой следуют данные). + Таким образом, фактически используемое пространство больше, чем + обозначенный размер. Однако, эти типы данных также поддаются сжатию + или могут быть сохранены не в строком виде через <SMALL>TOAST</SMALL>, + так что занимаемое дисковое пространство может также быть и меньше, + чем ожидалось.</P> + + <P><SMALL>CHAR()</SMALL> - это лучшее решение для хранения строк, которые + обычно имеют одинаковую длину. <SMALL>VARCHAR()</SMALL> - это лучшее + решение, когда нужно хранить строки переменной длины, но не превышающие + определенного размера. <SMALL>TEXT</SMALL> - это лучшее решение для строк + неограниченной длины, с максимально допустимой длиной в 1 гигабайт. + <SMALL>BYTEA</SMALL> для хранения бинарных данных, значения которых + могут включать <SMALL>NULL</SMALL> байты.</P> + + <H4><A name="4.15.1">4.15.1</A>) Как мне создать поле + serial/с-авто-увеличением?</H4> + + <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 + ); + CREATE UNIQUE INDEX person_id_key ON person ( id ); +</PRE> + Смотрите подробности о последовательностях на странице руководства + посвященной <I>create_sequence</I>. Вы также можете использовать + каждое поле <I>OID</I> в записи как уникальное значение. Однако, + если вам нужен дамп и перезагрузка базы данных, вам необходимо + использовать команду <I>pg_dump</I> с опцией <I>-o</I> или опцию + <SMALL>COPY WITH OIDS</SMALL> для сохранения значений поля + <SMALL>OID</SMALL>. + + <H4><A name="4.15.2">4.15.2</A>) Как мне получить значение при вставке + <SMALL>SERIAL</SMALL>?</H4> + + <P>Один из способов состоит в получении следующего значения + <SMALL>SERIAL</SMALL> из объекта sequence с помощью функции + <I>nextval()</I> <I>перед</I> вставкой и затем вставлять это значение + явно. Используйте таблицу-пример в <A href="#4.15.1">4.15.1</A>, чтобы + увидеть как это делается в Perl:</P> +<PRE> + new_id = output of "SELECT nextval('person_id_seq')" + INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal'); +</PRE> + Затем вы должны также сохранить новое значение в переменной + <CODE>new_id</CODE> для его использования в других запросах (например + таких как внешний ключ для таблицы <CODE>person</CODE>). Заметим, + что имя автоматически созданного объекта <SMALL>SEQUENCE</SMALL> + будет <<I>table</I>>_<<I>serialcolumn</I>>_<I>seq</I>, + где <I>table</I> и <I>serialcolumn</I> являются соответственно + именами вашей таблицы и вашей колонки <SMALL>SERIAL</SMALL>. + + <P>В качестве альтернативы, вы можете получить назначенное значение + <SMALL>SERIAL</SMALL> с помощью функции <I>currval</I>() + <I>после</I> проведения обычной операции вставки, например</P> +<PRE> + INSERT INTO person (name) VALUES ('Blaise Pascal'); + new_id = output of "SELECT currval('person_id_seq')"; +</PRE> + И наконец, вы можете использовать значение + <A href="#4.16"><SMALL>OID</SMALL></A>, возращаемое из опертора + <SMALL>INSERT</SMALL> чтобы увидеть значение по умолчанию, что + предположительно является наименее переносимым на другие платформы + решением. В Perl, используя DBI с модулеи Edmund Mergl'я DBD::Pg, + значение oid становится доступным через <I>$sth->{pg_oid_status}</I> + после <I>$sth->execute()</I>. + + <H4><A name="4.15.3">4.15.3</A>) Не может ли получиться так, что + использование <I>currval()</I> и <I>nextval()</I> приведет к + зациклированию с другими пользователями?</H4> + + <P>Нет. Currval() возвращает текущее значение, назначенное вашем + backend'ом, а не другими пользователями.</P> + + <H4><A name="4.15.4">4.15.4</A>) Почему числа из моей последовательности + не используются снова при отмене транзакции? Почему создаются разрывы + при нумерации в колонке, где я использую последовательность/SERIAL?</H4> + + <P>Для реализации конкуретности, значения последовательностей, при + необходимости выдаются во время запуска транзакций и не блокируются + до полного выполнения транзакций. Это может вызывать разрывы в + нумерации при отмене транзакций</P> + + + <H4><A name="4.16">4.16</A>) Что такое <SMALL>OID</SMALL>? Что такое + <SMALL>TID</SMALL>?</H4> + + <P>Поля <SMALL>OID</SMALL> служат уникальными идетификаторами записей + в PostgreSQL. Каждая запись, которая создаётся в PostgreSQL получает + уникальный <SMALL>OID</SMALL>. Все значения <SMALL>OID</SMALL> + генерируемые во время <I>initdb</I> имеют значения меньше 16384 (из + <I>backend/access/transam.h</I>). Все созданные пользователем + <SMALL>OID</SMALL> имеют бОльшие значение. По умолчанию, все эти + <SMALL>OID</SMALL> являются уникальными не только внутри какой-либо + таблицы или базы данных, но и внутри всей СУБД PostgreSQL.</P> + + <P>PostgreSQL использует <SMALL>OID</SMALL> в своих внутренних системных + таблицах для связи записей и таблиц. Значения <SMALL>OID</SMALL> могут + быть использованы для идентификации заданных пользователем записей, + а также использоваться при связываниях. Рекомендуется использовать + тип колонки <SMALL>OID</SMALL> для хранения значений <SMALL>OID</SMALL> + Вы можете создать индекс на поле <SMALL>OID</SMALL> для более быстрого + доступа.</P> + + <P>Значения <SMALL>OID</SMALL> назначаются для всех новых записей из + центральной области, которые используются всеми всеми базами данных. + Если вы хотите изменить <SMALL>OID</SMALL> на какое-либо другое + значение или если вы хотите создать копию таблицы с такимиже + <SMALL>OID</SMALL>, то это можно сделать так:</P> +<PRE> + CREATE TABLE new_table(old_oid oid, mycol int); + SELECT old_oid, mycol INTO new FROM old; + COPY new TO '/tmp/pgtable'; + DELETE FROM new; + COPY new WITH OIDS FROM '/tmp/pgtable'; +<!-- + CREATE TABLE new_table (mycol int); + INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table; +--> +</PRE> + + <P><SMALL>OID</SMALL> хранится как 4-х байтное целое и не может превышать + значение в 4 миллиарда. Однако, еще никто не сообщил о том, что такое + произошло, но мы планируем до того как это случиться избавится от + этого ограничения.</P> + + <P>T<SMALL>ID</SMALL> используется для идентификации специальных + физических записей с блочными и offset значениями. T<SMALL>ID</SMALL> + изменяется после того как записи были изменены или перегружены. + <P>T<SMALL>ID</SMALL> используется индексными записями в качестве + указателя на физические записи.</P> + + <H4><A name="4.17">4.17</A>) Что означают некоторые термины используемые в + PostgreSQL?</H4> + + <P>Некоторый исходный код и старая документация используют + общеупотребительные термины. Вот некоторые из них:</P> + + <UL> + <LI>table, relation, class</LI> + + <LI>row, record, tuple</LI> + + <LI>column, field, attribute</LI> + + <LI>retrieve, select</LI> + + <LI>replace, update</LI> + + <LI>append, insert</LI> + + <LI><SMALL>OID</SMALL>, serial value</LI> + + <LI>portal, cursor</LI> + + <LI>range variable, table name, table alias</LI> + </UL> + + <P>Список общих терминов по базам данных можно найти на <A href= + "http://www.comptechnews.com/~reaster/dbdesign.html">http://www.comptechnews.com/~reaster/dbdesign.html</A></P> + + <H4><A name="4.18">4.18</A>) Почему я получаю ошибку <I>"ERROR: Memory + exhausted in AllocSetAlloc()"</I>?</H4> + + <P>Если у вас версия ниже 7.1, то обновление версии может решить эту + проблему. Также возможно, что у вас закончилась виртуальная память + или что ваше ядро имеет маленький лимит на определенные ресурсы. + Попытайтесь перед запуском <I>postmaster</I> выполнить следующие + команды:</P> +<PRE> + ulimit -d 262144 + limit datasize 256m +</PRE> + В зависимости от командного интерпретатора shell, только одна из данных + команд выполнится успешно, но она позволит вам установить больший + сегмент данных процесса и возможно решит проблему. Эта команда + изменяет параметры текущего процесса и всех его потомков, созданных + после её запуска. Если у вас возникла проблема с <SMALL>SQL</SMALL> + клиентом, потому что backend возвращает слишком большой объем данных, + попытайтесь выполнить эту команду перед запуском клиента. + + <H4><A name="4.19">4.19</A>) Как мне узнать, какая версия PostgreSQL + запущена?</H4> + + <P>Из <I>psql</I>, наберите <CODE>select version();</CODE></P> + + <H4><A name="4.20">4.20</A>) Почему при работе с моим большим объектом + я получаю ошибку <I>"invalid large obj descriptor"</I>?</H4> + + <P>Вам нужно при использовании большого объекта поместить в начале + <CODE>BEGIN WORK</CODE> и в конце <CODE>COMMIT</CODE>, а внутри + получившегося блока <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P> + + <P>В настоящий момент PostgreSQL требует, чтобы при закрытии большого + объекта происходило выполнение транзакции. Таким образом, первая же + попытка сделать что-либо с большим объектом, не соблюдая данного правила + приведет к сообщению <I>invalid large obj descriptor</I>, так как + код выполняющий работу над большим объектом (по крайней мере в + настоящий момент) будет генерировать сообщение об ошибке если вы не + используете транзакцию.</P> + + <P>Если вы используете такой интерфейс клиента как <SMALL>ODBC</SMALL>, + вам возможно понадобится установить <CODE>auto-commit off.</CODE></P> + + <H4><A name="4.21">4.21</A>) Как мне создать колонку которая по умолчанию + будет содержать текущее время?</H4> + + <P>Используйте <I>CURRENT_TIMESTAMP</I>:</P> +<PRE> +<CODE>CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); +</CODE> +</PRE> + + <H4><A name="4.22">4.22</A>) Почему мои подзапросы, использующие + <CODE><SMALL>IN</SMALL></CODE> так медленно работаеют?</H4> + + <P>В настоящий момент, мы связываем позапросы для внешних запросов + через последовательный перебор результата подзапроса для каждой + записи внешнего запроса. Попробуйте заменить <CODE>IN</CODE> на + <CODE>EXISTS</CODE>:</P> +<PRE> +<CODE>SELECT * + FROM tab + WHERE col1 IN (SELECT col2 FROM TAB2) +</CODE> +</PRE> + на: +<PRE> +<CODE>SELECT * + FROM tab + WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2) +</CODE> +</PRE> + Мы надеемся убрать это ограничение в будущем выпуске. + + <H4><A name="4.23">4.23</A>) Как мне выполнить внешнее связывание?</H4> + + <P>PostgreSQL начиная с версии 7.1 поддерживает внешнее связывание, + используя стандартный синтаксис SQL. Вот два примера:</P> +<PRE> + SELECT * + FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); +</PRE> + or +<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> + + <P>В предыдущих версиях, внешние связывания могли быть эмулированы + используя <SMALL>UNION</SMALL> и <SMALL>NOT IN</SMALL>. Например, + когда происходит связывание <I>tab1</I> и <I>tab2</I>, следующий + запрос выполняет <I>внешнее</I> связывание двух таблиц:<BR> + <BR> + </P> +<PRE> + 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 +</PRE> + + <H4><A name="4.24">4.24</A>) Как выполнять запросы, использующие несколько + баз данных?</H4> + + <P>Не существует способа создать запрос к базам данных отличным от текущей. + Поскольку PostgreSQL загружает системные каталоги специфичные для базы + данных, непонятно даже, как должен себя вести такой межбазовый запрос.</P> + + <P>Разумеется, клиент может одновременно устанавливать соедиенения с + различными базами данных и таких образом объединять информацию из них.</P> + <HR> + + <H2 align="center">Расширения PostgreSQL</H2> + + <H4><A name="5.1">5.1</A>) Я написал функцию определяемую пользователем. + Когда я запускаю ее в <I>psql</I>, почему я получаю dump core?</H4> + + <P>Проблема может заключаться в нескольких вещах. Попытайтесь сперва + протестировать вашу функцию в отдельной самостоятельной программе.</P> + + <H4><A name="5.2">5.2</A>) Как я могу внести некоторые классные новые + типы и функции в PostgreSQL?</H4> + + <P>Отправьте ваши расширения в список рассылки <I>pgsql-hackers</I> + и они по возможности будут помещены в подкаталог <I>contrib/</I>.</P> + + <H4><A name="5.3">5.3</A>) Как мне написать C функцию, возвращающую + запись?</H4> + + <P>Это требует некоего шаманства так как авторы никогда не пробовали + делать это, хотя в приницпе это возможно.</P> + + <H4><A name="5.4">5.4</A>) Я изменил исходный файл. Почему после + перекомпиляции я не вижу изменений?</H4> + + <P>Файлы <I>Makefile</I> не имеют правильных зависимостей для include + файлов. Вы должны выполнить <I>make clean</I> и затем <I>make</I>. + Если вы используете <SMALL>GCC</SMALL> вы можете использовать опцию + <I>--enable-depend</I> в <I>configure</I> чтобы поручить компилятору + автоматически отслеживать зависимости.</P> + </BODY> +</HTML> + |