From e1f55afe7d9dd2f7751fbc7f1c2d85adafbd2152 Mon Sep 17 00:00:00 2001
From: Bruce Momjian Дата последнего обновления: Воскресенье 18 июня 15:33:25 EDT 2006 Дата последнего обновления: Пятница 26 октября 14:59:45 EDT 2007 Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (pgman@candle.pha.pa.us) Самую свежую английскую версию документа можно найти на
- http://www.PostgreSQL.org/files/documentation/faqs/FAQ.html.Ответы на часто задаваемые вопросы по PostgreSQL
-
@@ -22,10 +22,10 @@
Ответы на вопросы специфичные для конкретных платформ можно найти на - http://www.PostgreSQL.org/docs/faq/.
+ http://www.postgresql.org/docs/faq/.PostgreSQL произносится Post-Gres-Q-L (Пост-Грес-Кью-Эл), - также иногда говорят просто Postgres. Вы можете услышать как - это произносится с помощью аудиофайла, который доступен в - формате MP3. + также говорят и просто Postgres, особенно при разговоре. + (Для особо любопытствующих как произносить "PostgreSQL", существует + аудио-файл).
PostgreSQL - это объектно-реляционная система управления базами @@ -141,8 +142,8 @@ по всему миру и связанная через Интернет. Разработка является общественным проектом и не управляется какой-либо компанией. Подробности смотрите в FAQ для разработчиков, - - http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html + + http://www.postgresql.org/docs/faqs.FAQ_DEV.html
Система Управления Базами Данных PostgreSQL
-Portions copyright (c) 1996-2006, PostgreSQL Global Development +
Portions copyright (c) 1996-2007, PostgreSQL Global Development Group Portions Copyright (c) 1994-1996 Regents of the University of California
@@ -201,7 +202,7 @@ к моменту выхода данной версии.PostgreSQL также работает на операционных системах Microsoft - Windows, основанных на NT, таких как Win2000, WinXP и Win2003. + Windows, основанных на NT, таких как Win2000 SP4, WinXP и Win2003. Пакет инсталлятора доступен по адресу http://pgfoundry.org/projects/pginstaller. Версии Windows, @@ -218,12 +219,12 @@
Через браузер, используя http://www.postgresql.org/ftp/ и через ftp, используя - ftp://ftp.PostgreSQL.org/pub/.
+ ftp://ftp.postgresql.org/pub/.Последний выпуск PostgreSQL - это версия 8.1.4
+Последний выпуск PostgreSQL - это версия 8.2.5
Мы планируем выпускать новые старшие версии каждый год, а младшие версии каждые несколько месяцев.
@@ -243,12 +244,13 @@ подключиться, вы можете использовать в Unix вызов программыirc -c '#postgresql' "$USER" irc.freenode.net
или
любой другой IRC клиент. На этом же сервере существуют каналы на
- испанском (#postgresql-es) и французском (#postgresqlfr)
- языках. Также существует канал по PostgreSQL на сервере EFNet.
+ испанском (#postgresql-es), французском (#postgresqlfr)
+ и бразильском (#postgresql-br) языках. Также существует канал
+ по PostgreSQL на сервере EFNet.
Список коммерческой поддержки компаний доступен на - - http://techdocs.postgresql.org/companies.php.
+ + http://www.postgresql.org/support/professional_support.На ошибки, уведомление о которых были сделаны через специальную форму или отправленные в какой-либо список рассылки PostgreSQL, @@ -337,7 +339,7 @@ страницы электронного руководства man и некоторые маленькие тестовые примеры. Смотрите в каталог /doc. Вы также можете просматривать документацию в Интернет по адресу - http://www.PostgreSQL.org/docs.
+ http://www.postgresql.org/docs.Существует две книги по PostgreSQL доступные по адресам http://www.PostgreSQL.org/docs/books/awbook.html @@ -345,9 +347,9 @@ Есть несколько книг по PostgreSQL, которые можно купить. Одну из наиболее популярных написал Корри Дуглас (Korry Douglas). Список обзоров по этим книгам доступен по адресу - http://techdocs.postgresql.org/techdocs/bookreviews.php. - Кроме того, по адресу http://techdocs.PostgreSQL.org/ - вы можете найти коллекцию технических статей посвященных PostgreSQL.
+ http://www.postgresql.org/docs/books/. + Кроме того, по адресу http://www.postgresql.org/docs/techdocs + вы можете найти коллекцию технических статей, посвещенных PostgreSQL.Клиент командной строки psql имеет несколько команд \d для отображения информации по типам, операторам, функциям, агрегатам и т.д. - @@ -359,11 +361,7 @@
Во-первых, возьмите одну из книг по PostgreSQL, о которых говорилось - выше. Еще один учебник - это книга "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.
@@ -453,7 +451,14 @@ +Изменения в сохранении дневного времени в США включены в PostgreSQL версии + 8.0.[4+] и во все следующие выпуски, например в 8.1. Изменения по Канаде + и Западной Австралии включены в 8.0.[10+], 8.1.[6+] и все следующие + выпуски. Выпуски PostgreSQL до 8.0 используют информацию о сохранении + дневного времени из базы данных временных зон в операционной системе.
Вы достигли установленного по умолчанию ограничения на 100 сессий - подключения к базе данных. Вам необходимо увеличить для - postmaster лимит на количество конкурентных backend процессов, +
Вы достигли установленного по умолчанию ограничения в 100 сессий + подключения к базе данных. Вам необходимо увеличить лимит на количество + конкурентных backend процессов для вашего сервера БД, изменив значение max_connections в файле postgresql.conf - и перестартовать postmaster.
+ и перестартовать сервер БД.Между подвыпусками, разработчики PostgreSQL делают только исправления - ошибок. Таким образом обновление с версии 7.4.8 до 7.4.9 не требует - выполнения dump и restore; достаточно остановить сервер, установить - обновлённые файлы СУБД и запустить сервер.
- -Все пользователи должны бы обновляться на наиболее свежую подверсию - как только она будет доступна. В то время как каждое обновление - подразумевает некоторый риск, подверсии PostgreSQL разрабытываются только - для исправления общих ошибок с минимальным риском. Таким образом, ваш - риск связан только с самим обновлением.
- - -При выходе очередного выпуска - (т.е. при обновлении например, с 7.3 на 7.4) часто меняется внутренний - формат системных таблиц и файлов данных. Эти изменения часто носят - сложный характер, так что мы не обслуживаем обратную - совместимость для файлов данных. В этих случаях для обновления базы - данных требуется выполнить dump/restore.
+См. информацию об обновлении в http://www.postgresql.org/support/versioning + и специальные инструкции в + http://www.postgresql.org/docs/current/static/install-upgrading.html.
- 28 байт: на каждый заголовок строки в таблице (приблизительно) + 24 байт: на каждый заголовок строки в таблице (приблизительно) + 24 байта: одно поле с целочисленным типом и одно текстовое поле + 4 байта: указатель на странице для всей табличной строки ---------------------------------------- @@ -756,14 +748,14 @@ Размер страницы данных в PostgreSQL составляет 8192 байт (8 KB), так что: 8192 байт на страницу - --------------------- = 146 строк в таблице на страницу БД (округлённо) - 56 байт на строку в таблице + --------------------- = 158 строк в таблице на страницу БД (округлённо) + 52 байт на строку в таблице 100000 строк данных - ----------------------- = 685 страниц в БД (округлённо) - 146 строк в таблице на страницу + ----------------------- = 633 страниц в БД (округлённо) + 158 строк в таблице на страницу - 685 страниц БД * 8192 байт на страницу = 5,611,520 байт (5.6 MB) + 633 страниц БД * 8192 байт на страницу = 5,185,536 байт (5.2 MB)
Индексы не требуют так много, но поскольку они создаются для
@@ -822,13 +814,10 @@
C, потому что не существует возможности узнать следующий наибольший
символ для не-C локали. Вы можете для таких случаев создать специальный
индекс text_pattern_ops
который работает только для
- LIKE индексирования.
+ LIKE индексирования. Для поиска слов также можно
+ использовать полнотекстовый индекс.
-
В выпусках до версии 8.0, индексы часто нельзя было использовать, - если типы данных точно не совпадали с индексными типами колонок. Это - особенно касалось int2, int8 и numeric индексов колонок.
-Вы просто сравниваете значение с IS NULL и IS NOT NULL, как здесь:
@@ -875,6 +864,13 @@ WHERE col IS NULL; +Чтобы соединить с возможными значениями NULL, используйте + COALESCE() как здесь:
++ SELECT COALESCE(col1, '') || COALESCE(col2, '') + FROM tab ++
Чтобы отсортировать данные по значению Автоматически созданная последовательность имеет имя вида
+ <таблица>_<колонка_serial>_seq, где
+ таблица и колонка_serial - это соответственно имена
+ таблицы и колонки с типом SERIAL.
Смотрите подробности о последовательностях на странице руководства
- посвященной create_sequence.
+ посвященной create_sequence. Один из способов состоит в получении следующего значения
- SERIAL из объекта sequence с помощью функции
- nextval() перед вставкой и затем вставлять это значение
- явно. Используйте таблицу-пример в 4.11.1, пример
- в псевдоязыке покажет как это делается: Простейший способ получить назначенное значение SERIAL
+ это использовать RETURNING. Используя для примера таблицу в 4.11.1, это может выглядеть так: В качестве альтернативы, вы можете получить назначенное значение
- SERIAL с помощью функции currval()
- после проведения обычной операции вставки, например Каждая, создаваемая в PostgreSQL табличная строка, получает уникальный
- индентификатор OID за исключением случая когда
- использовалось WITHOUT OIDS. OID - это
- автоматически назначаемое уникальное 4-х байтовое целое число.
+ Если таблица создана с WITH OIDS, то каждая строка
+ получает уникальный индентификатор OID.
+ OID - это автоматически назначаемое уникальное 4-х
+ байтовое целое число, которое уникально для всей установленной СУБД.
Однако, после того как его значение превысит 4 миллиарда, значения
OID начинают дублироваться. PostgreSQL использует
OID для связывания своих внутренних таблиц. Для уникальных значений в колонках таблицы пользователя, лучшим
+ Для уникального значения в строках таблицы пользователя, лучшим
способом является использование SERIAL вместо
OID, потому что последовательности SERIAL
уникальны только внутри таблицы и таким образом меньше подвержены
@@ -1047,7 +1033,7 @@
Предположительно у вас закончилась виртуальная память
или что ваше ядро имеет маленький лимит на определенные ресурсы.
- Попытайтесь перед запуском postmaster выполнить следующие
+ Попытайтесь перед запуском сервера БД выполнить следующие
команды: Вы можете легко использовать функции, возвращающие список,
-
- http://techdocs.postgresql.org/guides/SetReturningFunctions.4.11.2) Как мне получить значение при вставке
SERIAL?
-
- new_id = execute("SELECT nextval('person_id_seq')");
- execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
+ INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
- Затем вы должны также сохранить новое значение в переменной
- new_id
для его использования в других запросах (например
- таких как внешний ключ для таблицы person
). Заметим,
- что имя автоматически созданного объекта SEQUENCE
- будет <table>_<serialcolumn>_seq,
- где table и serialcolumn являются соответственно
- именами вашей таблицы и вашей колонки SERIAL.
-
-
- execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
- new_id = execute("SELECT currval('person_id_seq')");
-
+ Вы также можете вызвать nextval() и использовать это значение в
+ INSERT или вызвать currval() после
+ INSERT.
4.11.3) Не может ли получиться так, что
@@ -1020,15 +1006,15 @@
4.12) Что такое OID? Что такое
CTID?
-
ulimit -d 262144
@@ -1115,22 +1101,24 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
4.18) Как мне вернуть из функции несколько строк таблицы?
PL/PgSQL кэширует сценарии функции и один из негативных эффектов этого - состоит в том, что если функция PL/PgSQL обращается к временной таблице - и эта таблица позднее удаляется и пересоздается, а функция затем вызывается - снова, то ее вызов приведет к ошибке, потому что скэшированное содержимое - функции содержит указатель на старую временную таблицу. Чтобы решить эту - проблему, используйте EXECUTE для доступа к временным +
В PostgreSQL до версии 8.3, PL/PgSQL кэширует сценарии функции и один из + негативных эффектов этого состоит в том, что если функция PL/PgSQL обращается + к временной таблице и эта таблица позднее удаляется и пересоздается, а функция + затем вызывается снова, то ее вызов приведет к ошибке, потому что скэшированное + содержимое функции содержит указатель на старую временную таблицу. Чтобы решить + эту проблему, используйте EXECUTE для доступа к временным таблицам в PL/PgSQL. Использование этого оператора заставит запрос перегенерироваться каждый раз.
+В PostgreSQL 8.3 и позднее, этой проблемы нет.
+Репликация Multi-master позволяет выполнять запросы чтения/записи @@ -1150,15 +1138,15 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); также приводит к потере производительности, потому что необходима синхронизация изменений между несколькими серверами. Наиболее популярным решением для такой репликации в PostgreSQL является - Pgcluster. + PGcluster.
Наиболее часто это происходит из-за использования двойных кавычек в +
Наиболее часто имена нераспознаются из-за использования двойных кавычек в имени таблицы или колонки при создании таблицы. При использовании двойных кавычек, имя таблицы и колонки (которые называют идентификаторами) - сохраняются в + сохраняются в регистро-зависимом виде; это означает, что вы должны использовать двойные кавычки, когда указываете эти имена в запросе. Некоторые интерфейсы, такие как pgAdmin, во время создания таблицы добавляют