diff --git a/doc/src/FAQ/FAQ_russian.html b/doc/src/FAQ/FAQ_russian.html index 0666da595e..0f9841c437 100644 --- a/doc/src/FAQ/FAQ_russian.html +++ b/doc/src/FAQ/FAQ_russian.html @@ -12,7 +12,7 @@

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

-

Дата последнего обновления: Воскресенье 18 июня 15:33:25 EDT 2006

+

Дата последнего обновления: Пятница 26 октября 14:59:45 EDT 2007

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

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

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

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

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


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

@@ -44,7 +44,8 @@ 1.12) Как мне отправить исправление или присоединится к команде разработчиков?
1.13) Как сравнить PostgreSQL с другими СУБД?
- + 1.14) Будет ли PostgreSQL работать с последними изменениями, в разных страных, + касающимися дневного времени?

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

2.1) Какие интерфейсы есть для PostgreSQL?
@@ -87,9 +88,9 @@ 4.8) Как мне выполнить поиск регулярного выражения и поиск независимый от регистра букв поиск регулярного выражения? Как мне использовать индекс для поиска независимого от регистра букв?
- 4.9) Как мне определить, что значение поля равно - NULL в каком-либо запросе? Могу я отсортировать поля - NULL или нет?
+ 4.9) Как мне определить, что значение поля в каком-либо + запросе равно NULL? Как мне соединить возможные + NULL? Могу я сортировать поля NULL или нет?
4.10) Каковы отличия между разными символьными типами?
4.11.1) Как мне создать поле serial/с-авто-увеличением?
@@ -117,7 +118,7 @@ не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?
4.20) Какие есть решения для репликации?
4.21) Почему имена таблицы и колонок не - распознаются в в моём запросе?
+ распознаются в в моём запросе? Почему не сохраняются заглавные буквы?

@@ -126,9 +127,9 @@

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

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

1.2) Кто управляет PostgreSQL?

@@ -168,7 +169,7 @@

Система Управления Базами Данных 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/.

1.6) Какая версия наиболее свежая?

-

Последний выпуск 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.

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

@@ -259,7 +261,7 @@ http://www.postgresql.org/support/submitbug. Также проверьте наличие более свежей версии PostgreSQL на нашем FTP сайте - ftp://ftp.PostgreSQL.org/pub/.

+ ftp://ftp.postgresql.org/pub/.

На ошибки, уведомление о которых были сделаны через специальную форму или отправленные в какой-либо список рассылки 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 @@

1.11) Как мне научиться SQL?

Во-первых, возьмите одну из книг по 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 @@ +

1.14) Будет ли PostgreSQL работать с + последними изменениями, в разных страных, касающимися дневного времени?

+

Изменения в сохранении дневного времени в США включены в PostgreSQL версии + 8.0.[4+] и во все следующие выпуски, например в 8.1. Изменения по Канаде + и Западной Австралии включены в 8.0.[10+], 8.1.[6+] и все следующие + выпуски. Выпуски PostgreSQL до 8.0 используют информацию о сохранении + дневного времени из базы данных временных зон в операционной системе.


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

@@ -544,7 +549,7 @@
Некоторые установки в postgresql.conf влияют на производительность. Подробный полный список установок см. в - + Administration Guide/Server Run-time Environment/Run-time Configuration, а комментарии см. в http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html @@ -556,11 +561,12 @@
Выбор "железа" - аппаратного обеспечения
Влияние "железа" на производительность подробно описано в - - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html и - http://www.powerpostgresql.com/PerfList/. -

+ http://www.powerpostgresql.com/PerfList/ и + + http://momjian.us/main/writings/pgsql/hw_performance/index.html. +
+
@@ -576,33 +582,19 @@

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

-

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

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

+ и перестартовать сервер БД.

3.6) Как выполнить обновление PostgreSQL?

-

Между подвыпусками, разработчики 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.

3.7) Какое компьютерное "железо" я должен @@ -745,9 +737,9 @@ которых целое число и текстовое описание. При этом длина текста, в среднем, составляет 20 байт. Размер простого файла составит 2.8 MB. Размер базы PostgreSQL, содержащей эти же данные составит приблизительно - 5.6 MB из которых:

+ 5.2 MB из которых:

-    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 индексов колонок.

-

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

@@ -863,9 +852,9 @@ только в определённом регистре, используйте ограничение CHECK или проверку через триггер.

