From fac2ba5da350f1fc0a5aa44d6251b13c3d202849 Mon Sep 17 00:00:00 2001
From: Bruce Momjian Дата последнего обновления: Пятница 16 сентября 14:07:22 EDT 2005 Дата последнего обновления: Пятница 24 февраля 23:28:40 EDT 2006 Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (pgman@candle.pha.pa.us) PostgreSQL произносится Post-Gres-Q-L (Пост-Грес-Кью-Эл),
также иногда говорят просто Postgres. Вы можете услышать как
@@ -146,18 +146,30 @@
http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html
Если вы ищите какого-то особенного человека, центральный
+ комитет или управляющую компанию, то напрасно --- их нет.
+ У нас есть ядро комитета и разработчиков, работающих с CVS,
+ но эти группы служат больше для административных целей, чем
+ для управления. Проект напрямую функционирует с помощью
+ сообщества разработчиков и пользователей, к которому может
+ присоединится каждый. Всё что нужно -- это подписаться на
+ списки рассылки и участвовать в дискуссиях. (Подробности о
+ том как включиться в разработку PostgreSQL смотрите в
+
+ FAQ для разработчиков.) PostgreSQL распространяется по классической лицензии BSD. Эта
лицензия не содержит ограничений на то, как будет использоваться
исходный код. Нам нравится эта лицензия и у нас нет намерений её
- менять. Вот эта лицензия BSD, которую мы используем:Ответы на часто задаваемые вопросы по PostgreSQL
-
@@ -29,102 +29,102 @@
Общие вопросы
- 1.1) Что такое PostgreSQL? Как произносится это название?
- 1.2) Каковы авторские права на PostgreSQL?
- 1.3) На каких платформах работает PostgreSQL?
- 1.4) Где можно взять PostgreSQL?
- 1.5) Где получить поддержку?
- 1.6) Как мне сообщить об ошибке?
- 1.7) Какая версия последняя?
- 1.8) Какая документация имеется в наличии?
- 1.9) Как найти информацию об известных ошибках или отсутствующих
+ 1.1) Что такое PostgreSQL? Как произносится это название?
+ 1.2) Кто управляет PostgreSQL?
+ 1.3) Каковы авторские права на PostgreSQL?
+ 1.4) На каких платформах работает PostgreSQL?
+ 1.5) Где можно взять PostgreSQL?
+ 1.6) Какая версия последняя?
+ 1.7) Где получить поддержку?
+ 1.8) Как мне сообщить об ошибке?
+ 1.9) Как найти информацию об известных ошибках или отсутствующих
возможностях?
- 1.10) Как научиться SQL?
- 1.11) Как присоединится к команде разработчиков?
- 1.12) Как сравнивать PostgreSQL с другими
+ 1.10) Какая документация имеется в наличии?
+ 1.11) Как научиться SQL?
+ 1.12) Как присоединится к команде разработчиков?
+ 1.13) Как сравнить PostgreSQL с другими
СУБД?
- 1.13) Кто управляет PostgreSQL?
Вопросы пользователей по клиентской части
- 2.1) Какие интерфейсы есть для PostgreSQL?
- 2.2) Какие инструменты существуют для использования
+ 2.1) Какие интерфейсы есть для PostgreSQL?
+ 2.2) Какие инструменты существуют для использования
PostgreSQL через Web?
- 2.3) Есть ли у PostgreSQL графический интерфейс
+ 2.3) Есть ли у PostgreSQL графический интерфейс
пользователя?
Вопросы администрирования
- 3.1) Как мне установить PostgreSQL в место отличное
+ 3.1) Как мне установить PostgreSQL в место отличное
от /usr/local/pgsql?
- 3.2) Как мне управлять соединениями с других
+ 3.2) Как мне управлять соединениями от других
компьютеров?
- 3.3) Какие настройки мне нужно сделать для улучшения
+ 3.3) Какие настройки мне нужно сделать для улучшения
производительности?
- 3.4) Какие возможности для отладки есть в наличии?
- 3.5) Почему я получаю сообщение "Sorry, too many
+ 3.4) Какие возможности для отладки есть в наличии?
+ 3.5) Почему я получаю сообщение "Sorry, too many
clients" когда пытаюсь подключиться к базе?
- 3.6) Почему необходимо делать dump и restore при
+ 3.6) Почему необходимо делать dump и restore при
обновлении выпусков PostgreSQL?
- 3.7) Какое компьютерное "железо" я должен
+ 3.7) Какое компьютерное "железо" я должен
использовать?
Вопросы эксплуатации
- 4.1) Как выполнить SELECT только
+ 4.1) Как выполнить SELECT только
для нескольких первых строчек запроса? Для произвольной строки?
- 4.2) Как мне найти какие таблицы, индексы,
+ 4.2) Как мне найти какие таблицы, индексы,
базы данных и пользователи существуют? Как мне увидеть запросы,
которые использует psql для получения этой информации?
- 4.3) Как изменить тип данных колонки?
- 4.4) Каковы максимальные размеры для строк в таблице,
+ 4.3) Как изменить тип данных колонки?
+ 4.4) Каковы максимальные размеры для строк в таблице,
таблиц и базы данных?
- 4.5) Как много дискового пространства в базе данных
+ 4.5) Как много дискового пространства в базе данных
нужно для сохранения данных из обычного текстового файла?
- 4.6) Почему мои запросы работают медлено? Почему
+ 4.6) Почему мои запросы работают медлено? Почему
они не используют мои индексы?
- 4.7) Как посмотреть на то, как оптимизатор выполняет
+ 4.7) Как посмотреть на то, как оптимизатор выполняет
мой запрос?
- 4.8) Как мне выполнить поиск регулярного выражения
+ 4.8) Как мне выполнить поиск регулярного выражения
и поиск независимый от регистра букв поиск регулярного выражения?
Как мне использовать индекс для поиска независимого от регистра букв?
- 4.9) Как мне определить, что значение поля равно
+ 4.9) Как мне определить, что значение поля равно
NULL в каком-либо запросе? Могу я отсортировать поля
NULL или нет?
- 4.10) Каковы отличия между разными символьными
+ 4.10) Каковы отличия между разными символьными
типами?
- 4.11.1) Как мне создать поле serial/с-авто-увеличением?
- 4.11.2) Как мне получить значение при вставке
+ 4.11.1) Как мне создать поле serial/с-авто-увеличением?
+ 4.11.2) Как мне получить значение при вставке
SERIAL?
- 4.11.3) Не может ли получиться так, что
+ 4.11.3) Не может ли получиться так, что
использование currval() и nextval() приведет к
зациклированию с другими пользователями?
- 4.11.4) Почему числа из моей последовательности
+ 4.11.4) Почему числа из моей последовательности
не используются снова при отмене транзакции? Почему создаются разрывы
при нумерации в колонке, где я использую последовательность/SERIAL?
- 4.12) Что такое OID? Что такое
+ 4.12) Что такое OID? Что такое
CTID?
- 4.13) Почему я получаю ошибку "ERROR: Memory
+ 4.13) Почему я получаю ошибку "ERROR: Memory
exhausted in AllocSetAlloc()"?
- 4.14) Как мне узнать, какая версия PostgreSQL
+ 4.14) Как мне узнать, какая версия PostgreSQL
запущена?
- 4.15) Как мне создать колонку которая по умолчанию
+ 4.15) Как мне создать колонку которая по умолчанию
будет содержать текущее время?
- 4.16) Как выполнить внешнее связывание?
- 4.17) Как выполнять запросы, использующие несколько
+ 4.16) Как выполнить внешнее связывание?
+ 4.17) Как выполнять запросы, использующие несколько
баз данных?
- 4.18) Как мне вернуть из функции несколько строк таблицы?
- 4.19) Почему я получаю ошибку "relation with OID ####
+ 4.18) Как мне вернуть из функции несколько строк таблицы?
+ 4.19) Почему я получаю ошибку "relation with OID ####
не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?
- 4.20) Какие есть решения для репликации?
- 4.21) Почему имена таблицы и колонок не
+ 4.20) Какие есть решения для репликации?
+ 4.21) Почему имена таблицы и колонок не
распознаются в в моём запросе?
Общие вопросы
- 1.1) Что такое PostgreSQL? Как произносится это название?
+ 1.1) Что такое PostgreSQL? Как произносится это название?
1.2) Каковы авторские права на PostgreSQL?
+ 1.2) Кто управляет PostgreSQL?
+
+ 1.3) Каковы авторские права на PostgreSQL?
Система Управления Базами Данных PostgreSQL
-Portions copyright (c) 1996-2005, PostgreSQL Global Development +
Portions copyright (c) 1996-2006, PostgreSQL Global Development Group Portions Copyright (c) 1994-1996 Regents of the University of California
@@ -182,7 +194,7 @@ "КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ. -Обычно, PostgreSQL может работать на любой современной платформе совместимой с Unix. В инструкции по установке, вы найдете список @@ -203,13 +215,22 @@ http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F.
-Через браузер, используя http://www.postgresql.org/ftp/ и через ftp, используя ftp://ftp.PostgreSQL.org/pub/.
-Последний выпуск PostgreSQL - это версия 8.1.3
+ +Мы планируем выпускать новые старшие версии каждый год, + а младшие версии каждые несколько месяцев.
+ + +Сообщество PostgreSQL предоставляет помощь множеству пользователей через E-mail. Основной web-сайт для подписки на списки рассылки по @@ -231,26 +252,87 @@ http://techdocs.postgresql.org/companies.php.
-Посетите страничку со специальной формой отчёта об ошибке в PostgreSQL по адресу: - http://www.postgresql.org/support/submitbug.
- -Также проверьте наличие более свежей версии PostgreSQL на нашем + http://www.postgresql.org/support/submitbug. + Также проверьте наличие более свежей версии PostgreSQL на нашем FTP сайте - ftp://ftp.PostgreSQL.org/pub/. + ftp://ftp.PostgreSQL.org/pub/.
+ +На ошибки, уведомление о которых были сделаны через специальную + форму или отправленные в какой-либо список рассылки PostgreSQL, + обычно генерируется один из следующих ответов:
+PostgreSQL поддерживает расширенный подкласс SQL:2003. + Смотрите наш список TODO + на предмет известных ошибок, отсутствующих возможностей и будущих + планов.
+ +На запрос какой-либо возможности обычно приходят следующие ответы:
+PostgreSQL не использует какую-либо систему отслеживания ошибок, + потому что мы обнаружили, что использование прямого обращения по + электронной почте и обновляемого списка + TODO + является более эффективным. На практике, ошибки в программном + обеспечении сохраняются очень недолго, а ошибки, которые важны + большому количеству пользователей исправляются моментально. Есть + только одно место, где можно найти все изменения, улучшения и + исправления, сделанные в выпуске PostgreSQL - это журналы сообщений + системы контроля версий + CVS. + Даже замечания к выпускам не содержат все изменения, сделанные + в программном обеспечении.
-Последний выпуск PostgreSQL - это версия 8.0.3
- -Мы планируем выпускать новые старшие версии каждый год, - а младшие версии каждые несколько месяцев.
- -PostgreSQL содержит много документации, включая большое руководство, страницы электронного руководства man и некоторые маленькие тестовые @@ -274,15 +356,8 @@
Наш сайт содержит еще больше информации.
-PostgreSQL поддерживает расширенный подкласс SQL-92. - Смотрите наш список TODO - на предмет известных ошибок, отсутствующих возможностей и будущих - планов.
- -Во-первых, возьмите одну из книг по PostgreSQL, о которых говорилось выше. Еще один учебник - это книга "Teach Yourself SQL in 21 Days, @@ -301,13 +376,13 @@ и на http://sqlcourse.com.
-Смотрите FAQ для разработчиков.
-
@@ -359,7 +434,7 @@
пользователей, руководствам и исходным текстам часто делают поддержку
PostgreSQL превосходящей другие СУБД. Существует
коммерческая поддержка по результам возникших инцидентов, которая
- доступна для тех кому она нужна. (Смотрите Секцию 1.5.)
+ доступна для тех кому она нужна. (Смотрите Секцию 1.7.)
@@ -373,25 +448,12 @@
-
Если вы ищите какого-то особенного человека, центральный - комитет или управляющую компанию, то напрасно --- их нет. - У нас есть ядро комитета и разработчиков, работающих с CVS, - но эти группы служат больше для административных целей, чем - для управления. Проект напрямую функционирует с помощью - сообщества разработчиков и пользователей, к которому может - присоединится каждый. Всё что нужно -- это подписаться на - списки рассылки и участвовать в дискуссиях. (Подробности о - том как включиться в разработку PostgreSQL смотрите в - - FAQ для разработчиков.)
Установка PostgreSQL включает только C и встроенный (embedded) C интерфейсы. Все другие интерфейсы @@ -406,7 +468,7 @@ в секции Drivers/Interfaces, а также через поиск в Интернет.
-Прекрасное введение во взаимодействие баз данных и Web можно найти на: @@ -418,7 +480,7 @@
В сложных случаях, многие пользуются Perl и DBD::Pg с CGI.pm или mod_perl.
-Да, подробности смотрите в
@@ -428,12 +490,12 @@
Задайте опцию --prefix когда запускаете configure. По умолчанию, PostgreSQL разрешает только соединения на локальной
@@ -443,7 +505,7 @@
host-авторизация в файле $PGDATA/pg_hba.conf и перестартовать
сервер. Существует три главных области, которые потенциально могут
@@ -495,7 +557,7 @@
- Есть множество установок в настройках сервера, начинающихся
@@ -504,7 +566,7 @@
и измерения производительности. Вы достигли установленного по умолчанию ограничения на 100 сессий
@@ -514,7 +576,7 @@
и перестартовать postmaster. Разработчики PostgreSQL делают только небольшие изменения между
@@ -533,7 +595,7 @@
использовать pg_upgrade для этого выпуска. Поскольку "железо" персональных компьютеров является наиболее
@@ -549,7 +611,7 @@
Для получения только нескольких строк, если вы знаете их количество
@@ -567,7 +629,7 @@
- Вопросы администрирования
- 3.1) Как мне установить PostgreSQL в место отличное
+
3.1) Как мне установить PostgreSQL в место отличное
от /usr/local/pgsql?
3.2) Как мне управлять соединениями с других
+
3.2) Как мне управлять соединениями от других
компьютеров?
3.3) Какие настройки мне нужно сделать для улучшения
+
3.3) Какие настройки мне нужно сделать для улучшения
производительности?
3.4) Какие возможности для отладки есть в
+
3.4) Какие возможности для отладки есть в
наличии?
3.5) Почему я получаю сообщение "Sorry, too
+
3.5) Почему я получаю сообщение "Sorry, too
many clients" когда пытаюсь подключиться к базе?
3.6) Почему необходимо делать dump и restore при
+
3.6) Почему необходимо делать dump и restore при
обновлении выпусков PostgreSQL?
3.7) Какое компьютерное "железо" я должен
+
3.7) Какое компьютерное "железо" я должен
использовать?
Вопросы эксплуатации
- 4.1) Как выполнить SELECT только
+
4.1) Как выполнить SELECT только
для нескольких первых строчек запроса? Произвольной строки?
4.2) Как мне найти какие таблицы, индексы,
+
4.2) Как мне найти какие таблицы, индексы,
базы данных и пользователи существуют? Как мне увидеть запросы,
которые использует psql для получения этой информации?
@@ -592,7 +654,7 @@
для получения информации из системных таблиц базы данных.
В 8.0 и более поздних версиях, изменение типа колонки выполняется очень легко через ALTER TABLE ALTER COLUMN TYPE.
@@ -606,7 +668,7 @@ COMMIT; -Существуют следующие ограничения:
@@ -663,7 +725,7 @@ с помощью функционального индекса из хэша MD5 длинной колонки, а полнотекстовое индексирование позволяет искать слова внутри колонки. -СУБД PostgreSQL может потребоваться дискового пространства до 5 раз @@ -673,7 +735,7 @@ которых целое число и текстовое описание. При этом длина текста, в среднем, составляет 20 байт. Размер простого файла составит 2.8 MB. Размер базы PostgreSQL, содержащей эти же данные составит приблизительно - 6.4 MB из которых:
+ 5.6 MB из которых:28 байт: на каждый заголовок строки в таблице (приблизительно) + 24 байта: одно поле с целочисленным типом и одно текстовое поле @@ -701,7 +763,7 @@ занимают очень мало места. -4.6) Почему мои запросы работают медлено? Почему +
4.6) Почему мои запросы работают медлено? Почему они не используют мои индексы?
Индексы не используются для каждого запроса. Они @@ -726,15 +788,7 @@ сортировкой обычно быстрее, чем поиск по индексам в большой таблице. Однако, ORDER BY часто комбинируется с LIMIT и в этом случае индекс будет использоваться, поскольку при выполнении - будет возвращаться небольшая часть таблицы. Фактически MAX() и MIN() не - используют индексы, но индекс используется при построении запросов с - ORDER BY и LIMIT: -
- SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; -+ будет возвращаться небольшая часть таблицы.Если вам кажется, что оптимизатор некорректно выбирает последовательный перебор, используйте
SET enable_seqscan TO 'off'
и @@ -753,7 +807,7 @@
Смотрите страницу руководства посвященную EXPLAIN.
-@@ -882,7 +936,7 @@ которых могут включать NULL байты. Все типы описанные здесь, имеют сходные характеристики производительности. -
4.11.1) Как мне создать поле +
4.11.1) Как мне создать поле serial/с-авто-увеличением?
PostgreSQL поддерживает тип данных SERIAL. Он @@ -906,13 +960,13 @@ Смотрите подробности о последовательностях на странице руководства посвященной create_sequence. -
4.11.2) Как мне получить значение при вставке +
4.11.2) Как мне получить значение при вставке SERIAL?
Один из способов состоит в получении следующего значения SERIAL из объекта sequence с помощью функции nextval() перед вставкой и затем вставлять это значение - явно. Используйте таблицу-пример в 4.11.1, пример + явно. Используйте таблицу-пример в 4.11.1, пример в псевдоязыке покажет как это делается:
new_id = execute("SELECT nextval('person_id_seq')"); @@ -936,14 +990,14 @@-4.11.3) Не может ли получиться так, что +
4.11.3) Не может ли получиться так, что использование currval() и nextval() приведет к зациклированию с другими пользователями?
Нет. currval() возвращает текущее значение, назначенное вашей сессией, а не другими сессиями.
-4.11.4) Почему числа из моей последовательности +
4.11.4) Почему числа из моей последовательности не используются снова при отмене транзакции? Почему создаются разрывы при нумерации в колонке, где я использую последовательность/SERIAL?
@@ -953,7 +1007,7 @@ нумерации при отмене транзакций. -4.12) Что такое OID? Что такое +
4.12) Что такое OID? Что такое CTID?
Каждая, создаваемая в PostgreSQL табличная строка, получает уникальный @@ -978,7 +1032,7 @@ указателя на физические записи.
-4.13) Почему я получаю ошибку "ERROR: Memory +
4.13) Почему я получаю ошибку "ERROR: Memory exhausted in AllocSetAlloc()"?
Предположительно у вас закончилась виртуальная память @@ -998,13 +1052,13 @@ клиентом, потому что backend возвращает слишком большой объем данных, попытайтесь выполнить эту команду перед запуском клиента. -
4.14) Как мне узнать, какая версия PostgreSQL +
4.14) Как мне узнать, какая версия PostgreSQL запущена?
Из psql, наберите
-SELECT version();
4.15) Как мне создать колонку которая по умолчанию +
4.15) Как мне создать колонку которая по умолчанию будет содержать текущее время?
Используйте CURRENT_TIMESTAMP:
@@ -1012,7 +1066,7 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -4.16) Как мне выполнить внешнее связывание?
+4.16) Как мне выполнить внешнее связывание?
PostgreSQL поддерживает внешнее связывание, используя стандартный синтаксис SQL. Вот два примера:
@@ -1036,7 +1090,7 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); RIGHT и FULL связываниях. Обычные связывания называются INNER связывания. -4.17) Как выполнять запросы, использующие несколько +
4.17) Как выполнять запросы, использующие несколько баз данных?
Не существует способа создать запрос к базам данных отличным от текущей. @@ -1048,14 +1102,14 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); соедиенения с различными базами данных и таких образом объединять информацию из них.
-4.18) Как мне вернуть из функции несколько строк таблицы?
+4.18) Как мне вернуть из функции несколько строк таблицы?
Вы можете легко использовать функции, возвращающие список, http://techdocs.postgresql.org/guides/SetReturningFunctions.
-4.19) Почему я получаю ошибку "relation with OID #### +
4.19) Почему я получаю ошибку "relation with OID #### не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?
PL/PgSQL кэширует сценарии функции и один из негативных эффектов этого @@ -1068,7 +1122,7 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); перегенерироваться каждый раз.
-4.20) Какие есть решения для репликации?
+4.20) Какие есть решения для репликации?
Хотя "репликация" -- это единый термин, есть несколько разных технологий для выполнения репликаций с разными особенностями для каждой.
@@ -1088,7 +1142,7 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); популярным решением для такой репликации в PostgreSQL является Pgcluster. -4.21) Почему имена таблицы и колонок не +
4.21) Почему имена таблицы и колонок не распознаются в в моём запросе?
Наиболее часто это происходит из-за использования двойных кавычек в