From 49c320b19d34e0e8ee5229311631ef827982159f Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 11 Feb 2005 04:53:51 +0000 Subject: Update to Russian FAQ, HEAD and 8.0.X. --- doc/src/FAQ/FAQ_russian.html | 1127 +++++++++++++++--------------------------- 1 file changed, 389 insertions(+), 738 deletions(-) (limited to 'doc/src') diff --git a/doc/src/FAQ/FAQ_russian.html b/doc/src/FAQ/FAQ_russian.html index c065123f1ce..16f50832dd0 100644 --- a/doc/src/FAQ/FAQ_russian.html +++ b/doc/src/FAQ/FAQ_russian.html @@ -12,7 +12,7 @@
Дата последнего обновления: Среда 15 декабря 20:06:34 EST 2004
+Дата последнего обновления: Среда 2 февраля 12:44:03 EST 2005
Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (pgman@candle.pha.pa.us)
@@ -22,124 +22,101 @@
Самую свежую английскую версию документа можно найти на - http://www.PostgreSQL.org/docs/faqs/FAQ.html.
+ http://www.PostgreSQL.org/files/documentation/faqs/FAQ.html.Ответы на вопросы специфичные для конкретных платформ можно найти на - http://www.PostgreSQL.org/docs/index.html.
+ http://www.PostgreSQL.org/docs/faq/.IN
так медленно работаеют?PostgreSQL произносится Post-Gres-Q-L (Пост-Грес-Кью-Эл). - По адресу http://www.postgresql.org/postgresql.mp3 доступен звуковой - файл с примером как это нужно произносить.
- -PostgreSQL - это расширение СУБД POSTGRES (и поэтому иногда - говорят просто "Postgres"), исследовательский - прототип нового поколения СУБД. - PostgreSQL одновременно сохраняет мощную модель данных и общирное - количество типов POSTGRES, и замещает язык запросов PostQuel на - расширенное подмножество SQL. PostgreSQL - это - свободное и полностью открытое программное обеспечение.
- -Разработку PostgreSQL выполняет команда разработчиков, все участники - которой подписаны на список рассылки разработчиков. В настоящее время, - их координатором является Марк Фурнье (Marc G. Fournier) (scrappy@PostgreSQL.org). (См. - секцию 1.6 о том, как подключиться к разработке). - Эта команда теперь отвечает за всю разработку PostgreSQL. Данный - проект является общественным и не управляется какой-либо компанией. - Подробности смотрите в FAQ для разработчиков, - http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html -
+PostgreSQL произносится Post-Gres-Q-L (Пост-Грес-Кью-Эл), + также часто говорят просто Postgres.
-Авторами PostgreSQL 1.01 являются Эндрю Ю (Andrew Yu) и Джоли Чен - (Jolly Chen). Многие другие внесли свой вклад в перенос на другие - платформы, тестирование, отладку и расширение этого кода. Первоначальный - код Postgres, из которого появился PostgreSQL, был итогом усилий многих - академических студентов, неакадемических студентов и множества - разных программистов, работавших под руководством профессора - Майкла Стоунбрейкера (Michael Stonebraker) в Калифорнийском университете, - Беркли.
+PostgreSQL - это объектно-реляционная система управления базами + данных (СУБД), которая имеет традиционные возможности коммерческих + СУБД с расширениями, которые есть в СУБД + нового поколения. PostgreSQL - это свободное и полностью открытое + программное обеспечение.
-Первоначальное имя, данное в Беркли, было Postgres. Когда - в 1995 году была добавлена функциональность SQL, - это имя было изменено на Postgres95. Но и это имя было изменено - в конце 1996 на PostgreSQL.
+Разработку PostgreSQL выполняет команда разработчиков, разбросанная + по всему миру и связанная через Интернет. Разработка является + общественным проектом и не управляется какой-либо компанией. + Подробности смотрите в FAQ для разработчиков, + + http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html +
PostgreSQL попадает под действие следующего COPYRIGHT:
+PostgreSQL распространяется по классической лицензии BSD. Эта + лицензия не содержит ограничений на то, как будет использоваться + исходный код. Нам нравится эта лицензия и у нас нет намерений её + менять.
+ +Вот эта лицензия BSD, которую мы используем:
Система Управления Базами Данных PostgreSQL
-Portions copyright (c) 1996-2004, PostgreSQL Global Development +
Portions copyright (c) 1996-2005, PostgreSQL Global Development Group Portions Copyright (c) 1994-6 Regents of the University of California
@@ -225,21 +187,13 @@ "КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ. -Вышеизложенное является BSD лицензией, классической лицензией - программного обеспечения с открытым кодом. Эта лицензия не накладывает - ограничений на использование исходного кода. Нам нравится эта лицензия - и мы не собираемся её менять.
- -Обычно, PostgreSQL может работать на любой современной платформе совместимой с Unix. В инструкции по установке, вы найдете список тех платформ, на которых были проведены тестовые запуски PostgreSQL к моменту выхода данной версии.
-Начиная с версии 8.0, PostgreSQL без всяких ухищрений работает на операционных системах Microsoft Windows, основанных на NT, таких как Win2000, WinXP и Win2003. Пакет инсталлятора доступен по адресу @@ -249,69 +203,30 @@ PostgreSQL с помощью Cygwin.
Также существует версия спортированная под Novell Netware 6 на - http://forge.novell.com.
+ http://forge.novell.com, + и версия для OS/2 (eComStation) на + + http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F. -Например, воспользовавшись анонимным доступом на ftp сайт PostgreSQL ftp://ftp.PostgreSQL.org/pub. Список зеркал вы найдете на нашем основном сайте.
-Основной список рассылки: pgsql-general@PostgreSQL.org. - В нем можно обсуждать любые темы, касающиеся PostgreSQL. Чтобы - подписаться, отправьте письмо по электронной почте, в котором в - теле письма (не в теме) напишите следующие строки:
-- subscribe - end -- -
на адрес pgsql-general-request@PostgreSQL.org.
- -Существует дайжест список. Чтобы подписаться на него, отправьте - письмо по электронной почте на адрес: pgsql-general-digest-request@PostgreSQL.org - и в теле письма напишите строчки строчки:
-- subscribe - end -- Дайжесты отправляются подписчикам, когда в основном списке рассылки - накопится около 30 килобайт сообщений. - -
Доступен и список рассылки сообщений об ошибках. Чтобы подписаться на этот - список, отправьте по электронной почте письмо на адрес pgsql-bugs-request@PostgreSQL.org - и в теле письма напишите строчки строчки:
-- subscribe - end -- Также имеется список рассылки с дискуссиями разработчиков. Чтобы подписаться - на этот список, отправьте по электронной почте письмо на адрес - pgsql-hackers-request@PostgreSQL.org - и в теле письма напишите строчки строчки: -
- subscribe - end -- -
Дополнительные списки рассылки и инфомацию о PostgreSQL можно найти - на домашней страничке PostgreSQL по адресу:
- -- http://www.PostgreSQL.org -+
Сообщество PostgreSQL предоставляет помощь множеству пользователей + через E-mail. Основной web-сайт для подписки на списки рассылки по + E-mail это: + http://www.postgresql.org/community/lists/. Хорошим местом для + того, чтобы начать задавать вопросы являются списки general + (общие вопросы) или bugs (ошибки).
Главным IRC каналом является #postgreql,
расположенный на сервере Freenode (irc.freenode.net). Чтобы
- подключиться, вы можете использовать команду Unix
+ подключиться, вы можете использовать в Unix вызов программы
irc -c '#postgresql' "$USER" irc.freenode.net
или
любой другой IRC клиент. На этом же сервере существуют каналы на
испанском (#postgresql-es) и французском (#postgresqlfr)
@@ -320,19 +235,32 @@
Список коммерческой поддержки компаний доступен на http://techdocs.postgresql.org/companies.php.
+ +Посетите страничку со специальной формой отчёта об ошибке в + PostgreSQL по адресу: + + http://www.postgresql.org/support/submitbug.
+ +Также проверьте наличие более свежей версии PostgreSQL на нашем + FTP сайте + ftp://ftp.PostgreSQL.org/pub. + +
Последний выпуск PostgreSQL - это версия 7.4.6
+Последний выпуск PostgreSQL - это версия 8.0.1
-Мы планируем выпускать новые версии каждые 6-8 месяцев.
+Мы планируем выпускать новые версии каждые 10-12 месяцев.
В дистрибутив включаются различные руководства, страницы - электронного руководства man и некоторые маленькие тестовые примеры. - Смотрите в каталог /doc. Вы также можете просматривать - документацию в Интернет по адресу - http://www.PostgreSQL.org/docs.
+PostgreSQL содержит много документации, включая большое руководство, + страницы электронного руководства man и некоторые маленькие тестовые + примеры. Смотрите в каталог /doc. Вы также можете просматривать + документацию в Интернет по адресу + http://www.PostgreSQL.org/docs.
Существует две книги по PostgreSQL доступные по адресам http://www.PostgreSQL.org/docs/awbook.html @@ -342,9 +270,9 @@ Кроме того, по адресу http://techdocs.PostgreSQL.org/ вы можете найти коллекцию технических статей посвященных PostgreSQL.
- -psql имеет несколько прекрасных команд \d для отображения - информации по типам, операторам, функциям, агрегатам и т.д.
+Клиент командной строки psql имеет несколько команд \d для + отображения информации по типам, операторам, функциям, агрегатам и т.д. - + используйте \? для получения списка доступных команд.
Наш сайт содержит еще больше информации.
@@ -381,15 +309,11 @@ Bowman, Judith S., et al., Addison-Wesley. Другим нравится The Complete Reference SQL, Groff et al., McGraw-Hill. -Да, мы легко работаем с датами после 2000 года и перед 2000 годом.
- -Для начала, скачайте последнюю версию исходных текстов и прочтите - документацию разработчиков PostgreSQL на нашем сайте или в дистрибутиве. - Затем, подпишитесь на списки рассылки pgsql-hackers и + FAQ и документацию для разработчиков PostgreSQL на нашем сайте или в + дистрибутиве. Затем, подпишитесь на списки рассылки pgsql-hackers и pgsql-patches. Далее, отправляйте исправления (patches) высокого качества в список pgsql-patches.
@@ -400,16 +324,7 @@ превилегии вносить изменения, и мы уверены, что те исправления, которые они внесут будут высокого качества. -Заполните форму об ошибке в PostgreSQL, которая расположена на - http://www.postgresql.org/bugform.html.
- -Также не забудьте посмотреть на ftp://ftp.PostgreSQL.org/pub - на предмет более свежих версий PostgreSQL или заплат.
- -@@ -431,24 +346,16 @@
PostgreSQL имеет одноранговую инфраструктуру с того самого времени - как мы начали разработку в 1996 году. Мы должны благодарить за - это Марка Фурнье (Marc Fournier), который создал эту инфраструктуру и - управляет ей на протяжении этих лет.
- -Качественная инфраструктура очень важна для проектов с открытым - исходным кодом. Она предотвращает расколы, которые могут сильно - задержать поступательное движение проекта.
- -Разумеется, эта инфраструктура не является дешевой. Существует - некоторое количество ежемесячных и одноразовых расходов, которые - требуют денег. Если вы или ваша компания имеет деньги, которые - можно передать в помощь нашим усилиям, пожалуйста посетите страничку - - https://store.pgsql.com/shopping/ - и сделайте свой вклад.
- -Хотя на страничке говорится о PostgreSQL, Inc, пункт - "contributions" предназначен исключительно для поддержки проекта - PostgreSQL и не передается какой-либо конкретной компании. - Если хотите, то можете это проверить, написав письмо на контактный адрес.
-Если у вас есть истории по успешному применению PostgreSQL, пожалуйста, - присылайте их на наш сайт пропаганды - http://advocacy.postgresql.org.
Существует два ODBC драйвера, PsqlODBC - и OpenLink ODBC.
+Вы можете скачать PsqlODBC с - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.
- -OpenLink ODBC можно взять на http://www.openlinksw.com. Этот - драйвер работает с их стандартным клиентским программным обеспечением, - использующим ODBC, и таким образом, ODBC - драйверы для PostgreSQL доступны для каждой из поддерживаемых ими - платформ (Win, Mac, Unix, VMS).
+Установка PostgreSQL включает только C и встроенный + (embedded) C интерфейсы. Все другие интерфейсы + являются независимыми проектами и загружаются отдельно; самостоятельность + проектов позволяет им организовать собственное расписание выпусков + новых версий и иметь собственную команду разработчиков.
+ +Некоторые языки программирования, такие как PHP + включают в себя интерфейс к PostgreSQL. Интерфейсы для таких языков + как Perl, TCL, Python и многих других, доступны на + http://gborg.postgresql.org + в секции Drivers/Interfaces, а также через поиск в Интернет.
-Возможно они будут продавать свой продукт тем кому нужна коммерческая - поддержка, но бесплатная версия всегда будет доступна. Пожалуйста, - направляйте вопросы на адрес postgres95@openlink.co.uk.
Прекрасное введение во взаимодействие баз данных и Web можно найти на: http://www.webreview.com
-Для интеграции с Web, одним из превосходных инструментов является PHP. - Домашняя станичка http://www.php.net.
+Для интеграции с Web, PHP + http://www.php.net является неплохим интерфейсом.
-Для комплексных решений, многие пользуются Perl интерфейсом и CGI.pm или mod_perl.
+В сложных случаях, многие пользуются Perl и CGI.pm или mod_perl.
Да, существует несколько графических интерфейсов для PostgreSQL. - Это PgAccess (http://www.pgaccess.org), - PgAdmin III (http://www.pgadmin.org), + Они включают PgAdmin III (http://www.pgadmin.org), + PgAccess (http://www.pgaccess.org), RHDB Admin (http://sources.redhat.com/rhdb/), - TORA (http://www.globecom.net/tora/ - (частично коммерческое ПО) - и Rekall ( - http://www.thekompany.com/products/rekall/, коммерческий). Также есть + TORA (http://www.globecom.net/tora/ + частично коммерческое ПО) + и Rekall ( + http://www.rekallrevealed.org/). Также есть PhpPgAdmin ( - http://phppgadmin.sourceforge.net/) - интерфейс к PostgreSQL, основанный - на Web.
- -Какие-либо интерфейсы для PostgreSQL существуют для большинства - популярных языков программирования. Посмотрите список модулей расширения - для тех языков программирования, которыми вы пользуетесь.
- -Следующие интерфейсы включаются в дистрибутив PostgreSQL:
-Дополнительные интерфейсы доступны по адресу - http://gborg.PostgreSQL.org - в секции Drivers/Interfaces. -
+ http://phppgadmin.sourceforge.net/) - интерфейс к PostgreSQL, + основанный на Web.Задайте опцию --prefix когда запускаете configure.
-Это может быть вызвано разными проблемами, но первое, что - нужно сделать - это убедиться в том, что в вашем ядре установлено - расширение System V. PostgreSQL требует, чтобы ядро поддерживало - разделяемую память и семафоры.
- -Либо у вас в ядре неправильные настройки разделяемой памяти, либо - вашему ядру нужно большее количество доступной разделяемой памяти. - Те конкретные действия, которые вам нужно произвести зависят от - архитектуры вашей машины и от того как много буферов и backend - процессов вы настроили для postmaster. Для большинства систем, - с количеством буферов и процессов по умолчанию, необходимый минимум - - это около 1 мегабайта. Подробности о разделяемой памяти и семафорах - смотрите в Руководстве - администратора PostgreSQL..
- -Если это сообщение IpcSemaphoreCreate: semget failed (No - space left on device) то настройки вашего ядра таковы, что ему не - хватает семафоров. Postgres требует один семафор на потенциальный - backend процесс. Временным решением является запуск postmaster - с настройками на мешьшее количество backend процессов. Используйте - -N с значением меньшим чем 32, которое принято по умолчанию. - Более правильное решение - это увеличить значения SEMMNS - и SEMMNI в настрйках ядра.
- -Неисправные семафоры также могут привести к падению СУБД во время - доступа к базе данных.
- -Если вы получили какое-либо другое сообщение об ошибке, то вполне - возможно, что в вашем ядре вообще не настроена поддержка семафоров. - Смотрите подробности о разделяемой памяти и семафорах в Руководстве - Администратора PostgreSQL.
- -По умолчанию, PostgreSQL разрешает только соединения на локальной - машине через сокеты домена Unix или TCP/IP соединения. Другие машины - не смогут подключиться к базе пока вы не измените listen_addresses в - postgresql.conf и пока не будет разрешена host-авторизация в файле - $PGDATA/pg_hba.conf.
+ машине через сокеты домена Unix или TCP/IP соединения. Для того, чтобы + другие машины смогли подключиться к базе вы должны изменить + listen_addresses в postgresql.conf, разрешить + host-авторизация в файле $PGDATA/pg_hba.conf и перестартовать + сервер. -Несомненно, индексы могут увеличить скорость выполнения запросов. Команда - EXPLAIN ANALYZE позволяет вам посмотреть как PostgreSQL - интерпретирует ваш запрос и какие индексы используются.
- -Если вы выполняете много операторов INSERT, - рассмотрите возможность выполнять их в большой пачке, используя - команду COPY. Это значительно быстрее, чем отдельные - INSERT. Во-вторых, операторы вне блока транзакции - BEGIN WORK/COMMIT сами выполняют транзакцию. Подумайте - над выполнением нескольких операторов в одном блоке транзакции. - Это уменьшит количество транзакций. Также, задумайтесь над удалением - и пересозданием индексов, когда вы выполняете большие изменения - данных.
- -Существует несколько опций настройки в - - Руководстве Администратора PostgreSQL. Вы можете запретить - fsync() при старте postmaster с опцией -o -F. - Это предотвратит вызовы fsync(), которые приводят к сбросу - данных на диск после каждой транзакции.
- -Вы можете также использовать опцию shared_buffers -B - для увеличения количества буферов разделяемой памяти, которая - используется backend процессами. Если вы сделаете значение этого параметра - слишком большим, то postmaster может не запустится потому что - вы исчерпаете ограничение ядра на объем разделяемой памяти. Каждый - буфер имеет размер в 8 килобайт и по умолчанию выделяется 1000 буферов.
- -Вы можете также использовать backend опции sort_mem и - work_mem для увеличения максимального количества памяти, которое - используется backend процессом для временных сортировок. Значение по - умолчанию составляет 1024 (т.е. 1MB).
- -Вы также можете использовать команду CLUSTER для - группировки данных в таблицах на совпадающий индекс. Подробности смотрите - на странице руководства по команде CLUSTER.
- -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 указывается число, которое задает уровень - отладки. Будьте осторожны, так как высокий уровень отладки приводит - к генерации файлов журнала большого размера.
+Есть множество установок в настройках сервера, начинающихся
+ на log_*
, позволяющих протоколировать запросы
+ и статистику работы процесса, которая очень полезна для отладки
+ и измерения производительности.
Для предоставления более детальной информации разработчикам + сервера при отладке какой-либо проблемы должны пользоваться + следующие инструкции.
+ +Таким же образом можно производить и отладку севера, если он + работает неправильно. Во-первых, при запуске configure с + опцией --enable-cassert, многие вызовы assert() позволяют + отслеживать работу backend процесса и остановку программы при + возникновении каких-либо неожиданностей.
Если postmaster не запущен, вы можете запустить postgres backend из командной строки и ввести ваш оператор SQL напрямую. Это рекомендуется только для целей отладки. Заметим, что в этом режиме, запрос завершается символом новой строки, а не точкой с запятой. Если вы производили компиляцию - с отладочными символоами, вы можете использовать любой отладчик, чтобы + с отладочными символами, вы можете использовать любой отладчик, чтобы посмотреть, что случилось. Поскольку backend запускается не из postmaster, он не запускается в идентичном окружении и значит проблемы итераций блокировок/backend не могут быть воспроизведены.
Если postmaster запущен, запустите psql в одном окне, затем найдите PID процесса postgres, - используемый psql, используя
- -- SELECT pg_backend_pid() -- -
Используйте отдадчик для подключения к postgres PID.
+ используемый psql, используя SELECT pg_backend_pid()
.
+ Используйте отладчик для подключения к postgres PID.
Вы можете установить точки прерывания в отладчике и запустить запрос
из psql. Если
вы производите отладку запуска postgres, вы можете установить
@@ -745,10 +550,6 @@
вы можете подключить к процессу отладчик, установить любые точки
прерывания и продолжить запуск.
Программа postgres имеет опции -s, -A, и -t - которые могут быть очень полезными для отладки и измерения - производительности.
-Вы также можете скомпилировать PostgreSQL с профилированием для того, чтобы увидеть какие функции сколько времени выполняются. Файлы профилирования backend'а находятся в каталоге @@ -756,51 +557,23 @@ будет помещен в текущий каталог клиента. В Linux для выполнения профилирования требуется компиляции с -DLINUX_PROFILE.
-Вам нужно увеличить ограничение на количество конкуретных - backend процессов при запуске postmaster.
- -По умолчанию установлен лимит на 32 процесса. Вы можете - увеличить этот лимит перезапустив postmaster с нужным - значением процессов, которое указывается в опции -N или - изменив файл postgresql.conf.
- -Заметим, что если вы зададите в опции -N значение больше - 32, то вы также должны увеличить значение в опции -B которое - по умолчанию установлено в 64; Значение опции -B должно быть - по крайней мере вдвое больше значения опции -N, и возможно - ещё больше для лучшей производительности. Для большего количества - backend процессов, вам также неплохо было бы увеличить некоторые - параметры ядра Unix. Это такие параметры, как максимальное количество - блоков разделяемой памяти, SHMMAX; максимальное количество - семафоров, SEMMNS и SEMMNI; максимальное - количество процессов, NPROC; максимальное количество - процессов на пользователя, MAXUPRC; и максимальное - количество открытых файлов, NFILE и NINODE. - Причина создания ограничения на количество backend процессов как - раз и состоит в том, чтобы вашей системе хватило ресурсов.
- -Данный каталог содержит временные файлы, генерируемые обработчиком - запроса. Например, если для выполнения ORDER BY нужна - сортировка и эта сортировка требует памяти больше, чем допускает параметр -S - у backend'а, то для хранения дополнительных данных создаются временные - файлы.
- -Эти временные файлы должны удаляться автоматически, но этого может не - произойти, если backend рухнул во время сортировки. Останов и запуск - серверного процесса обеспечит их удаление из каталога.
+Вы достигли установленного по умолчанию ограничения на 100 сессий + подключения к базе данных. Вам необходимо увеличить для + postmaster лимит на количество конкурентных backend процессов, + изменив значение max_connections в файле postgresql.conf + и перестартовать postmaster.
+ -Разработчики PostgreSQL делают только небольшие изменения между - подвыпусками. Таким образом обновление с версии 7.2 до 7.2.1 не требует + подвыпусками. Таким образом обновление с версии 7.4 до 7.4.1 не требует выполнения dump и restore. Однако при выходе очередного выпуска - (т.е. при обновлении например, с 7.2 на 7.3) часто меняется внутренний + (т.е. при обновлении например, с 7.3 на 7.4) часто меняется внутренний формат системных таблиц и файлов данных. Эти изменения часто носят комплексный характер, так что нет возможности обеспечить обратную совместимость файлов данных. Выполение dump позволяет получить данные @@ -812,7 +585,7 @@ использования dump/restore. Комментарии к выпуску говорит когда можно использовать pg_upgrade для этого выпуска.
-Поскольку "железо" персональных компьютеров является наиболее совместимым, люди склонны верить, что такое "железо" имеет одинаковое @@ -827,24 +600,15 @@
Смотрите описание на страницах руководства посвященным - DECLARE.
- -Смотрите станицу руководства посвященную FETCH - или используйте SELECT ... LIMIT....
- -Даже если вы хотите получить только первые несколько записей, - будет выполнен весь запрос. Рассмотрим запрос, который имеет - ORDER BY. Если есть какой-либо индекс, который - совпадает с ORDER BY, PostgreSQL может - выдать только несколько первых запрошенных записей или может - выполнять запрос пока не будут выданы желаемые записи.
+Для получения только нескольких строк, если вы знаете их количество + на момент выполнения SELECT используйте LIMIT.
+ Если есть какой-либо индекс, который совпадает с ORDER BY, + то возможно, что весь запрос выполнен и не будет. Если вы не знаете + количества необходимых строк на момент выполнения SELECT, + используйте курсор и FETCH.To SELECT a random row, use:
SELECT col @@ -854,8 +618,9 @@-
Чтобы просматривать таблицы в psql, используйте команду \dt. Полный список команд в psql вы можете получить, используя \?. @@ -865,28 +630,25 @@ начинающихся с обратной косой черты. Вы также можете запустить psql с опцией -E так, чтобы эта программа выдавала запросы, которые она использует для выполнения заданных вами - команд. PostgreSQL также предоставляет SQLi + команд. PostgreSQL также предоставляет SQL совместимый с INFORMATION SCHEMA интерфейс, с помощью которого, вы можете сформировать запрос на получение информации о базе данных.
+ +Также существуют системные таблицы, начинающиеся с pg_.
+ +Используйте psql -l для получения списка всех баз данных.
-Также посмотрите файл pgsql/src/tutorial/syscat.source. + Он показывает многие из операторов SELECT необходимых + для получения информации из системных таблиц базы данных.
-DROP COLUMN функциональность была добавлена в выпуск - 7.3 с оператором ALTER TABLE DROP COLUMN. В ранних версиях, - можно сделать так:
-- BEGIN; - LOCK TABLE old_table; - SELECT ... -- выборка всех колонок за исключением той, которую хотите удалить - INTO TABLE new_table - FROM old_table; - DROP TABLE old_table; - ALTER TABLE new_table RENAME TO old_table; - COMMIT; --
Для изменения типа данных колонки, сделайте так:
+В 8.0 и более поздних версиях, изменение типа колонки выполняется + очень легко через ALTER TABLE ALTER COLUMN TYPE. + +
В более ранних версиях сделайте так:
BEGIN; ALTER TABLE tab ADD COLUMN new_col new_data_type; @@ -895,24 +657,49 @@ COMMIT;-
Существуют следующие ограничения:
-- Максимальный размер базы? неограничен (существуют базы на 32 TB) - Максимальный размер таблицы? 32 TB - Максимальный размер записи? 1.6 TB - Максимальный размер поля? 1 GB - Максимальное количество записей в таблице? неограничено - Максимальное количество колонок в таблице? 250-1600 в зависимости от типа - Максимальное количество индексов в таблице? неограничено -- - Разумеется, понятие "неограничено" на самом деле ограничивается +
+++ +
++ +Максимальный размер базы? +неограничен (существуют базы на 32 TB) ++ +Максимальный размер таблицы? +32 TB ++ +Максимальный размер строки? +1.6 TB ++ +Максимальный размер поля? +1 GB ++ +Максимальное количество строк в таблице? +неограничено ++ +Максимальное количество колонок в таблице? +250-1600 в зависимости от типа ++ + +Максимальное количество индексов в таблице? +неограничено +
Разумеется, понятие "неограничено" на самом деле ограничивается доступным дисковым пространиством и размерами памяти/своппинга. Когда значения перечисленные выше неоправдано большие, может - пострадать производительность. + пострадать производительность.
Максимальный размер таблицы в 32 TB не требует чтобы операционная система поддерживала файлы больших размеров. Большие таблицы хранятся @@ -923,7 +710,7 @@ могут быть увеличены в четыре раза, если размер блока по умолчанию будет увеличен до 32k.
-СУБД PostgreSQL может потребоваться дискового пространства до 5 раз @@ -935,21 +722,21 @@ Размер базы PostgreSQL, содержащей эти же данные составит приблизительно 6.4 MB из которых:
- 32 байт: на каждый заголовок записи (приблизительно) + 32 байт: на каждый заголовок строки в таблице (приблизительно) + 24 байта: одно поле с целочисленным типом и одно текстовое поле - + 4 байта: указатель на странице для всей записи + + 4 байта: указатель на странице для всей табличной строки ---------------------------------------- - 60 байт на запись + 60 байт на строку в таблице Размер страницы данных в PostgreSQL составляет 8192 байт (8 KB), так что: 8192 байт на страницу - --------------------- = 136 записей на страницу БД (округлённо) - 60 байт на запись + --------------------- = 136 строк в таблице на страницу БД (округлённо) + 60 байт на строку в таблице 100000 строк данных ----------------------- = 735 страниц в БД (округлённо) - 128 записей на страницу + 128 строк в таблице на страницу 735 страниц БД * 8192 байт на страницу = 6,021,120 байт (6 MB)@@ -961,25 +748,12 @@ занимают очень мало места. -
psql имеет несколько команд, начинающихся с обратной косой - черты, для того чтобы просматривать такую информацию. Используйте - \? для того, чтобы увидеть эти команды. Также существуют системные - таблицы, имя которых начинается на pg_ и в которых также содержится - эта информация. Ещё, psql -l покажет список всех баз данных.
- -Также смотрите файл pgsql/src/tutorial/syscat.source. В нем - представлены многие операторы SELECT которые нужны - для получения информации из системных таблиц базы данных.
- -Индексы не используются для каждого запроса автоматически. Они используются только если таблица больше минимального размера и запрос - выбирает только маленький процент записей в таблице. Так устроено, + выбирает только маленький процент строк в таблице. Так устроено, потому что доступ к диску с применением рандомизации при сканировании индексов может быть медленнее, чем простое чтение таблицы или ее последовательное сканирование.
@@ -988,11 +762,11 @@ таблицы, PostgreSQL должен иметь статистику по этой таблице. Эта статистика собирается при использовании VACUUM ANALYZE или просто ANALYZE. Используя статистику, оптимизатор - узнает о том как много записей в таблице и если он должен использовать + узнает о том как много строк в таблице и если он должен использовать индексы, то он может принимать лучшие решения. Статистика также влияет на определение оптимального порядка связывания и метода связывания. - Сбор статистики должен периодически выполнятся при изменении содержимого - таблицы. + При изменении содержимого таблицы должен периодически выполнятся + сбор статистики.Обычно индексы не используются для ORDER BY или для выполнения связываний. Последовательный перебор следующий за явной @@ -1024,67 +798,26 @@
- text_pattern_ops -- который работает только для -
- LIKE -- индексирования.
text_pattern_ops
который работает только для
+ LIKE индексирования.
-
В выпусках до версии 8.0, индексы часто нельзя было использовать, если типы данных точно не совпадали с индексными типами колонок. Это особенно касалось int2, int8 и numeric индексов колонок.
-Смотрите страницу руководства посвященную EXPLAIN.
-R-tree индекс используется для индексирования пространственных данных. - Индекс хэша не может управлять поисками диапазона. B-tree индекс - управляет только поисками диапазона в одном измерении. R-tree индекс - может управлять многоразмерными данными. Например, если R-tree индекс - может быть встроен в атрибут типа point, то система может - более эффективно ответить на запрос типа "выбрать все точки внутри - заданного четырехугольника."
-Канонический источник, описывающий первоначальное создание R-tree - это:
- -Guttman, A. "R-trees: A Dynamic Index Structure for Spatial - Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt - of Data, 45-57.
- -Вы можете найти этот документ в книге Стоунбрейкера "Readings in - Database Systems".
- -Встроеннные R-tree могут управлять полигонами и боксами. В теории, - R-tree могут быть расширены для управления большим количеством - измерений. На практике, расширение R-tree требует некоторых усилий и - у нас, в данный момент, нет какой-либо документации о том, как это - сделать.
- -Модуль GEQO производит быструю оптимизацию запроса, - когда происходит связывание многих таблиц через Genetic Algorithm (GA). - Это позволяет управлять большими запросами на связывание через - неистощающий поиск.
- -CREATE INDEX tabindex ON tab (lower(col));-
Вы просто сравниваете значение с IS NULL и IS NOT NULL.
--Тип Внутреннее имя Замечания --------------------------------------------------- -VARCHAR(n) varchar размер задает максимальную длину, нет заполнения -CHAR(n) bpchar заполняется пустотой до фиксированной длины -TEXT text нет задаваемого верхнего ограничения или длины -BYTEA bytea массив байт переменной длины (можно использовать null-байт без опаски) -"char" char один символ -+
++ +
++ +Тип +Внутреннее имя +Замечания ++ +VARCHAR(n) +varchar +размер задает максимальную длину, нет заполнения ++ +CHAR(n) +bpchar +заполняется пустотой до фиксированной длины ++ +TEXT +text +нет задаваемого верхнего ограничения или длины ++ +BYTEA +bytea +массив байт переменной длины (можно использовать null-байт без опаски) ++ + +"char" +char +один символ +
Внутреннее имя вы можете увидеть, когда смотрите системные каталоги и в некоторых сообщениях об ошибках.
@@ -1147,7 +907,7 @@ BYTEA bytea которых могут включать NULL байты. Все типы описанные здесь, имеют сходные характеристики производительности. -PostgreSQL поддерживает тип данных SERIAL. Он @@ -1169,20 +929,15 @@ BYTEA bytea Смотрите подробности о последовательностях на странице руководства - посвященной create_sequence. Вы также можете использовать - каждое поле OID в записи как уникальное значение. Однако, - если вам нужен дамп и перезагрузка базы данных, вам необходимо - использовать команду pg_dump с опцией -o или опцию - COPY WITH OIDS для сохранения значений поля - OID. - -
Один из способов состоит в получении следующего значения SERIAL из объекта sequence с помощью функции nextval() перед вставкой и затем вставлять это значение - явно. Используйте таблицу-пример в 4.15.1, пример + явно. Используйте таблицу-пример в 4.11.1, пример в псевдоязыке покажет как это делается:
new_id = execute("SELECT nextval('person_id_seq')"); @@ -1205,23 +960,15 @@ BYTEA bytea new_id = execute("SELECT currval('person_id_seq')");- И наконец, вы можете использовать значение - OID, возращаемое из опертора - INSERT чтобы увидеть значение по умолчанию, что - предположительно является наименее переносимым на другие платформы - решением, к тому же значение oid будет урезаться, когда оно достигнет - 4 миллиардов. В Perl, используя DBI с модулем Edmund Mergl'я DBD::Pg, - значение oid становится доступным через $sth->{pg_oid_status} - после $sth->execute(). -
Нет. currval() возвращает текущее значение, назначенное вашем - backend'ом, а не другими пользователями.
+Нет. currval() возвращает текущее значение, назначенное вашей + сессией, а не другими сессиями.
-Поля OID служат уникальными идетификаторами записей - в PostgreSQL. Каждая запись, которая создаётся в PostgreSQL получает - уникальный OID. Все значения OID - генерируемые во время initdb имеют значения меньше 16384 (из - include/access/transam.h). Все созданные пользователем - OID имеют бОльшие значение. По умолчанию, все эти - OID являются уникальными не только внутри какой-либо - таблицы или базы данных, но и внутри всей СУБД PostgreSQL.
- -PostgreSQL использует OID в своих внутренних системных - таблицах для связи записей и таблиц. Значения OID могут - быть использованы для идентификации заданных пользователем записей, - а также использоваться при связываниях. Рекомендуется использовать - тип колонки OID для хранения значений OID - Вы можете создать индекс на поле OID для более быстрого - доступа.
- -Значения OID назначаются для всех новых записей из - центральной области, которые используются всеми всеми базами данных. - Если вы хотите изменить OID на какое-либо другое - значение или если вы хотите создать копию таблицы с такимиже - OID, то это можно сделать так:
-- CREATE TABLE new_table(mycol int); - SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table; - COPY tmp_table TO '/tmp/pgtable'; - COPY new_table WITH OIDS FROM '/tmp/pgtable'; - DROP TABLE tmp_table; --
OID хранится как 4-х байтное целое и не может превышать - значение в 4 миллиарда. Однако, еще никто не сообщил о том, что такое - произошло, но мы планируем до того как это случиться избавится от - этого ограничения.
+Каждая, создаваемая в PostgreSQL табличная строка, получает уникальный + индентификатор OID за исключением случая когда + использовалось WITHOUT OIDS. OID - это + автоматически назначаемое уникальное 4-х байтовое целое число. + Однако, после того как его значение превысит 4 миллиарда, значения + OID начинают дублироваться. PostgreSQL использует + OID для связывания своих внутренних таблиц.
+ +Для уникальных значений в колонках таблицы пользователя, лучшим + способом является использование SERIAL вместо + OID, потому что последовательности SERIAL + уникальны только внутри таблицы и таким образом меньше подвержены + переполнению. Для хранения значений 8-ми байтной последовательности + доступен тип SERIAL8.
TID используется для идентификации специальных физических записей с блочными и offset значениями. TID - изменяется после того как записи были изменены или перегружены. + изменяется после того как строки в таблице были изменены или перегружены.
TID используется индексными записями в качестве указателя на физические записи.
-Некоторый исходный код и старая документация используют - общеупотребительные термины. Вот некоторые из них:
- -Список общих терминов по базам данных можно найти на http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html
- -Предположительно у вас закончилась виртуальная память @@ -1322,12 +1023,12 @@ BYTEA bytea клиентом, потому что backend возвращает слишком большой объем данных, попытайтесь выполнить эту команду перед запуском клиента. -
Из psql, наберите SELECT version();
Вам нужно при использовании большого объекта поместить в начале @@ -1345,46 +1046,15 @@ BYTEA bytea
Если вы используете такой интерфейс клиента как ODBC,
вам возможно понадобится установить auto-commit off.
Используйте CURRENT_TIMESTAMP:
-CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
-
+CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
- IN
так медленно работаеют?В версиях до 7.4, подзапросы связывались с родительскими запросами
- через последовательный перебор результатов позапроса для каждой
- записи родительского запроса. Если подзапрос возвращает только несколько
- записей, а родительский запрос возвращает много записей,
- IN
работает наиболее быстро. Чтобы
- увеличить скорость в других запросах, замените IN
на
- EXISTS
:
- SELECT * - FROM tab - WHERE col IN (SELECT subcol FROM subtab); -- - на: -
- SELECT * - FROM tab - WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col); -- - Чтобы такая конструкция работала быстро, колонка
subcol
- должна быть проиндексирована.
-
- В версии 7.4 и выше, IN
фактически использует такой же
- механизм связывания как и обычные запросы, поэтому предпочтительным
- является использование EXISTS
PostgreSQL поддерживает внешнее связывание, используя стандартный синтаксис SQL. Вот два примера:
@@ -1400,32 +1070,15 @@ BYTEA byteaЭто идентичные запросы связывания t1.col и t2.col, также возвращают - любые несвязанные записи в t1 (которые не совпадают с t2). - RIGHT связывание должно добавить несвязанные записи + любые несвязанные строки в t1 (которые не совпадают с t2). + RIGHT связывание должно добавить несвязанные строки t2. FULL связывание должно возвратить совпавшие - записи плюс все несвязанные записи из t1 и t2. Слово OUTER + строки плюс все несвязанные строки из t1 и t2. Слово OUTER является необязательным и назначается в LEFT, RIGHT и FULL связываниях. Обычные связывания называются INNER связывания.
-В предыдущих версиях, внешние связывания могли быть эмулированы
- используя UNION и NOT IN. Например,
- когда происходит связывание tab1 и tab2, следующий
- запрос выполняет внешнее связывание двух таблиц:
-
-
- SELECT tab1.col1, tab2.col2 - FROM tab1, tab2 - WHERE tab1.col1 = tab2.col1 - UNION ALL - SELECT tab1.col1, NULL - FROM tab1 - WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2) - ORDER BY col1 -- -
Не существует способа создать запрос к базам данных отличным от текущей. @@ -1433,20 +1086,19 @@ BYTEA bytea данных, непонятно даже, как должен себя вести такой межбазовый запрос.
contrib/dblink позволяет запросы между базами, используя - вызовы функций. Разумеется, клиент может одновременно устанавливать + вызовы функций. Разумеется, клиент может одновременно также устанавливать соедиенения с различными базами данных и таких образом объединять информацию из них.
-В версии 7.3, вы можете легко вернуть несколько записей или колонок из
- какой-либо функции,
-
Вы можете легко использовать функции, возвращающие список, + + http://techdocs.postgresql.org/guides/SetReturningFunctions.
-PL/PgSQL кэширует содержимое функции и один из негативных эффектов этого +
PL/PgSQL кэширует сценарии функции и один из негативных эффектов этого состоит в том, что если функция PL/PgSQL обращается к временной таблице и эта таблица позднее удаляется и пересоздается, а функция затем вызывается снова, то ее вызов приведет к ошибке, потому что скэшированное содержимое @@ -1455,7 +1107,7 @@ BYTEA bytea таблицам в PL/PgSQL. Использование этого оператора заставит запрос перегенерироваться каждый раз.
-В версиях PostgreSQL, начиная с 7.3, функции, возвращающие таблицы полностью поддерживаются в C, PL/PgSQL и SQL. Подробности смотрите в -- cgit v1.2.3