@ -2,11 +2,10 @@
< HTML >
<!-- DOCTYPE html PUBLIC " - //W3C//DTD HTML 3.2//EN" -->
<!-- HTML -->
< HEAD >
< META name = "generator" content = "HTML Tidy, see www.w3.org" >
< META http-equiv = "Content-Type" content = "text/html; charset=koi8-r" >
< TITLE > PostgreSQL FAQ< / TITLE >
< / HEAD >
@ -14,7 +13,7 @@
alink="#0000ff">
< H1 > Ответы на часто задаваемые вопросы по PostgreSQL< / H1 >
< P > Дата последнего обновления: Среда 9 Октября 23:14:53 EDT 2002< / P >
< P > Дата последнего обновления: Воскресенье 20 Октября 20:47:14 EDT 2002< / P >
< P > Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (< A href =
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us< / A > )< BR >
@ -32,8 +31,7 @@
< HR >
< H2 align = "center" > Общие вопросы< / H2 >
< A href = "#1.1" > 1.1< / A > ) Что такое PostgreSQL? Как произносится это
название?< BR >
< A href = "#1.1" > 1.1< / A > ) Что такое PostgreSQL? Как произносится это название?< BR >
< A href = "#1.2" > 1.2< / A > ) Каковы авторские права на PostgreSQL?< BR >
< A href = "#1.3" > 1.3< / A > ) На каких Unix платформах работает PostgreSQL?< BR >
< A href = "#1.4" > 1.4< / A > ) Существуют ли версии портированные не на Unix системы?< BR >
@ -80,8 +78,7 @@
< A href = "#3.7" > 3.7< / A > ) Какие возможности для отладки есть в наличии?< BR >
< A href = "#3.8" > 3.8< / A > ) Почему я получаю сообщение < I > "Sorry, too many
clients"< / I > когда пытаюсь подключиться к базе?< BR >
< A href = "#3.9" > 3.9< / A > ) Что это за файлы < I > pg_sorttempNNN.NN< / I >
в моем каталоге с базой данных?< BR >
< A href = "#3.9" > 3.9< / A > ) Что находится в каталоге < I > pgsql_tmp< / I > ?< BR >
< A href = "#3.10" > 3.10< / A > ) Почему необходимо делать dump и restore при
обновлении выпусков PostgreSQL?< BR >
@ -143,6 +140,7 @@
< A href = "#4.26" > 4.26< / A > ) Почему я не могу надежно создавать/удалять
временные таблицы в функциях PL/PgSQL?< BR >
< A href = "#4.27" > 4.27< / A > ) Какие опции репликации существуют?< BR >
< A href = "#4.28" > 4.28< / A > ) Какие опции шифрования существуют?< BR >
< H2 align = "center" > Расширения PostgreSQL< / H2 >
< A href = "#5.1" > 5.1< / A > ) Я написал функцию определяемую пользователем.
@ -158,7 +156,7 @@
< H2 align = "center" > Общие вопросы< / H2 >
< H4 > < A name = "1.1" > 1.1< / A > ) Что такое PostgreSQL?< / H4 >
< H4 > < A name = "1.1" > 1.1< / A > ) Что такое PostgreSQL? Как произносится это название? < / H4 >
< P > PostgreSQL произносится < I > Post-Gres-Q-L (Пост-Грес-Кью-Эл)< / I > .< / P >
@ -169,13 +167,12 @@
расширенное подмножество < SMALL > SQL< / SMALL > . PostgreSQL - это
свободное и полностью открытое программное обеспечение.< / P >
< P > Разработку PostgreSQL выполняет команда,
связанная через Internet, все участники которой подписаны на список
рассылки разработчиков. В настоящее время, их координатором
является Марк Форнай (Marc G. Fournier) (< A href =
< P > Разработку PostgreSQL выполняет команда разработчиков, все участники
которой подписаны на список рассылки разработчиков. В настоящее время,
их координатором является Марк Форнай (Marc G. Fournier) (< A href =
"mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org< / A > ). (См.
ниже о том, как подключиться к разработке). Эта команда теперь
отвечает за всю разработку PostgreSQL.< / P >
секцию < A href = "#1.6" > 1.6< / A > о том, как подключиться к разработке).
Эта команда теперь отвечает за всю разработку PostgreSQL.< / P >
< P > Авторами PostgreSQL 1.01 являются Эндрю Ю (Andrew Yu) и Джоли Чен
(Jolly Chen). Многие другие внесли свой вклад в перенос на другие
@ -240,10 +237,10 @@
< P > < STRONG > Клиент< / STRONG > < / P >
< P > Для запуска на платформах MS Windows возможна компиляция C
библиотеки < I > libpq< / I > , psql и других интерфесов и бинарных файлов .
библиотеки < I > libpq< / I > , psql, других интерфесов и клиентских приложений .
В этом случае, клиент запускается на MS Windows и связывается по
TCP/IP с сервером, запущенным на одной из поддерживаемых Unix
платформ. В дистрибутив включается файл < I > win31 .mak< / I > для того,
платформ. В дистрибутив включается файл < I > win32 .mak< / I > для того,
чтобы можно было провести сборку библиотеки < I > libpq< / I > и
< I > psql< / I > для Win32. PostgreSQL также работает через
< SMALL > ODBC< / SMALL > .< / P >
@ -252,10 +249,12 @@
< P > Сервер БД может быть запущен на Windows NT и Win2k, используя
библиотеку Cygwin, разработанную для переноса программного обеспечения Unix
в NT. Смотрите < I > pgsql/doc/FAQ_MSWIN< / I > в дистрибутиве или < A href =
"http://www.postgresql.org/docs/faq-mswin.html">MS Windows FAQ< / A >
на нашем сайте. Мы не планируем специально переносить PostgreSQL
на какую-либо платформу Microsoft.< / P >
в NT. Смотрите < I > pgsql/doc/FAQ_MSWIN< / I > в дистрибутиве или
MS Windows FAQ на < A href = "http://www.postgresql.org/docs/faq-mswin.html" >
http://www.PostgreSQL.org/docs/faq-mswin.html< / A > .< / P >
< P > PostgreSQL, спортированный специально для MS Win NT/2000/XP в
настоящий момент начал работать.< / P >
< H4 > < A name = "1.5" > 1.5< / A > ) Где можно взять PostgreSQL?< / H4 >
@ -321,7 +320,7 @@
< P > Список коммерческой поддержки компаний доступен на
< A href =
"http://www.postgresql.org/users-lounge/commercial-support.html">http://www.postgresql .org/users-lounge/commercial-support.html< / A > .< / P >
"http://www.postgresql.org/users-lounge/commercial-support.html">http://www.PostgreSQL .org/users-lounge/commercial-support.html< / A > .< / P >
< H4 > < A name = "1.7" > 1.7< / A > ) Какая последняя версия?< / H4 >
@ -341,8 +340,8 @@
"http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html< / A >
и < a href = "http://www.commandprompt.com/ppbook/" > http://www.commandprompt.com/ppbook/< / a > .
Список книг по PostgreSQL, которые можно купить доступен по адресу
< a href = "http://www.postgresql.org/books/" > http://www.postgresql .org/books/< / a > .
Кроме того, по адресу < a href = "http://techdocs.postgresql.org" > http://techdocs.postgresql .org/< / a >
< a href = "http://www.ca. postgresql.org/books/" > http://www.ca.PostgreSQL .org/books/< / a > .
Кроме того, по адресу < a href = "http://techdocs.postgresql.org" > http://techdocs.PostgreSQL .org/< / a >
вы можете найти коллекцию технических статей посвященных PostgreSQL.< / p >
@ -405,8 +404,8 @@
< H4 > < A name = "1.13" > 1.13< / A > ) Как отравить сообщение об ошибке??< / H4 >
< P > Пожалуйста посетите страничку < A href =
"http://www.postgresql.org/bugs/bugs.php">PostgreSQL BugTool < / A > ,
< P > Пожалуйста посетите страничку PostgreSQL BugTool на < A href =
"http://www.postgresql.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php < / A > ,
на которой предоставлены детальные инструкции о том как отправить
сообщение об ошибке.< / P >
@ -445,9 +444,8 @@
Мы делаем упор на надежность и расширенные возможности, но мы также
продолжаем увеличивать производительность с каждым выпуском. Существует
интересная страничка в Интернет, сравнивающая PostgreSQL и MySQL на
< A href = "http://openacs.org/why-not-mysql.html" >
http://openacs.org/why-not-mysql.html< / A > < BR >
< A href = "http://openacs.org/philosophy/why-not-mysql.html" >
http://openacs.org/philosophy/why-not-mysql.html< / A > < BR >
< BR >
< / DD >
@ -467,15 +465,15 @@
< DT > < B > Поддержка< / B > < / DT >
< DD > Наш список рассылки представлен большой группой разработчиков
и пользователей, которые могут помочь решить любые возникшие
проблемы. В то же время, мы не гарантируем какие-либо исправления,
но и разработчики коммерческих < SMALL > СУБД< / SMALL > не всегда делают
исправления. Прямой доступ к разработчикам, сообществу пользователей,
руководствам и исходным текстам часто делают поддержку PostgreSQL
превосходящей другие < SMALL > СУБД< / SMALL > . Существует коммерческая
поддержка по результам возникших инцидентов, которая доступна дл я
тех кому она нужна. (Смотрите < A href = "#1.6" > Как получить поддержку? < / A > .)< BR >
< DD > Наш список рассылки предоставляет возможможность общения с
большой группой разработчиков и пользователей, которые могут помочь решить
любые возникшие проблемы. В то же время, мы не гарантируем какие-либо
исправления, но и разработчики коммерческих < SMALL > СУБД< / SMALL > не всегда
делают исправления. Прямой доступ к разработчикам, сообществу
пользователей, руководствам и исходным текстам часто делают поддержку
PostgreSQL превосходящей другие < SMALL > СУБД< / SMALL > . Существует
коммерческая поддержка по результам возникших инцидентов, которая
доступна для тех кому она нужна. (Смотрите < A href = "#1.6" > Секцию 1.6 < / A > .)< BR >
< BR >
< / DD >
@ -493,7 +491,7 @@
PostgreSQL?< / H4 >
< P > PostgreSQL имеет одноранговую инфраструктуру с того самого времени
как мы начали разработку 6 лет назад . Мы должны благодарить за
как мы начали разработку в 1996 году . Мы должны благодарить за
это Марка Фоная (Marc Fournier), который создал эту инфраструктуру и
управляет ей на протяжении этих лет.< / P >
@ -505,8 +503,8 @@
некоторое количество ежемесячных и одноразовых расходов, которые
требуют денег. Если вы или ваша компания имеет деньги, которые
можно передать в помощь нашим усилиям, пожалуйста посетите страничку
< A href = "https://store.pgsql.com/shopping/index.php?id=1 " >
https://store.pgsql.com/shopping/index.php?id=1 < / A >
< A href = "https://store.pgsql.com/shopping/" >
https://store.pgsql.com/shopping/< / A >
и сделайте свой вклад.< / P >
< P > Хотя на страничке говорится о PostgreSQL, Inc, пункт
@ -549,29 +547,23 @@
< P > Прекрасное введение во взаимодействие баз данных и Web можно найти на:
< A href = "http://www.webreview.com" > http://www.webreview.com< / A > < / P >
< P > Также загляните на < A href =
"http://www.phone.net/home/mwm/hotlist/">http://www.phone.net/home/mwm/hotlist/.< / A > < / P >
< P > Для интеграции с Web, одним из превосходных инструментов является PHP.
Домашняя станичка < A
href="http://www.php.net">http://www.php.net< / A > .< / P >
Домашняя станичка < A href = "http://www.php.net" > http://www.php.net< / A > .< / P >
< P > Для комплексных решений, многие пользуются Perl интерфейсом и CGI.pm.< / P >
< P > Для комплексных решений, многие пользуются Perl интерфейсом и CGI.pm или mod_perl .< / P >
< H4 > < A name = "2.3" > 2.3< / A > ) Есть ли у PostgreSQL графический интерфейс
пользователя? Генератор отчетов? Встроенный интерфейс для языка
запросов?< / H4 >
< P > У нас есть прекрасный горафический интерфейс, называемый
< I > pgaccess< / I > , который является частью дистрибутива. < I > pgaccess< / I >
также емеет генератор отчетов. Его страничка < A href =
"http://www.flex.ro/pgaccess">http://www.flex.ro/pgaccess< / A > < / P >
PgAccess, который также можно использовать как генератор отчетов.
Его страничка < A href = "http://www.pgaccess.org" > http://www.pgaccess.org/< / A > < / P >
< P > Мы также включаем < I > ecpg< / I > , который предоставляет встроенный
интерфейс к языку запросов SQL из C.< / P >
< H4 > < A name = "2.4" > 2.4< / A > ) Какие языки могут взаимодействовать с
PostgreSQL?< / H4 >
< H4 > < A name = "2.4" > 2.4< / A > ) Какие языки могут взаимодействовать с PostgreSQL?< / H4 >
< P > Вот эти:< / P >
@ -584,7 +576,7 @@
< LI > Java (jdbc)< / LI >
< LI > Perl (perl5)< / LI >
< LI > Perl (DBD::Pg и perl5)< / LI >
< LI > ODBC (odbc)< / LI >
@ -594,11 +586,12 @@
< LI > C Easy API (libpgeasy)< / LI >
< LI > Embedded < SMALL > HTML< / SMALL > (< A href =
"http://www.php.net">PHP from http://www.php.net< / A > )< / LI >
< LI > PHP ('pg_' functions, Pear::DB)< / LI >
< / UL >
< P > Дополнительные интерфейсы доступны по адресу < A href = "http://www.postgresql.org/interfaces.html" >
http://www.postgresql.org/interfaces.html.< / A >
< P > Дополнительные интерфейсы доступны по адресу
< A href = "http://www.postgresql.org/interfaces.html" > http://www.PostgreSQL.org/interfaces.html.< / A >
и
< A href = "http://gborg.postgresql.org/" > http://gborg.PostgreSQL.org< / a > .
< / P >
< HR >
@ -671,7 +664,7 @@
< P > Если вы выполняете много операторов < SMALL > INSERT< / SMALL > ,
рассмотрите возможность выполнять их в большой пачке, используя
команду < SMALL > COPY< / SMALL > . Это значительно быстрее, чем отдельные
< SMALL > INSERT. < / SMALL > Во-вторых, операторы вне блока транзакции
< SMALL > INSERT< / SMALL > . Во-вторых, операторы вне блока транзакции
< SMALL > BEGIN WORK/COMMIT< / SMALL > сами выполняют транзакцию. Подумайте
над выполнением нескольких операторов в одном блоке транзакции.
Это уменьшит количество транзакций. Также, задумайтесь над удалением
@ -740,7 +733,7 @@
< P > Если < I > postmaster< / I > запущен, запустите < I > psql< / I > в одном
окне, затем найдите < SMALL > PID< / SMALL > процесса < I > postgres< / I > ,
используемый < I > psql< / I > . Используйте отдадчик для подключения к
< I > postgres< / I > < SMALL > PID. < / SMALL > Вы можете установить точки
< I > postgres< / I > < SMALL > PID< / SMALL > . Вы можете установить точки
прерывания в отладчике и запустить запрос из < I > psql< / I > . Если
вы производите отладку запуска < I > postgres< / I > , вы можете установить
PGOPTIONS="-W n", и затем запустить < I > psql< / I > . Эта опция приводит
@ -781,7 +774,7 @@
семафоров, < SMALL > SEMMNS< / SMALL > и < SMALL > SEMMNI;< / SMALL > максимальное
количество процессов, < SMALL > NPROC;< / SMALL > максимальное количество
процессов на пользователя, < SMALL > MAXUPRC;< / SMALL > и максимальное
количество открытых файлов, < SMALL > NFILE< / SMALL > и < SMALL > NINODE. < / SMALL >
количество открытых файлов, < SMALL > NFILE< / SMALL > и < SMALL > NINODE< / SMALL > .
Причина создания ограничения на количество backend процессов как
раз и состоит в том, чтобы вашей системе хватило ресурсов.< / P >
@ -789,38 +782,35 @@
было 64, и изменение этого количества требовало перекомпиляции после
установки константы MaxBackendId в < I > include/storage/sinvaladt.h< / I > .< / P >
< H4 > < A name = "3.9" > 3.9< / A > ) Что это за файлы < I > pg_sorttempNNN.NN< / I >
в моем каталоге с базой данных?< / H4 >
< P > Это временные файлы, генерируемые во время выполнения запроса.
Например, если для оператора < SMALL > ORDER BY< / SMALL > должна быть
выполнена сортировка, которая требует больше места чем выделенно
для backend процесса в опции < I > -S< / I > , то создается временный файл для
хранения дополнительных данных.< / P >
< H4 > < A name = "3.9" > 3.9< / A > ) Что находится в каталоге < I > pgsql_tmp< / I > ?< / H4 >
< P > Временные файлы должны удаляться автоматически, но этого может
не происходить, если backend процесс падает во время сортировки.
Если у вас не запущено ни одного backend процесса, то вы можете
спокойно удалить файлы pg_tempNNN.NN.< / P >
< P > Данный каталог содержит временные файлы, генерируемые обработчиком
запроса. Например, если для выполнения < small > ORDER BY< / small > нужна
сортировка и эта сортировка требует памяти больше, чем допускает параметр < i > -S< / i >
у backend'а, то для хранения дополнительных данных создаются временные
файлы.< / P >
< P > Эти временные файлы должны удаляться автоматически, но этого может не
произойти, если backend рухнул во время сортировки. Останов и запуск
серверного процесса обеспечит их удаление из каталога.< / P >
< A name = "3.10" > 3.10< / A > ) Почему необходимо делать dump и restore при
обновлении выпусков PostgreSQL?< BR >
< H4 > < A name = "3.10" > 3.10< / A > ) Почему необходимо делать dump и restore при
обновлении выпусков PostgreSQL?< / H4 >
< P > Разработчики PostgreSQL делают только небольшие изменения между
подвыпусками. Таким образом обновление с версии 7.2 до 7.2.1 не требует
выполнения dump и restore. Однако при выходе очередного выпуска часто
меняется внутренний формат системных таблиц и файлов данных. Эти
изменения часто носят комплексный характер, так что нет возможности
обеспечить обратную совместимость файлов данных. Выполение dump
позволяет получить данные в общем формате, который затем может быть
загружен при использовании нового внутреннего формата.< / P >
выполнения dump и restore. Однако при выходе очередного выпуска
(т.е. при обновлении например, с 7.2 на 7.3) часто меняется внутренний
формат системных таблиц и файлов данных. Эти изменения часто носят
комплексный характер, так что нет возможности обеспечить обратную
совместимость файлов данных. Выполение dump позволяет получить данные
в общем формате, который затем может быть загружен при использовании
нового внутреннего формата.< / P >
< P >
В тех выпусках, где формат данных на диске не меняется, для проведения
< P > В тех выпусках, где формат данных на диске не меняется, для проведения
обновления может быть использован сценарий < i > pg_upgrade< / i > без
использования dump/restore. Комментарии к выпуску говорит когда можно
использовать < i > pg_upgrade< / i > для этого выпуска.
< / P >
использовать < i > pg_upgrade< / i > для этого выпуска.< / P >
< HR >
< H2 align = "center" > Вопросы эксплуатации< / H2 >
@ -857,7 +847,8 @@
< H4 > < A name = "4.4" > 4.4< / A > ) Как удалить колонку из таблицы?< / H4 >
< P > Мы не поддерживаем < SMALL > ALTER TABLE DROP COLUMN,< / SMALL > но
< P > Эта функциональность была добавлена в выпуск 7.3 с оператором
< small > ALTER TABLE DROP COLUMN< / small > . В ранних версиях,
можно сделать так:< / P >
< PRE >
BEGIN;
@ -981,21 +972,21 @@
SELECT col
FROM tab
ORDER BY col [ DESC ]
LIMIT 1
LIMIT 1;
< / pre >
< P > Когда используются операции с шаблонами, например < SMALL > LIKE< / SMALL >
или < I > ~< / I > , индексы могут быть использованы в следующих случаях:
< / P > < UL >
< LI > Начало строки поиска должно совпадать с началом искомой строки, т.е.:< / LI >
или < I > ~< / I > , индексы могут быть использованы в следующих случаях:< / P >
< UL >
< LI > < small > LIKE< / small > шаблоны не должны начинаться с < i > %.< / i > < LI >
< LI > < i > ~< / i > шаблоны регулярных выражений должна начинаться на < i > ^.< / i > < LI >
< / UL >
< LI > Начало строки поиска должно совпадать с началом искомой строки, т.е.:
< UL >
< LI > < small > LIKE< / small > шаблоны не должны начинаться с < i > %.< / i > .< / LI >
< LI > < i > ~< / i > шаблоны регулярных выражений должна начинаться на < i > ^< / i > .< / LI >
< / UL > < / LI >
< LI > Строка поиска не должна начинаться с символа класса, т.е. [a-e].< / LI >
< LI > Не должен использоваться поиск независимый от регистра такой как
< small > ILIKE< / small > и < i > ~< / i > . Вместо него используйте функциональные
индексы, которые описаны в этом FAQ ниже .< / LI >
< LI > П оиск независимый от регистра, такой как < small > ILIKE< / small > и
< i > ~*< / i > не использует индексы. Вместо него, используйте функциональные
индексы, которые описываются в секции < A href = "#4.12" > 4.12< / A > .< / LI >
< LI > Во время < i > initdb< / i > должна использоваться локаль по умолчанию
< i > C< / i > .
< / UL >
@ -1053,13 +1044,13 @@
< PRE >
SELECT *
FROM tab
WHERE lower(col) = 'abc'
WHERE lower(col) = 'abc';
< / PRE >
Эта конструкция не будет использовать стандартный индекс. Однако, если
вы создадите функциональный индекс, он будет использован:
< PRE >
CREATE INDEX tabindex on tab (lower(col));
CREATE INDEX tabindex ON tab (lower(col));
< / PRE >
< H4 > < A name = "4.13" > 4.13< / A > ) Как я могу определить, что значение поля
@ -1074,8 +1065,8 @@
Тип Внутреннее имя Замечания
--------------------------------------------------
"char" char 1 символ
CHAR(# ) bpchar заполняется пустотой до фиксированной длины
VARCHAR(# ) varchar размер задает максимальную длину, нет заполнения
CHAR(n ) bpchar заполняется пустотой до фиксированной длины
VARCHAR(n ) varchar размер задает максимальную длину, нет заполнения
TEXT text нет задаваемого верхнего ограничения или длины
BYTEA bytea массив байт переменной длины (можно использовать null-байт без опаски)
< / PRE >
@ -1091,13 +1082,14 @@ BYTEA bytea
так что занимаемое дисковое пространство может также быть и меньше,
чем ожидалось.< / P >
< P > < SMALL > CHAR()< / SMALL > - это лучшее решение для хранения строк, которые
обычно имеют одинаковую длину. < SMALL > VARCHAR()< / SMALL > - это лучшее
< P > < SMALL > CHAR(n )< / SMALL > - это лучшее решение для хранения строк, которые
обычно имеют одинаковую длину. < SMALL > VARCHAR(n )< / SMALL > - это лучшее
решение, когда нужно хранить строки переменной длины, но не превышающие
определенного размера. < SMALL > TEXT< / SMALL > - это лучшее решение для строк
неограниченной длины, с максимально допустимой длиной в 1 гигабайт.
< SMALL > BYTEA< / SMALL > для хранения бинарных данных, значения которых
могут включать < SMALL > NULL< / SMALL > байты.< / P >
могут включать < SMALL > NULL< / SMALL > байты. Эти типы имеют сходные
характеристики производительности.< / P >
< H4 > < A name = "4.15.1" > 4.15.1< / A > ) Как мне создать поле
serial/с-авто-увеличением?< / H4 >
@ -1136,11 +1128,11 @@ BYTEA bytea
< P > Один из способов состоит в получении следующего значения
< SMALL > SERIAL< / SMALL > из объекта sequence с помощью функции
< I > nextval()< / I > < I > перед< / I > вставкой и затем вставлять это значение
явно. Используйте таблицу-пример в < A href = "#4.15.1" > 4.15.1< / A > , чтобы
увидеть как это делается в Perl :< / P >
явно. Используйте таблицу-пример в < A href = "#4.15.1" > 4.15.1< / A > , пример
в псевдоязыке покажет как это делается :< / P >
< PRE >
new_id = output of "SELECT nextval('person_id_seq')"
INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal' );
new_id = execute("SELECT nextval('person_id_seq')");
execute(" INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')" );
< / PRE >
Затем вы должны также сохранить новое значение в переменной
@ -1152,11 +1144,11 @@ BYTEA bytea
именами вашей таблицы и вашей колонки < SMALL > SERIAL< / SMALL > .
< P > В качестве альтернативы, вы можете получить назначенное значение
< SMALL > SERIAL< / SMALL > с помощью функции < I > currval< / I > ()
< SMALL > SERIAL< / SMALL > с помощью функции < I > currval() < / I >
< I > после< / I > проведения обычной операции вставки, например< / P >
< PRE >
INSERT INTO person (name) VALUES ('Blaise Pascal' );
new_id = output of "SELECT currval('person_id_seq')" ;
execute(" INSERT INTO person (name) VALUES ('Blaise Pascal')" );
new_id = execute("SELECT currval('person_id_seq')") ;
< / PRE >
И наконец, вы можете использовать значение
@ -1171,7 +1163,7 @@ BYTEA bytea
использование < I > currval()< / I > и < I > nextval()< / I > приведет к
зациклированию с другими пользователями?< / H4 >
< P > Нет. Currval() возвращает текущее значение, назначенное вашем
< P > Нет. < i > currval()< / i > возвращает текущее значение, назначенное вашем
backend'ом, а не другими пользователями.< / P >
< H4 > < A name = "4.15.4" > 4.15.4< / A > ) Почему числа из моей последовательности
@ -1191,7 +1183,7 @@ BYTEA bytea
в PostgreSQL. Каждая запись, которая создаётся в PostgreSQL получает
уникальный < SMALL > OID< / SMALL > . Все значения < SMALL > OID< / SMALL >
генерируемые во время < I > initdb< / I > имеют значения меньше 16384 (из
< I > backend /access/transam.h< / I > ). Все созданные пользователем
< I > include /access/transam.h< / I > ). Все созданные пользователем
< SMALL > OID< / SMALL > имеют бОльшие значение. По умолчанию, все эти
< SMALL > OID< / SMALL > являются уникальными не только внутри какой-либо
таблицы или базы данных, но и внутри всей СУБД PostgreSQL.< / P >
@ -1215,13 +1207,12 @@ BYTEA bytea
COPY new TO '/tmp/pgtable';
DELETE FROM new;
COPY new WITH OIDS FROM '/tmp/pgtable';
< / PRE >
<!--
CREATE TABLE new_table (mycol int);
INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table;
-->
< / PRE >
< P > < SMALL > OID< / SMALL > хранится как 4-х байтное целое и не может превышать
< P > O< SMALL > ID< / SMALL > хранится как 4-х байтное целое и не может превышать
значение в 4 миллиарда. Однако, еще никто не сообщил о том, что такое
произошло, но мы планируем до того как это случиться избавится от
этого ограничения.< / P >
@ -1258,8 +1249,7 @@ BYTEA bytea
< LI > range variable, table name, table alias< / LI >
< / UL >
< P > Список общих терминов по базам данных можно найти на < A href =
"http://www.comptechnews.com/~reaster/dbdesign.html">http://www.comptechnews.com/~reaster/dbdesign.html< / A > < / P >
< P > Список общих терминов по базам данных можно найти на < A href = "http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html" > http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html< / A > < / P >
< H4 > < A name = "4.18" > 4.18< / A > ) Почему я получаю ошибку < I > "ERROR: Memory
exhausted in AllocSetAlloc()"< / I > ?< / H4 >
@ -1284,7 +1274,7 @@ BYTEA bytea
< H4 > < A name = "4.19" > 4.19< / A > ) Как мне узнать, какая версия PostgreSQL
запущена?< / H4 >
< P > Из < I > psql< / I > , наберите < CODE > select version();< / CODE > < / P >
< P > Из < I > psql< / I > , наберите < CODE > SELECT version();< / CODE > < / P >
< H4 > < A name = "4.20" > 4.20< / A > ) Почему при работе с моим большим объектом
я получаю ошибку < I > "invalid large obj descriptor"< / I > ?< / H4 >
@ -1324,18 +1314,16 @@ BYTEA bytea
увеличить скорость в других запросах, замените < CODE > IN< / CODE > на
< CODE > EXISTS< / CODE > :< / P >
< PRE >
< CODE > SELECT *
SELECT *
FROM tab
WHERE col IN (SELECT subcol FROM subtab)
< / CODE >
WHERE col IN (SELECT subcol FROM subtab);
< / PRE >
на:
< PRE >
< CODE > SELECT *
SELECT *
FROM tab
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
< / CODE >
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
< / PRE >
Чтобы такая конструкция работала быстро, колонка < CODE > subcol< / CODE >
@ -1390,7 +1378,7 @@ BYTEA bytea
Поскольку PostgreSQL загружает системные каталоги специфичные для базы
данных, непонятно даже, как должен себя вести такой межбазовый запрос.< / P >
< P > < I > / contrib/dblink< / I > позволяет запросы между базами, используя
< P > < I > contrib/dblink< / I > позволяет запросы между базами, используя
вызовы функций. Разумеется, клиент может одновременно устанавливать
соедиенения с различными базами данных и таких образом объединять
информацию из них.< / P >
@ -1399,8 +1387,8 @@ BYTEA bytea
< P > Вы можете возвращать из функций PL/pgSQL списки результатов, используя
< i > refcursors< / i > . Смотрите < A
href="http://developer.postgresql.org/docs/postgres/ plpgsql-cursors.html">
http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html, < / a >
href="http://www.postgresql.org/idocs/index.php? plpgsql-cursors.html">
http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html < / a > ,
секцию 23.7.3.3.< / P >
< H4 > < A name = "4.26" > 4.26< / A > ) Почему я не могу надежно создавать/удалять
@ -1416,10 +1404,26 @@ BYTEA bytea
< H4 > < A name = "4.27" > 4.27< / A > ) Какие опции репликации существуют?< / H4 >
< P > Есть несколько решений для репликации типа master/slave. Они допускают
использование только одного сервера для внесения изменений в базу данных,
а slave серверы просто позволяют читать данные из базы.< / P >
< P > Есть несколько опций для репликации типа master/slave. Они допускают
использование только master сервера для внесения изменений в базу данных,
а slave серверы просто позволяют читать данные из базы. Об этом читайте
здесь: < A href = "http://gborg.postgresql.org/genpage?replication_research" >
http://gborg.PostgreSQL.org/genpage?replication_research< / A > . О репликации
с несколькими master серверами читайте здесь:
< a href = "http://gborg.postgresql.org/project/pgreplication/projdisplay.php" > http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php< / A > .< / P >
< h4 > < a name = "4.28" > 4.28< / a > ) Какие опции шифрования существуют?
< / h4 >
< ul >
< li > < i > contrib/pgcrypto< / i > содержит много функций шифрования для
использования в < small > SQL< / small > запросах.< / li >
< li > Есть только один способ шифрования данных, передаваемых от клиента
к серверу, через использование < i > hostssl< / i > в < i > pg_hba.conf< / i > .< / li >
< li > Пароли пользователей к базе данных автоматически шифруются, при
сохранении в версии 7.3. В предыдущих версиях, вы должны разрешить
опцию < i > PASSWORD_ENCRYPTION< / i > в < i > postgresql.conf< / i > .< / li >
< li > Сервер можно запустить, используя шифрованную файловую систему.< / li >
< / ul >
< HR >
< H2 align = "center" > Расширения PostgreSQL< / H2 >
@ -1439,8 +1443,10 @@ BYTEA bytea
< H4 > < A name = "5.3" > 5.3< / A > ) Как мне написать C функцию, возвращающую
запись?< / H4 >
< P > Это требует некоего шаманства так как авторы никогда не пробовали
делать это, хотя в приницпе это возможно.< / P >
< P > В версиях PostgreSQL, начиная с 7.3, функции, возвращающие таблицы
полностью поддерживаются в C, PL/PgSQL и SQL. Подробности смотрите в
Руководстве Программиста. Пример возвращающей таблицу функции,
написанной на C, можно найти в < i > contrib/tablefunc< / i > .< / P >
< H4 > < A name = "5.4" > 5.4< / A > ) Я изменил исходный файл. Почему после
перекомпиляции я не вижу изменений?< / H4 >