-

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

+

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

Вы просто сравниваете значение с IS NULL и IS NOT NULL, как здесь:

@@ -875,6 +864,13 @@ WHERE col IS NULL; +

Чтобы соединить с возможными значениями NULL, используйте + COALESCE() как здесь:

+
+   SELECT COALESCE(col1, '') || COALESCE(col2, '')
+   FROM tab
+
+

Чтобы отсортировать данные по значению используйте модификаторы IS NULL и IS NOT NULL в выражении ORDER BY. Когда они будут генерировать значения @@ -967,37 +963,27 @@ ); +

Автоматически созданная последовательность имеет имя вида + <таблица>_<колонка_serial>_seq, где + таблица и колонка_serial - это соответственно имена + таблицы и колонки с типом SERIAL. Смотрите подробности о последовательностях на странице руководства - посвященной create_sequence. + посвященной create_sequence.

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

-

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

+

Простейший способ получить назначенное значение SERIAL + это использовать RETURNING. Используя для примера таблицу в 4.11.1, это может выглядеть так:

+
-    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. - -

В качестве альтернативы, вы можете получить назначенное значение - SERIAL с помощью функции currval() - после проведения обычной операции вставки, например

-
-    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?

-

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

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

-

Для уникальных значений в колонках таблицы пользователя, лучшим +

Для уникального значения в строках таблицы пользователя, лучшим способом является использование SERIAL вместо OID, потому что последовательности SERIAL уникальны только внутри таблицы и таким образом меньше подвержены @@ -1047,7 +1033,7 @@

Предположительно у вас закончилась виртуальная память или что ваше ядро имеет маленький лимит на определенные ресурсы. - Попытайтесь перед запуском postmaster выполнить следующие + Попытайтесь перед запуском сервера БД выполнить следующие команды:

     ulimit -d 262144
@@ -1115,22 +1101,24 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
     

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

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

+ + http://www.postgresql.org/docs/techdocs.17.

4.19) Почему я получаю ошибку "relation with OID #### не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?

-

PL/PgSQL кэширует сценарии функции и один из негативных эффектов этого - состоит в том, что если функция PL/PgSQL обращается к временной таблице - и эта таблица позднее удаляется и пересоздается, а функция затем вызывается - снова, то ее вызов приведет к ошибке, потому что скэшированное содержимое - функции содержит указатель на старую временную таблицу. Чтобы решить эту - проблему, используйте EXECUTE для доступа к временным +

В PostgreSQL до версии 8.3, PL/PgSQL кэширует сценарии функции и один из + негативных эффектов этого состоит в том, что если функция PL/PgSQL обращается + к временной таблице и эта таблица позднее удаляется и пересоздается, а функция + затем вызывается снова, то ее вызов приведет к ошибке, потому что скэшированное + содержимое функции содержит указатель на старую временную таблицу. Чтобы решить + эту проблему, используйте EXECUTE для доступа к временным таблицам в PL/PgSQL. Использование этого оператора заставит запрос перегенерироваться каждый раз.

+

В PostgreSQL 8.3 и позднее, этой проблемы нет.

+

4.20) Какие есть решения для репликации?

@@ -1142,7 +1130,7 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); (slave) сервера могут производить только запросы чтения/SELECT. Наиболее популярным решением для репликации master-slave в PostgreSQL является - + Slony-I.

Репликация Multi-master позволяет выполнять запросы чтения/записи @@ -1150,15 +1138,15 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); также приводит к потере производительности, потому что необходима синхронизация изменений между несколькими серверами. Наиболее популярным решением для такой репликации в PostgreSQL является - Pgcluster. + PGcluster.

4.21) Почему имена таблицы и колонок не - распознаются в в моём запросе?

+ распознаются в в моём запросе? Почему не сохраняются заглавные буквы? -

Наиболее часто это происходит из-за использования двойных кавычек в +

Наиболее часто имена нераспознаются из-за использования двойных кавычек в имени таблицы или колонки при создании таблицы. При использовании двойных кавычек, имя таблицы и колонки (которые называют идентификаторами) - сохраняются в + сохраняются в регистро-зависимом виде; это означает, что вы должны использовать двойные кавычки, когда указываете эти имена в запросе. Некоторые интерфейсы, такие как pgAdmin, во время создания таблицы добавляют