Что для этого необходимо?
Только лишь пакет libpgtcl, который содержит необходимую библиотеку libpgtcl.so.
Стандартный Tcl не содержит средств для доступа к PostgreSQL, но поскольку этот язык выполнен так, что может расширять свои возможности через подружаемые библиотеки, то наличие библиотеки libpgtcl.so - это все что нужно.
Что такое OID? Что такое TID?
Каждая, создаваемая в PostgreSQL табличная строка, получает уникальный индентификатор OID за исключением случая когда использовалось WITHOUT OIDS. OID - это автоматически назначаемое уникальное 4-х байтовое целое число. Однако, после того как его значение превысит 4 миллиарда, значения OID начинают дублироваться. PostgreSQL использует OID для связывания своих внутренних таблиц.
Для уникальных значений в колонках таблицы пользователя, лучшим способом является использование SERIAL вместо OID, потому что последовательности SERIAL
уникальны только внутри таблицы и таким образом меньше подвержены переполнению. Для хранения значений 8-ми байтной последовательности доступен тип SERIAL8.
TID используется для идентификации специальных физических записей с блочными и offset значениями. TID
изменяется после того как строки в таблице были изменены или перегружены.
TID используется индексными записями в качестве указателя на физические записи.
Что такое PostgreSQL? Как произносится это название?
PostgreSQL произносится Post-Gres-Q-L (Пост-Грес-Кью-Эл), также часто говорят просто Postgres.
PostgreSQL - это объектно-реляционная система управления базами данных (СУБД), которая имеет традиционные возможности коммерческих СУБД с расширениями, которые есть в СУБД нового поколения. PostgreSQL - это свободное и полностью открытое программное обеспечение.
Разработку PostgreSQL выполняет команда разработчиков, разбросанная по всему миру и связанная через Интернет. Разработка является общественным проектом и не управляется какой-либо компанией. Подробности смотрите в FAQ для разработчиков,
http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html
Диалоговое окно "Data Source" в "Advanced Options"
Read Only
Если не установлен, то наборы данных можно будет изменять. Для новых наборов данных, по умолчанию берется значение из диалогового окна Driver.
Connect Settings
Драйвер посылает эти команды к серверу после успешного соединения. Он делает это ПОСЛЕ того как отправит Connect Settings, заданные в диалоговом окне Driver. Для отделения команд друг от друга используйте точку с запятой. Здесь теперь можно управлять любым запросом, даже если он возвращает результаты. Результаты однако будут отбрасываться.
Row Versioning
Разрешает приложениям определять какие данные были изменены другими пользователями, пока вы пытались изменить строку. Это также ускоряет процесс обновления так как даже для одной колонки нет нужды перечислять остальные значения для обновления строки. Драйвер использует системное поле PostgreSQL "xmin" чтобы разрешить Row Versioning. Продукты Microsoft также могут использовать эту возможность. Смотрите FAQ для подробностей.
Show System Tables
Драйвер будет считать системные таблицы обычными в SQLTables. Это хорошо если вы хотите работать с системными таблицами.
OID Options
Show Column - Включает поле OID в SQLColumns. Это хорошо для использования этого поля как уникального идентификатора при изменении записей если не существует нужного ключа ИЛИ если такой ключ содержит много частей. Fake Index - Данная опция переключает уникальный индекс на OID. Это полезно, когда нет реального уникального индекса для OID и для приложений, которые не могут спросить про то, какие уникальные индексы существуют (например Access 2.0).
Protocol
Выбирайте протокол по номеру версии вашего сервера PostgreSQL.
document.write('');
Новости мира IT:
02.08 - 02.08 - 02.08 - 02.08 - 02.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 31.07 - 31.07 - 31.07 - 31.07 - 31.07 -
Архив новостей
(66)
2 Август, 17:53
(19)
2 Август, 17:51
(34)
2 Август, 15:40
(42)
2 Август, 15:35
(1)
2 Август, 14:54
(3)
2 Август, 14:34
(3)
2 Август, 14:15
(2)
2 Август, 13:34
(7)
2 Август, 13:04
(3)
2 Август, 12:28
BrainBoard.ru
Море работы для программистов, сисадминов, вебмастеров.
Иди и выбирай!
google.load('search', '1', {language : 'ru'}); google.setOnLoadCallback(function() { var customSearchControl = new google.search.CustomSearchControl('018117224161927867877:xbac02ystjy'); customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET); customSearchControl.draw('cse'); }, true);
IT-консалтинг | Software Engineering | Программирование | СУБД | Безопасность | Internet | Сети | Операционные системы | Hardware |
PR-акции, размещение рекламы — , тел. +7 495 6608306, ICQ 232284597 | Пресс-релизы — |
This Web server launched on February 24, 1997 Copyright © 1997-2000 CIT, © 2001-2009 |
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. |
Отличное решение: у официального дилера в Москве. |
Диалоговое окно "Driver" в "Advanced Options"
DEFAULTS
Нажмите эту кнопку для восстановления настроек по умолчанию.
Disable Genetic Optimizer
Автоматически выключает оптимизатор во время соединения. Это удобнее, чем выставлять специальную настройку в параметрах соединения. Данная особенность была добавлена, когда мы заметили, что сервер имеет проблемы при оптимизации некоторых запросов.
KSQO (Keyset Query Optimization)
Данная особенность помогает определенным запросам отрабатываться на сервере не заваливая его. Некоторые приложения, например MS Jet Database Engine используют "keyset" запросы вида:
SELECT ... WHERE (a = 1 AND b = 1 AND c = 1) OR (a = 1 AND b = 1 AND c = 2) ...
Запросы такого типа будут приводить к заваливанию сервера без KSQO.
CommitLog (C:\psqlodbc.log)
В данный файл происходит журналирование соединений с сервером. Его хорошо использовать для отладки.
Recognize Unique Indexes
Этот флаг управляет результатом вызова SQLStatistics() для уникальных индексов. По умолчанию он не установлен. Это позволяет Access 95 и Access 97 спрашивать пользователя об индексах во время соединения.
Read Only (default)
Новые источники данных будут наследовать состояние "Только для чтения".
Use Declare/Fetch
Если флаг выставлен (по умолчанию это так), то драйвер автоматически использует создание курсора и fetch для управления операторами SELECT, оставляя 100 строк в кэше. В большинстве случаев это сильно помогает, когда вы заинтересованы только в чтении, а не в обновлении. Результаты не занимают много памяти для буферизации всего списка изменений. Если флаг сброшен, то курсор использоваться не будет, а драйвер будет выдавать все данные результата. Для очень больших таблиц, это очень плохо и может привести к тому, что будет использована вся память Windows. Однако, это может более лучшим образом управлять UPDATE, так как таблицы не остаются открытыми, как в случае использования курсора. Тем не менее, из-за более экономного расхода памяти, использование данного флага все равно дает лучшую производительность.
Parse Statement
Если флаг выставлен, то драйвер будет анализировать операторы запроса SQL для определения колонок и таблиц, а также статистики о них, такой как точность, псевдонимы, нулевые записи и т.д. Все это можно получить через вызовы SQLDescribeCol, SQLColAttributes и SQLNumResultCols. Анализатор корректно определяет колонки, которые являются результатами выражений и функций, не взирая на сложность, но он не пытается определить типы данных или точность для этих колонок.
Важное замечание:
Я установил, что включение флажка Parse Statement приводит к проблеме в Delphi. Я не знаю, кто виноват - Delphi или ODBC драйвера, но при выполнении запросов вида: "SELECT t1.field1, t2.field2, MyFunction(arg1) AS func1, MyFunction(arg2) AS func2, t3.field3 FROM...", Delphi вернет вам в наборе данных (TDataSet и его потомки) только поля field1, field2 и func1. Поле func2 и другие поля, указанные после func2, в набор данных не попадут!
Unknown Sizes
Этот флаг управляет значениями, которые будут возвращаться вызовами SQLDescribeCol и SQLColAttributes как точность для символьных типов данных (VARCHAR, TEXT и UNKNOWN), когда точность неизвестна.
Maximum - всегда возвращать максимально возможную точность Dont Know - возвращать значение "Не знаю" и пусть приложение решает само Longest - возвращать наибольшую длину строки, которая встретится в записях. Остерегайтесь устанавливать такую настройку, когда используете курсоры, потому что размер кэша может не позволить найти наибольшую строку в кэше.
Data Types Options
Этот флаг оказывает влияние на отображение некоторых типов данных:
Text as LongVarChar - Тип PostgreSQL TEXT отображается как SQLLongVarchar, а не SQLVarchar. Unknowns as LongVarChar - Неизвестные типы данных (массивы и т.д.) отображаются как SQLLongVarchar, а не SQLVarchar. Bools as Char - Логический тип данных BOOL отображается как SQL_CHAR, а не как SQL_BIT.
Cache Size
Когда используются курсоры, это значение определяет размер кэша в строках. Если курсоры не используются, то значение говорит сколько памяти занимает результат запроса в любой заданный момент. По умолчанию кэш занимает 100 строк в любом случая.
Max Varchar
Максимальная точность типов VARCHAR и BPCHAR(char[x]). По умолчанию она равна 254 символа, так как 255-й является завершающим нулем.
Max LongVarChar
Максимальная точность типа LogVarChar. По умолчанию она равна 4094, так как 4095 символ является завершающим нулем. Вы можете даже задать размер (-4), который представляет собой константу SQL_NO_TOTAL.
SysTable Prefixes
Дополнительные префиксы имен таблиц, по которым будут узнаваться системные таблицы. Драйвер уже будет считать имена, начинающиеся с "pg_" системными таблицами. Здесь же вы можете добавить свои. Отделяйте кажный префикс друг от друга точкой с запятой.
Connect Settings
Эти команды будут посланы серверу при успешном соединении. Для отделения команд друг от друга используйте точку с запятой. Здесь теперь можно управлять любым запросом, даже если он возвращает результаты. Результаты однако будут отбрасываться.
Есть ли у PostgreSQL графический интерфейс пользователя?
Да, существует несколько графических интерфейсов для PostgreSQL. Они включают 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.rekallrevealed.org/). Также есть PhpPgAdmin (
http://phppgadmin.sourceforge.net/) - интерфейс к PostgreSQL, основанный на Web.
Финал
Ну вот собственно и все. Теперь вы можете работать с сервером PostgreSQL, с помощью любой программы в Microsoft Windows, которая знает как общаться через ODBC драйвера.
Где можно взять PostgreSQL?
Например, воспользовавшись анонимным доступом на ftp сайт PostgreSQL . Список зеркал вы найдете на нашем основном сайте.
Где получить поддержку?
Сообщество PostgreSQL предоставляет помощь множеству пользователей через E-mail. Основной web-сайт для подписки на списки рассылки по E-mail это:
http://www.postgresql.org/community/lists/. Хорошим местом для того, чтобы начать задавать вопросы являются списки general
(общие вопросы) или bugs (ошибки).
Главным IRC каналом является #postgreql, расположенный на сервере Freenode (irc.freenode.net). Чтобы подключиться, вы можете использовать в Unix вызов программы irc -c '#postgresql' "$USER" irc.freenode.net или любой другой IRC клиент. На этом же сервере существуют каналы на испанском (#postgresql-es) и французском (#postgresqlfr) языках. Также существует канал по PostgreSQL на сервере EFNet.
Список коммерческой поддержки компаний доступен на http://techdocs.postgresql.org/companies.php.
Я изменил исходный файл. Почему после перекомпиляции я не вижу изменений?
Файлы Makefile не имеют правильных зависимостей для include файлов. Вы должны выполнить make clean и затем make. Если вы используете GCC вы можете использовать опцию --enable-depend в configure чтобы поручить компилятору автоматически отслеживать зависимости.
Я написал функцию определяемую
Проблема может заключаться в нескольких вещах. Попытайтесь сперва протестировать вашу функцию в отдельной самостоятельной программе.
Как изменить тип данных колонки?
В 8.0 и более поздних версиях, изменение типа колонки выполняется очень легко через ALTER TABLE ALTER COLUMN TYPE.
В более ранних версиях сделайте так:
BEGIN; ALTER TABLE tab ADD COLUMN new_col new_data_type; UPDATE tab SET new_col = CAST(old_col AS new_data_type); ALTER TABLE tab DROP COLUMN old_col; COMMIT;
Как я могу определить, что значение поля равно NULL в каком-либо запросе?
Вы просто сравниваете значение с IS NULL и IS NOT NULL.
Как я могу внести некоторые классные новые типы и функции в PostgreSQL?
Отправьте ваши расширения в список рассылки pgsql-hackers
и они по возможности будут помещены в подкаталог contrib/.
Как мне найти какие таблицы
Чтобы просматривать таблицы в psql, используйте команду \dt. Полный список команд в psql вы можете получить, используя \?. Кроме того, вы можете посмотреть исходный код psql в файле pgsql/src/bin/psql/describe.c. Он содержит команды SQL которые генерируются при вводе в psql команд, начинающихся с обратной косой черты. Вы также можете запустить psql с опцией -E так, чтобы эта программа выдавала запросы, которые она использует для выполнения заданных вами команд. PostgreSQL также предоставляет SQL
совместимый с INFORMATION SCHEMA интерфейс, с помощью которого, вы можете сформировать запрос на получение информации о базе данных.
Также существуют системные таблицы, начинающиеся с pg_.
Используйте psql -l для получения списка всех баз данных.
Также посмотрите файл pgsql/src/tutorial/syscat.source. Он показывает многие из операторов SELECT необходимых для получения информации из системных таблиц базы данных.
Как мне написать C функцию, возвращающую строку таблицы?
В версиях PostgreSQL, начиная с 7.3, функции, возвращающие таблицы полностью поддерживаются в C, PL/PgSQL и SQL. Подробности смотрите в Руководстве Программиста. Пример возвращающей таблицу функции, написанной на C, можно найти в contrib/tablefunc.
Как мне научиться SQL?
Книга по PostgreSQL на научит SQL. Существует другая книга по PostgreSQL на
http://www.commandprompt.com/ppbook.
Есть прекрасный учебник на
на и на
Еще один учебник - это книга "Teach Yourself SQL in 21 Days, Second Edition" (Освой самостоятельно SQL за 21 день, Вторая редакция) на
Многим из наших пользователей нравится книга The Practical SQL Handbook, Bowman, Judith S., et al., Addison-Wesley. Другим нравится The Complete Reference SQL, Groff et al., McGraw-Hill.
Как мне получить значение при вставке SERIAL?
Один из способов состоит в получении следующего значения SERIAL из объекта sequence с помощью функции nextval() перед вставкой и затем вставлять это значение явно. Используйте таблицу-пример в , пример в псевдоязыке покажет как это делается:
new_id = execute("SELECT nextval('person_id_seq')"); execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
Затем вы должны также сохранить новое значение в переменной 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')");
Как мне сообщить об ошибке?
Посетите страничку со специальной формой отчёта об ошибке в PostgreSQL по адресу:
http://www.postgresql.org/support/submitbug.
Также проверьте наличие более свежей версии PostgreSQL на нашем FTP сайте .
Как мне создать колонку которая по умолчанию будет содержать текущее время?
Используйте CURRENT_TIMESTAMP:
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
Как мне создать поле serial/с-авто-увеличением?
PostgreSQL поддерживает тип данных SERIAL. Он автоматически создает последовательность. Например:
CREATE TABLE person ( id SERIAL, name TEXT );
автоматически транслируется в:
CREATE SEQUENCE person_id_seq; CREATE TABLE person ( id INT4 NOT NULL DEFAULT nextval('person_id_seq'), name TEXT );
Смотрите подробности о последовательностях на странице руководства посвященной create_sequence.
Как мне управлять соединениями с других компьютеров?
По умолчанию, PostgreSQL разрешает только соединения на локальной машине через сокеты домена Unix или TCP/IP соединения. Для того, чтобы другие машины смогли подключиться к базе вы должны изменить listen_addresses в postgresql.conf, разрешить host-авторизация в файле $PGDATA/pg_hba.conf и перестартовать сервер.
Как мне установить PostgreSQL в место отличное от /usr/local/pgsql?
Задайте опцию --prefix когда запускаете configure.
Как мне вернуть из функции несколько строк таблицы?
Вы можете легко использовать функции, возвращающие список,
http://techdocs.postgresql.org/guides/SetReturningFunctions.
Как мне выполнить поиск регулярного
Оператор ~ производит поиск регулярного выражения, а оператор ~* производит независимый от регистра букв поиск регулярного выражения. Независимый от регистра вариант LIKE называется ILIKE.
Независимое от регистра сравнение обычно выражается так:
SELECT * FROM tab WHERE lower(col) = 'abc';
Эта конструкция не будет использовать стандартный индекс. Однако, если вы создадите индекс выражения, он будет использован:
CREATE INDEX tabindex ON tab (lower(col));
Как мне выполнить внешнее связывание?
PostgreSQL поддерживает внешнее связывание, используя стандартный синтаксис SQL. Вот два примера:
SELECT * FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
или
SELECT * FROM t1 LEFT OUTER JOIN t2 USING (col);
Это идентичные запросы связывания t1.col и t2.col, также возвращают любые несвязанные строки в t1 (которые не совпадают с t2). RIGHT связывание должно добавить несвязанные строки t2. FULL связывание должно возвратить совпавшие строки плюс все несвязанные строки из t1 и t2. Слово OUTER
является необязательным и назначается в LEFT, RIGHT и FULL связываниях. Обычные связывания называются INNER связывания.
Как много дискового пространства
СУБД PostgreSQL может потребоваться дискового пространства до 5 раз больше для сохранения данных из простого текстового файла.
В качестве примера, рассмотрим файл в 100,000 строк в каждой, из которых целое число и текстовое описание. При этом длина текста, в среднем, составляет 20 байт. Размер простого файла составит 2.8 MB. Размер базы PostgreSQL, содержащей эти же данные составит приблизительно 6.4 MB из которых:
32 байт: на каждый заголовок строки в таблице (приблизительно) + 24 байта: одно поле с целочисленным типом и одно текстовое поле + 4 байта: указатель на странице для всей табличной строки ---------------------------------------- 60 байт на строку в таблице
Размер страницы данных в PostgreSQL составляет 8192 байт (8 KB), так что:
8192 байт на страницу --------------------- = 136 строк в таблице на страницу БД (округлённо) 60 байт на строку в таблице
100000 строк данных ----------------------- = 735 страниц в БД (округлённо) 128 строк в таблице на страницу
735 страниц БД * 8192 байт на страницу = 6,021,120 байт (6 MB)
Индексы не требуют так много, но поскольку они создаются для большого количества данных, они также могут быть велики.
Значения NULL хранятся как битовые карты и поэтому они занимают очень мало места.
Как найти информацию об известных ошибках или отсутствующих возможностях?
PostgreSQL поддерживает расширенный подкласс SQL-92. Смотрите наш список TODO
на предмет известных ошибок, отсутствующих возможностей и будущих планов.
Как посмотреть на то, как оптимизатор выполняет мой запрос?
Смотрите страницу руководства посвященную EXPLAIN.
Как присоединится к команде разработчиков?
Для начала, скачайте последнюю версию исходных текстов и прочтите FAQ и документацию для разработчиков PostgreSQL на нашем сайте или в дистрибутиве. Затем, подпишитесь на списки рассылки pgsql-hackers и pgsql-patches. Далее, отправляйте исправления (patches) высокого качества в список pgsql-patches.
Существует ограниченный список людей, который имеют привелегию вносить изменения в CVS архив PostgreSQL. Каждый из этих людей в свое время отправил так много высококачественных исправлений, что их было невозможно оставить без внимания и они были удостоены превилегии вносить изменения, и мы уверены, что те исправления, которые они внесут будут высокого качества.
Как сравнивать PostgreSQL с другими СУБД?
Существует несколько методов сравнения программного обеспечения: возможности, производительность, надежность, поддержка и цена.
Возможности
PostgreSQL имеет большинство возможностей представленных в больших коммерческих СУБД, такие как: транзакции, подзапросы, триггеры, представления, ссылочной целостности вторичного ключа и разные блокировки. У нас есть некоторые возможности, которых нет у них: типы, определяемые пользователем, механизм наследования, правила и конкуретное многоверсионное управление для работы с содержимым блокировок.
Производительность
Производительность PostgreSQL сходна с другими коммерческими СУБД и с СУБД с открытым исходным кодом. В каких-то вещах мы быстрее, в каких-то медленнее. В сравнении с MySQL или линейной СУБД, мы быстрее, когда пользователей много, а также на сложных запросах и при чтении/записи загрузки запроса. MySQL быстрее для простых SELECT запросов, выполняемых небольшим количеством пользователей. И разумеется, MySQL не имеет каких-либо возможностей из перечисленых выше, в секции Возможности. Мы делаем упор на надежность и расширенные возможности, но мы также продолжаем увеличивать производительность с каждым выпуском.
Надежность
Мы понимали, что наша СУБД должна быть надежной или она ничего не будет стоить. Мы стараемся выпускать хорошо проверенный, стабильный код, который содержит минимум ошибок. Каждый выпуск проходит стадию бета-тестирования по крайней мере в течении одного месяца и наша история выпусков показывает что мы можем предоставлять стабильные, монолитные выпуски, которые готовы к продуктивному использованию. Мы верим, что мы производим проверку не хуже, чем у других СУБД.
Поддержка
Наш список рассылки предоставляет возможможность общения с большой группой разработчиков и пользователей, которые могут помочь решить любые возникшие проблемы. В то же время, мы не гарантируем какие-либо исправления, но и разработчики коммерческих СУБД не всегда делают исправления. Прямой доступ к разработчикам, сообществу пользователей, руководствам и исходным текстам часто делают поддержку PostgreSQL превосходящей другие СУБД. Существует коммерческая поддержка по результам возникших инцидентов, которая доступна для тех кому она нужна. (Смотрите .)
Цена
Наш продукт бесплатен как для коммерческого так, и не для коммерческого использования. Вы можете добавлять свой код в наш продукт без ограничений, за исключением тех, что описываются в нашей лицензии стиля BSD, которая приведена выше.
Как выполнить SELECT только для нескольких первых строчек запроса? Произвольной строки?
Для получения только нескольких строк, если вы знаете их количество на момент выполнения SELECT используйте LIMIT.
Если есть какой-либо индекс, который совпадает с ORDER BY, то возможно, что весь запрос выполнен и не будет. Если вы не знаете количества необходимых строк на момент выполнения SELECT, используйте курсор и FETCH.
To SELECT a random row, use:
SELECT col FROM tab ORDER BY random() LIMIT 1;
Как выполнять запросы, использующие несколько баз данных?
Не существует способа создать запрос к базам данных отличным от текущей. Поскольку PostgreSQL загружает системные каталоги специфичные для базы данных, непонятно даже, как должен себя вести такой межбазовый запрос.
contrib/dblink позволяет запросы между базами, используя вызовы функций. Разумеется, клиент может одновременно также устанавливать соедиенения с различными базами данных и таких образом объединять информацию из них.
Какая документация имеется в наличии?
PostgreSQL содержит много документации, включая большое руководство, страницы электронного руководства man и некоторые маленькие тестовые примеры. Смотрите в каталог /doc. Вы также можете просматривать документацию в Интернет по адресу
http://www.PostgreSQL.org/docs.
Существует две книги по PostgreSQL доступные по адресам и http://www.commandprompt.com/ppbook/. Список книг по PostgreSQL, которые можно купить доступен по адресу http://techdocs.postgresql.org/techdocs/bookreviews.php. Кроме того, по адресу http://techdocs.PostgreSQL.org/
вы можете найти коллекцию технических статей посвященных PostgreSQL.
Клиент командной строки psql имеет несколько команд \d для отображения информации по типам, операторам, функциям, агрегатам и т.д. - используйте \? для получения списка доступных команд.
Наш сайт содержит еще больше информации.
Какая последняя версия?
Последний выпуск PostgreSQL - это версия 8.0.1
Мы планируем выпускать новые версии каждые 10-12 месяцев.
Какие инструменты существуют для использования PostgreSQL через Web?
Прекрасное введение во взаимодействие баз данных и Web можно найти на: http://www.webreview.com
http://www.php.net является неплохим интерфейсом.
В сложных случаях, многие пользуются Perl и CGI.pm или mod_perl.
Какие интерфейсы есть для PostgreSQL?
Установка PostgreSQL включает только C и встроенный (embedded) C интерфейсы. Все другие интерфейсы являются независимыми проектами и загружаются отдельно; самостоятельность проектов позволяет им организовать собственное расписание выпусков новых версий и иметь собственную команду разработчиков.
Некоторые языки программирования, такие как PHP
включают в себя интерфейс к PostgreSQL. Интерфейсы для таких языков как Perl, TCL, Python и многих других, доступны на http://gborg.postgresql.org
в секции Drivers/Interfaces, а также через поиск в Интернет.
Какие настройки мне нужно сделать для улучшения производительности?
Существует три главных области, которые потенциально могут увеличить производительность:
Изменение запроса
Это означает модификацию запросов для получения лучшей производительности:
Создание индексов, включая индексы выражений и частичные индексы
Использование COPY вместо множества INSERT
Группировка нескольких операторов в единую транзакцию для уменьшения нагрузки при выполнении завершения транзакции
Использование CLUSTER, когда из индекса берётся множество строк
Использование LIMIT для того, чтобы возвращалась только часть вывода от запроса
Использование Подготовленных (Prepared) запросов
Использование ANALYZE для обслуживания статистики оптимизатора
Регулярное использование VACUUM или pg_autovacuum
Удаление индексов во время больших изменений данных
Настройка сервера
Некоторые установки в postgresql.conf влияют на производительность. Подробный полный список установок см. в
Administration Guide/Server Run-time Environment/Run-time Configuration, а комментарии см. в
http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html
http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
Выбор "железа" - аппаратного обеспечения
Влияние "железа" на производительность подробно описано в
http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html и
http://www.powerpostgresql.com/PerfList/.
Какие опции шифрования существуют?
contrib/pgcrypto содержит много функций шифрования для использования в SQL запросах.
Для шифрования передаваемых данных от клиента к серверу, на сервере в файле postgresql.conf, опция ssl должна быть установлена в true, в файле pg_hba.conf должна быть соответствующая запись host или hostssl и на стороне клиента sslmode
не должен быть запрещён через disable. (Заметим, что также возможно использование независимых внешних шифрующих транспортов, таких как stunnel или ssh, вместо собственных SSL соединений PostgreSQL).
Пароли пользователей к базе данных автоматически шифруются, при сохранении в системных таблицах.
Сервер можно запустить, используя шифрованную файловую систему.
Какие возможности для отладки есть в наличии?
Есть множество установок в настройках сервера, начинающихся на 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. Если вы производите отладку запуска postgres, вы можете установить PGOPTIONS="-W n", и затем запустить psql. Эта опция приводит к задержке процесса запуска на n секунд, в течение которых вы можете подключить к процессу отладчик, установить любые точки прерывания и продолжить запуск.
Вы также можете скомпилировать PostgreSQL с профилированием для того, чтобы увидеть какие функции сколько времени выполняются. Файлы профилирования backend'а находятся в каталоге pgsql/data/base/dbname. Файл профилирования клиента будет помещен в текущий каталог клиента. В Linux для выполнения профилирования требуется компиляции с -DLINUX_PROFILE.
Какое компьютерное "железо" я должен использовать?
Поскольку "железо" персональных компьютеров является наиболее совместимым, люди склонны верить, что такое "железо" имеет одинаковое качество. Это не так. Память ECC, SCSI и качественные материнские платы являются более надёжными и имеют более лучшую производительность, чем менее дорогое "железо". PostgreSQL будет работать на любом "железе", но если для вас важны надёжность и производительность, то с вашей стороны будет мудро поставить соответствующее "железо". Обсудить разное "железо" можно в наших списках рассылки.
Каковы авторские права на PostgreSQL?
PostgreSQL распространяется по классической лицензии BSD. Эта лицензия не содержит ограничений на то, как будет использоваться исходный код. Нам нравится эта лицензия и у нас нет намерений её менять.
Вот эта лицензия BSD, которую мы используем:
Система Управления Базами Данных PostgreSQL
Portions copyright (c) 1996-2005, PostgreSQL Global Development Group Portions Copyright (c) 1994-6 Regents of the University of California
Предоставляются права на использование, копирование, изменение и распространение данного программного обеспечения и его документации для любых целей, бесплатно и без подписания какого-либо соглашения, при условии что для каждой копии будут предоставлены данное выше замечание об авторских правах, текущий параграф и два следующих параграфа.
КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПОВРЕЖДЕНИЯ, ВКЛЮЧАЯ ПОТЕРЮ ДОХОДА, НАНЕСЕННЫЕ ПРЯМЫМ ИЛИ НЕПРЯМЫМ, СПЕЦИАЛЬНЫМ ИЛИ СЛУЧАЙНЫМ ИСПОЛЬЗОВАНИЕМ ДАННОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ЕГО ДОКУМЕНТАЦИИ, ДАЖЕ ЕСЛИ КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ БЫЛ ИЗВЕЩЕН О ВОЗМОЖНОСТИ ТАКИХ ПОВРЕЖДЕНИЙ.
КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ СПЕЦИАЛЬНО ОТКАЗЫВАЗЫВАЕТСЯ ПРЕДОСТАВЛЯТЬ ЛЮБЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ТОЛЬКО ЭТИМИ ГАРАНТИЯМИ: НЕЯВНЫЕ ГАРАНТИИ ПРИГОДНОСТИ ТОВАРА ИЛИ ПРИГОДНОСТИ ДЛЯ ОТДЕЛЬНОЙ ЦЕЛИ. ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ НА ОСНОВЕ ПРИЦИПА "КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.
Каковы максимальные размеры для строк в таблице, таблиц и базы данных?
Существуют следующие ограничения:
Максимальный размер базы? | неограничен (существуют базы на 32 TB) |
Максимальный размер таблицы? | 32 TB |
Максимальный размер строки? | 1.6 TB |
Максимальный размер поля? | 1 GB |
Максимальное количество строк в таблице? | неограничено |
Максимальное количество колонок в таблице? | 250-1600 в зависимости от типа |
Максимальное количество индексов в таблице? | неограничено |
Разумеется, понятие "неограничено" на самом деле ограничивается доступным дисковым пространиством и размерами памяти/своппинга. Когда значения перечисленные выше неоправдано большие, может пострадать производительность.
Максимальный размер таблицы в 32 TB не требует чтобы операционная система поддерживала файлы больших размеров. Большие таблицы хранятся как множество файлов размером в 1 GB, так что ограничения, которые накладывает файловая система не важны.
Максимальный размер таблицы и максимальное количество колонок могут быть увеличены в четыре раза, если размер блока по умолчанию будет увеличен до 32k.
Каковы отличия между разными символьными типами?
VARCHAR(n) | varchar | размер задает максимальную длину, нет заполнения |
CHAR(n) | bpchar | заполняется пустотой до фиксированной длины |
TEXT | text | нет задаваемого верхнего ограничения или длины |
BYTEA | bytea | массив байт переменной длины (можно использовать null-байт без опаски) |
"char" | char | один символ |
Внутреннее имя вы можете увидеть, когда смотрите системные каталоги и в некоторых сообщениях об ошибках.
Первые четыре типа являются "varlena" типами (т.е., первые четыре байта на диске являются длинной, за которой следуют данные). Таким образом, фактически используемое пространство больше, чем обозначенный размер. Однако, эти типы данных также поддаются сжатию или могут быть сохранены не в строком виде через TOAST, так что занимаемое дисковое пространство может также быть и меньше, чем ожидалось.
VARCHAR(n) - это лучшее решение, когда нужно хранить строки переменной длины, не превышающие определенного размера. TEXT - это лучшее решение для строк неограниченной длины, с максимально допустимой длиной в 1 гигабайт.
CHAR(n) - это лучшее решение для хранения строк, которые обычно имеют одинаковую длину. CHAR(n) заполняется пустотой до заданной длины, в то время как VARCHAR(n)
хранит только символы, из которых состоит строка. BYTEA используется для хранения бинарных данных, значения которых могут включать NULL байты. Все типы описанные здесь, имеют сходные характеристики производительности.
Компиляция
Процесс компиляции предельно прост. Просто введите команду:
make
и дождитесь результатов ее работы. Понятное дело, что во время компиляции опять-таки могут возникнуть ошибки. Они могут быть связаны только с отсутствием необходимых библиотек и/или заголовочных (include) файлов. Я снова не рассматриваю здесь ошибки.
Microsoft Windows и PostgreSQL
PostgreSQL изначально писался для UNIX систем, но сегодня уже существует версия для Microsoft Windows NT. Таким образом даже пользователи Windows сегодня могут устанавливать сервер PostgreSQL себе на машину. Вы можете скачать версию PostgreSQL для Windows NT прямо с FTP сервера Postgresql .
Тем не менее, для Windows95/98 так и для Windows NT с давних пор существовали ODBC и JDBC драйвера, при использовании которых можно было вполне сносно работать с сервером PostgreSQL, работающим на каком-либо UNIX'е. Далее речь пойдет об ODBC драйверах.
На каких платформах работает PostgreSQL?
Обычно, PostgreSQL может работать на любой современной платформе совместимой с Unix. В инструкции по установке, вы найдете список тех платформ, на которых были проведены тестовые запуски PostgreSQL к моменту выхода данной версии.
Начиная с версии 8.0, PostgreSQL без всяких ухищрений работает на операционных системах Microsoft Windows, основанных на NT, таких как Win2000, WinXP и Win2003. Пакет инсталлятора доступен по адресу
http://pgfoundry.org/projects/pginstaller. Версии Windows, основанные на MS-DOS (Win95, Win98, WinMe) могут запускать PostgreSQL с помощью Cygwin.
Также существует версия спортированная под Novell Netware 6 на http://forge.novell.com, и версия для OS/2 (eComStation)
Начнем с postmaster.init.
Убедитесь, что вы root и откройте этот файл в любом текстовом редакторе.
Если вам нужно протоколирование и вывод отладочной информации, уберите комментарий со строки с переменной
POSTGRES_LOG /var/log/postgres.log
Установить нужный уровень отладочной информации вам поможет переменная
PGDEBUG
Если нужно, чтобы ваши запросы к базе данных также протоколировались, то уберите комментарий со строки
PGECHO
Стиль даты вам поможет установить переменная
PGDATESTYLE
Переменных там достаточно много. Они довольно хорошо задокументированы, так что остальное я оставляю для вашего самостоятельного изучения. Однако просто необходимо упомянуть о переменной
PGALLOWTCPIP
Если вы хотите дать доступ к своему SQL серверу по сети через TCP/IP, то вам необходимо установить ее в "yes" иначе ничего не получиться. Кроме того, не забывайте после этого проверить как предоставлены права доступа с других компьютеров в файле pg_hba.conf.
Настройка OBDC драйверов
Итак, запускаем 32bit ODBC. В результате получаем диалоговое окно, следующего вида:
У вас в окне по всей видимости будет пусто. У меня, как видите уже установлен ODBC драйвер для Interbase. Нажимаем кнопку Add... и снова получаем диалоговое окно вида:
Выбираем "PostgreSQL" и нажимаем кнопку Готово. В результате имеем еще одно окно вида:
Поля Database, Server, Username и Password в вашем случае будут пустыми и вам необходимо заполнить их самостоятельно. Тут никаких трудностей возникнуть не должно: Database - база данных, с которой вы будете работать, Server - машина, на которой работает PostgreSQL, Username и Password - соответственно имя пользователя и пароль с использованием которых будет осуществляться подключение к базе данных (это значит, что на сервере с PostgreSQL у вас должен быть заведен пользователь именно с таким именем и паролем).
Важное замечание:
Я установил, что заполнение полей Username и Password не является необходимым. Более того, оно вредно, поскольку Windows хранит эти значения в реестре в PLAIN TEXT. Т.е. любой пионер, который научился пользоваться программой regedit может прочитать ваш пароль!
Параметр Port вам необходимо сменить только в том случае, если вы работаете с нестандартным портом (см. файл /etc/postgresql/postmaster.init на предмет изменения номера порта).
Как видно из рисунка, есть еще две кнопки Driver и DataSource.
При нажатии на кнопку Driver получаем окно вида:
В этом окне я рекомендую установить флажок Recognize Unique Indexes. Если вам нужно протоколирование транзакций, то установите CommitLog(C:\postodbc.log. Понятно, что Read Only
надо убрать. Еще я убираю Disable Generic Optimizer. Читайте про то, что обозначают настройки .
При нажатии на кнопку DataSource получаем окно вида:
Сразу же рекомендую убрать флажек ReadOnly. А вот Protocol
нужно установить в зависимости от версии PostgreSQL, с которой вы работаете. Я также включаю флажек Show Column, так как он не мешает. Читайте про то, что обозначают настройки .
Важное замечание:
Я установил, что включение флажка Row Versioning приводит к проблеме в Delphi, так как при формировании запросов, Delphi
считает, что в любой таблице должно существовать поле xid, чего естественно в реальности нет. Т.е. этот флажок устанавливать не нужно.
Настройка перед компиляцией
Этот шаг можно сказать является самым важным. Именно от того как он будет выполнен, зависят дальнейшая корректная работа с русским языком. Будьте предельно внимательны и точно следуйте описанным ниже инструкциям.
К моему великому сожалению, в настоящий момент, PostgreSQL нельзя координально перенастроить на корректную поддержку русского языка без перекомпиляции. Увы, все необходимые настроечные параметры должны быть заданы до компиляции, путем указания специальных ключей команде configure.
Итак перейдите в каталог с исходными текстами PostgreSQL (например в /usr/src/postgresql-7.2) и наберите в нем команду:
./configure --enable-locale --enable-multibyte=KOI8 --with-prefix=/usr --with-datadir=/var/lib --with-sysconfdir=/etc
Внимательно следите за всеми сообщениями об ошибках. Если они возникли, то надо разобраться почему. Я не рассматриваю здесь ошибочных ситуаций - их слишком много, чтобы тратить силы и время на их описание. Как правило все они связаны с отсутствием в системе тех или иных пакетов. Поэтому их нужно установить. Продолжать далее можно ТОЛЬКО, если команда отработала без ошибок.
Некоторые замечания:
Путем указания дополнительных ключей к команде configure вы можете включить сборку дополнительных пакетов к PostgreSQL. Эти пакеты представляют собой библиотеки для доступа к PostgreSQL из других языков, таких как Python, Tcl, Perl и т.д. Я не описываю здесь все эти ключи, так как вы можете узнать о них выполнив команду:
./configure --help
и посмотреть комментарии к ключам, начинающимся с приставки --with.
Не может ли получиться так
Нет. currval() возвращает текущее значение, назначенное вашей сессией, а не другими сессиями.
Общие вопросы
) Что такое PostgreSQL? Как произносится это название?
) Каковы авторские права на PostgreSQL?
) На каких платформах работает PostgreSQL?
) Где можно взять PostgreSQL?
) Где получить поддержку?
) Как мне сообщить об ошибке?
) Какая версия последняя?
) Какая документация имеется в наличии?
) Как найти информацию об известных ошибках или отсутствующих возможностях?
) Как научиться SQL?
) Как присоединится к команде разработчиков?
) Как сравнивать PostgreSQL с другими СУБД?
ODBC драйвера и их установка
Первый и наверняка наиболее серьезный вопрос состоит в наверное уже крылатой фразе: "А где возьмешь?". Что сказать вам по этому поводу? Взять можно во многих местах. Я рекомендую опять-таки . Там всегда самая свежая версия. Скачать нужно, понятное дело, файл , который я положил сюда, дабы не заставлять вас тратить время понапрасну.
Это самораспаковывающийся архив в установкой через InstallShield. То есть все, что вам нужно сделать для установки, это скачать данный файл в какой-нибудь временный каталог, а затем запустить его. Данный архив содержит еще и менеджер ODBC драйвера, который я рекомендую вам поставить (вам будет задан соответствующий вопрос во время установки). Однако, для того, чтобы начать работать, установки недостаточно. Вам еще необходимо произвести настройку ODBC через ODBC Administrator, который вызывается из окна Панель управления (Control Panel) под именем 32bit ODBC.
Ответы на часто задаваемые вопросы по PostgreSQL
Дата последнего обновления: Понедельник 14 февраля 23:35:09 EST 2005
Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) ()
Перевел на русский: Виктор Вислобоков ()
Самую свежую английскую версию документа можно найти на PostgreSQL.org.
Самая свежая версия русского перевода - на сайте linuxshare.ru
Ответы на вопросы специфичные для конкретных платформ можно найти на http://www.PostgreSQL.org/docs/faq/.
Пакет libpgperl
Пакет содержит библиотеки для языка Perl, которые позволяют работать с PostgreSQL из программ Perl.
Я не являюсь большим любителем этого языка, по этому я ничего не смогу вам рассказать про то как это делается и насколько хорошо.
Я приглашаю тех, кто разобрался с этим, рассказать об этом остальным либо используя свою отдельную статью, либо прислав свои заметки мне для размещения их здесь, на этом самом месте.
document.write('');
Новости мира IT:
02.08 - 02.08 - 02.08 - 02.08 - 02.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 31.07 - 31.07 - 31.07 - 31.07 - 31.07 -
Архив новостей
(66)
2 Август, 17:53
(19)
2 Август, 17:51
(34)
2 Август, 15:40
(42)
2 Август, 15:35
(1)
2 Август, 14:54
(3)
2 Август, 14:34
(3)
2 Август, 14:15
(2)
2 Август, 13:34
(7)
2 Август, 13:04
(3)
2 Август, 12:28
BrainBoard.ru
Море работы для программистов, сисадминов, вебмастеров.
Иди и выбирай!
google.load('search', '1', {language : 'ru'}); google.setOnLoadCallback(function() { var customSearchControl = new google.search.CustomSearchControl('018117224161927867877:xbac02ystjy'); customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET); customSearchControl.draw('cse'); }, true);
IT-консалтинг | Software Engineering | Программирование | СУБД | Безопасность | Internet | Сети | Операционные системы | Hardware |
PR-акции, размещение рекламы — , тел. +7 495 6608306, ICQ 232284597 | Пресс-релизы — |
This Web server launched on February 24, 1997 Copyright © 1997-2000 CIT, © 2001-2009 |
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. |
Пакет libpgsql
Пакет содержит разделяемые (shared) библиотеки, которые использует клиентская утилита пользователя psql, а также саму эту утилиту.
Если вы планируете работать с PostgreSQL как с сервером с других машин, то утилита psql вам не нужна. Однако ее присутствие может оказаться полезным для выполнения некоторых функций администрирования пользователей и (или) баз данных.
Утилита psql обеспечивает работу с PostgreSQL с комадной строки. Вы можете подключаться к базам данных, выполнять запросы и любые другие команды языка SQL.
Пакет libpgtcl
Этот пакет вызывает у меня наибольшее умиление, как у человека, которому очень нравится язык Tcl.
Мне очень хотелось бы сказать огромное спасибо тем людям, которые сделали возможным столь легкий и красивый доступ к базам данным в PostgreSQL
из этого языка. О том как это делается, я рассчитываю поговорить в отдельной статье позднее (см. обновления начальной странички).
Пока же отмечу наличие в этом пакете программы pgaccess, которая целиком написана на Tcl с использованием подгружаемой библиотеки libpgtcl.
С помощью этой программы, вы можете в X Window, пользуясь полной визуальностью и наглядностью создавать базы данных, таблицы, изменять их и даже вводить данные в полноэкранном режиме.
Замечание: Если вы планируете пользоваться программой pgaccess, то вы должны разрешить доступ к SQL-серверу по TCP/IP (см. postmaster.init выше)
Пакет postgresql
В этом пакете содержиться все, что необходимо для настройки и запуска PostgreSQL. Если вы не планируете писать на C собственные программы для работы с PostgreSQL и не нуждаетесь в документации, то этот пакет - все что вам нужно. Вам нет необходимости ставить что-то еще.
Пройдемся по составу этого пакета
postmaster.init | Этот файл вызывается через postgresql.env и обеспечивает запуск демона PostgreSQL, а также установку некоторых важных параметров. |
postmaster.env | Этот файл вызыватеся через /etc/init.d/postgresql и устанавливает необходимые переменные окружения. |
pg_hba.conf | В этом файле описываются клиентские компьютеры сети, с которых разрешен доступ к SQL серверу, а также методы идентификации клиентов. |
pg_ident.conf | Этот файл используется при установке способа идентификации клиентов через ident сервер. |
postgresql | Этот файл используется в Debian Linux для запуска, перезапуска и останова PostgreSQL в стиле System V. Если этот файл есть, то он автоматически выполняется при загрузке системы. |
postgresql | Этот файл используется в Debian Linux для запуска, программы do.maintenance в 4 часа ночи каждый день. Разумеется, что время можно изменить. |
pg_wrapper | Специальная программа, которая выполняет некоторые служебные функции и не может быть вызывана под своим именем, а только как символьная ссылка на другую программу с реальным именем. |
createdb | Файл содежит сценарий для создания новой базы данных. |
createuser | Файл содержит сценарий для создания нового пользователя. |
destroydb | Файл содержит сценарий для удаления существующей базы данных. |
destroyuser | Файл содержит сценарий для удаления существующего пользователя. |
pg_dump | Символьняа ссылка на pg_wrapper. С помощью этой команды можно получить SQL запрос, которые создаст структуру БД заново со всеми установленным в данным момент правами, ограничениями и индексами. |
postgres | Сам SQL сервер |
postmaster | Символьная ссылка на postgres. Выполняет специфическую функцию связи frontend и backend процессов (см. схему в документации на PostgreSQL). |
pg_id | Показывает ID текущего пользователя. |
pg_version | Создает файл PG_VERSION в заданном каталоге. |
pg_dump | См. выше. |
pg_dumpall | То же, что и pg_dump, только для всех существующих баз данных. |
pg_upgrade | Позволяет производить обновление баз данных с предыдующих версий без разрушения данных. |
pg_passwd | Управляет файлом с паролями для PostgreSQL. |
cleardbdir | Полное уничтожение всех баз данных. |
createdb | См. выше. |
createlang | Установка процедурного языка в базу данных. |
createuser | См. выше. |
destroydb | См. выше. |
destroylang | Удаление процедурного языка из базы данных. |
destroyuser | См. выше. |
initdb | Создает новую струкртуру базы данных для PostgreSQL с нуля. Используется при начальной устновке PostgreSQL. |
vacuumdb | Уплотняет базу данных. |
initlocation | Создает новое дерево каталогов для размещения в нем баз данных PostgreSQL с нуля. |
ipclean | Очищает распределенную память и семафоры для прекративших свое существования соединений. |
postgresql-startup | Утилита, которая используется при запуске PostgreSQL и которая производит диагностику во время запуска. |
do.maintenance | Вызывается из /etc/cron.d/postgresql для того, чтобы во время отсутствия обращений к базам данных выполнить команду vacuum. |
postgresql-dump | Утилита для снятия дампа с базы данных и уничтожения этой базы, если ее предыдующая версия не совместима с текущей. |
В каталоге /var/postgres/data находится некоторое количество служебных файлов для PostgreSQL, а в каталоге /var/postgres/data/base размещаются базы данных, каждая в своем отдельном каталоге.
После установки этого пакета в /var/postgres/data/base будет автоматически создана база данных template1, а также выполнены практически все действия, которые необходимы для начала работы. Однако есть ряд настроек, которые вам просто наверняка понадобиться изменить. Остановимся на этом поподробнее.
Все эти настройки связаны с двумя файлами: /etc/postgresql/pg_hba.conf
и /etc/postgresql/postmaster.init.
Пакет postgresql-doc
В этом пакете собрана вся имеющаяся документация по PostgreSQL. Начинающим пользователям она просто необходима. В документации можно найти ответы практически на все вопросы. Хотя, к сожалению, я должен заметить, что мне не нравится как задокументирован системный каталог. Для российского пользователя определенным недостатком является то, что документация на английском языке.
Документация представленна как в формает Postscript (.ps файлы) так и в формате HTML.
Пакеты в Debian как они есть
Начнем с того, что пакетов, посвященных PostgreSQL в Debian Linux не один. В то же время, это вполне закономерно и удобно. Действительно, если вам нужна только серверная часть, то зачем ставить все остальное?
Хочу также заметить, что я перечисляю и описываю только те составляющие пакетов и те пакеты, которые на мой взгляд заслуживают внимания.
Итак, перечисляю пакеты:
postgresql | Сам PostgreSQL и набор прилагаемых к нему программ |
libpgsql | Клиентская утилита psql и разделяемые (shared) библиотеки к ней |
postgresql-doc | Документация по PostgreSQL |
postgresql-dev | include файлы для разработчиков |
libpgtcl | Программа pgaccess на tcl и библиотека для разработчиков на tcl |
libpgperl | Библиотека для разработчиков на Perl |
Первый запуск
Теперь нужно выполнить инициализацию начальной базы данных PostgreSQL. В процессе инициализации создается база template1, которая будет являться как бы шаблоном для все остальных создаваемых баз данных.
Итак, получите права суперпользователя root и с его правами выполните команду:
su postgres
После этого выполните команду:
/usr/lib/postgresql/bin/initdb -E KOI8 -D /var/lib/postgres/data
После выполнения успешного выполнения этой команды, вы можете запускать сервер.
Pg_connect
Оператор имеет одну опцию: -conninfo, однако именно в этой опции, указываются все необходимые для подключения параметры, такие как host - машина, где работает сервер PostgreSQL, dbname - имя базы данных, к которой мы хотим подключиться, user - имя пользователя, с правами которого мы хотим осуществить подключение и password - его пароль.
Оператор возвращает значени уникального декскриптора базы, который затем используется всеми другими операторами, в случае успешного подключения. В случае неудачи, срабатывает исключение, которое можно обработать командой Tcl catch.
Pg_disconnect
Все назначение оператора pg_disconnect состоит в закрытии сеанса соединения с базой данных. Для этого оператору нужен только один параметр - уникальный дискриптор, полученный в результате выполнения pg_connect.
Pg_exec
Этот оператор необходим для выполнения таких операторов языка SQL, как INSERT, UPDATE, DELETE и т.д, словом всех операторов SQL, в результате выполнения которых не возвращается информация.
Для этого необходимы два параметра: уникальный декскриптор, полученный через pg_connect и строка, в которой записан оператор SQL.
Pg_select
Само название оператора предполагает, что он будет использоваться при выполнении запросов к базе данных с использованием оператора SELECT.
Оператор имеет четыре параметра:
Уникальный дескриптор, полученный через pg_connect
Строка, в которой расположен текст запроса на языке SQL Имя переменной, которая будет играть роль массива-приемника информации Команда, которая будет выполняться для каждой полученной записи из набора данных
Почему числа из моей последовательности
Для реализации конкуретности, значения последовательностей, при необходимости выдаются во время запуска транзакций и не блокируются до полного выполнения транзакций. Это может вызывать разрывы в нумерации при отмене транзакций.
Почему я получаю ошибку "ERROR: Memory exhausted in AllocSetAlloc()"?
Предположительно у вас закончилась виртуальная память или что ваше ядро имеет маленький лимит на определенные ресурсы. Попытайтесь перед запуском postmaster выполнить следующие команды:
ulimit -d 262144 limit datasize 256m
В зависимости от командного интерпретатора shell, только одна из данных команд выполнится успешно, но она позволит вам установить больший сегмент данных процесса и возможно решит проблему. Эта команда изменяет параметры текущего процесса и всех его потомков, созданных после её запуска. Если у вас возникла проблема с SQL
клиентом, потому что backend возвращает слишком большой объем данных, попытайтесь выполнить эту команду перед запуском клиента.
Почему я получаю ошибку "missing
PL/PgSQL кэширует сценарии функции и один из негативных эффектов этого состоит в том, что если функция PL/PgSQL обращается к временной таблице и эта таблица позднее удаляется и пересоздается, а функция затем вызывается снова, то ее вызов приведет к ошибке, потому что скэшированное содержимое функции содержит указатель на старую временную таблицу. Чтобы решить эту проблему, используйте EXECUTE для доступа к временным таблицам в PL/PgSQL. Использование этого оператора заставит запрос перегенерироваться каждый раз.
Почему я получаю сообщение "Sorry, too many clients" когда пытаюсь подключиться к базе?
Вы достигли установленного по умолчанию ограничения на 100 сессий подключения к базе данных. Вам необходимо увеличить для postmaster лимит на количество конкурентных backend процессов, изменив значение max_connections в файле postgresql.conf
и перестартовать postmaster.
Почему мои запросы работают медлено? Почему они не используют мои индексы?
Индексы не используются для каждого запроса автоматически. Они используются только если таблица больше минимального размера и запрос выбирает только маленький процент строк в таблице. Так устроено, потому что доступ к диску с применением рандомизации при сканировании индексов может быть медленнее, чем простое чтение таблицы или ее последовательное сканирование.
Чтобы определить необходимость использования индекса для какой-либо таблицы, PostgreSQL должен иметь статистику по этой таблице. Эта статистика собирается при использовании VACUUM ANALYZE
или просто ANALYZE. Используя статистику, оптимизатор узнает о том как много строк в таблице и если он должен использовать индексы, то он может принимать лучшие решения. Статистика также влияет на определение оптимального порядка связывания и метода связывания. При изменении содержимого таблицы должен периодически выполнятся сбор статистики.
Обычно индексы не используются для ORDER BY или для выполнения связываний. Последовательный перебор следующий за явной сортировкой обычно быстрее, чем поиск по индексам в большой таблице. Однако, ORDER BY часто комбинируется с LIMIT
и в этом случае индекс будет использоваться, поскольку при выполнении будет возвращаться небольшая часть таблицы. Фактически MAX() и MIN() не используют индексы, но индекс используется при построении запросов с ORDER BY и LIMIT:
SELECT col FROM tab ORDER BY col [ DESC ] LIMIT 1;
Если вам кажется, что оптимизатор некорректно выбирает последовательный перебор, используйте SET enable_seqscan TO 'off' и запустите тесты, чтобы увидеть, не стало-ли сканирование индексов быстрее.
Когда используются операции с шаблонами, например LIKE
или ~, индексы могут быть использованы в следующих случаях:
Начало строки поиска должно совпадать с началом искомой строки, т.е.:
LIKE шаблоны не должны начинаться с %..
~ шаблоны регулярных выражений должна начинаться на ^.
Строка поиска не должна начинаться с символа класса, т.е. [a-e].
Поиск независимый от регистра, такой как ILIKE и ~* не использует индексы. Вместо него, используйте индексы выражений, которые описываются в секции .
Во время initdb должна использоваться локаль по умолчанию C, потому что не существует возможности узнать следующий наибольший символ для не-C локали. Вы можете для таких случаев создать специальный индекс text_pattern_ops который работает только для LIKE индексирования.
В выпусках до версии 8.0, индексы часто нельзя было использовать, если типы данных точно не совпадали с индексными типами колонок. Это особенно касалось int2, int8 и numeric индексов колонок.
Почему необходимо делать dump и restore при обновлении выпусков PostgreSQL?
Разработчики PostgreSQL делают только небольшие изменения между подвыпусками. Таким образом обновление с версии 7.4 до 7.4.1 не требует выполнения dump и restore. Однако при выходе очередного выпуска (т.е. при обновлении например, с 7.3 на 7.4) часто меняется внутренний формат системных таблиц и файлов данных. Эти изменения часто носят комплексный характер, так что нет возможности обеспечить обратную совместимость файлов данных. Выполение dump позволяет получить данные в общем формате, который затем может быть загружен при использовании нового внутреннего формата.
В тех выпусках, где формат данных на диске не меняется, для проведения обновления может быть использован сценарий pg_upgrade без использования dump/restore. Комментарии к выпуску говорит когда можно использовать pg_upgrade для этого выпуска.
Почему при работе с моим большим объектом я получаю ошибку "invalid large obj descriptor"?
Вам нужно при использовании большого объекта поместить в начале BEGIN WORK и в конце COMMIT, а внутри получившегося блока lo_open ... lo_close.
В настоящий момент PostgreSQL требует, чтобы при закрытии большого объекта происходило выполнение транзакции. Таким образом, первая же попытка сделать что-либо с большим объектом, не соблюдая данного правила приведет к сообщению invalid large obj descriptor, так как код выполняющий работу над большим объектом (по крайней мере в настоящий момент) будет генерировать сообщение об ошибке если вы не используете транзакцию.
Если вы используете такой интерфейс клиента как ODBC, вам возможно понадобится установить auto-commit off.
Поддерживаемые типы данных
bool | boolean | Логический (истина/ложь) | |||
box | - | Четырехугольник в плоскости (2D) | |||
char(n) | character(n) | Строка символов с фиксированной длиной | |||
cidr | - | IP адрес в формате IPv4 | |||
circle | - | Круг в плосколсти (2D) | |||
date | date | Дата | |||
decimal | decimal(p,s) | Требует число с p | float4 | float(p), pЧисло с плафающей точкой с точностью p | |
float8 | float(p), 7Число с плафающей точкой с точностью p | ||||
inet | - | IP адрес в формате IPv4 | |||
int2 | smallint | двухбайтовое знаковое целое | |||
int4 | int, integer | четырехбайтовое знаковое целое | |||
int8 | - | восьмибайтовое знаковое целое | |||
interval | interval | временной промежуток | |||
line | - | линия в плоскости (2D) | |||
lseg | - | сегмент линии в плоскости (2D) | |||
money | decimal(9,2) | Деньги в стиле США (подходят и России) | |||
numeric | numeric(p,s) | Требует число с p | path | - | Открытый и закрытый геометрический путь в плоскости (2D). Проще говоря ломаная или полигон |
point | - | Геометрическая точка в плоскости (2D) | |||
polygon | - | Закрытый геометрический путь в плоскости (2D). Проще говоря полигон | |||
serial | - | Уникальный идентификатор для перекрестной ссылки | |||
time | time | Время дня | |||
timetz | time with time zone | Время дня, включая временную зону | |||
timestamp | timestamp | Дата/время | |||
varchar(n) | character varying(n) | Строка с переменной длиной |
Получение архива с исходными текстами
Последнюю версию архива с исходными текстами PostgreSQL можно скачать с сайта . Вы найдете ее в каталоге . Советую вам выкачать содержимое этого каталога полностью, даже если вы не знаете, что там для чего. Зато потом не будете иметь проблем. Необходимым же является только один файл, который называется postgresql-7.0.2.tar.gz. Для чего нужны остальные я не знаю - может кто подскажет?
На этом же сайте или в других местах вы можете найти уже скомпилированный PostgreSQL. Однако, я не советую вам его использовать. Дело не только в том, что PostgreSQL может быть собран с другими версиями библиотек, но и в том, что наши иностранные друзья собирают PostgreSQL без учета нашей специфики, т.е. без поддержки локализации и перекодировок русского языка.
Именно поэтому нам все-таки придется заняться самостоятельной сборкой. Но перед тем как начать этот увлекательный процесс нам нужно распаковать скаченный нами архив. Лучше всего распаковать их в традиционное место: каталог /usr/src. Для этого вы должны скопировать скаченный файл postgresql-7.0.2.tar.gz в этот каталог и выполнить команду:
tar xzvf postgresql-7.0.2.tar.gz
Предоставляемый сервис
Несмотря на то, что весь набор операторов сводится к pg_connect, pg_exec, pg_select и pg_disconnect - это все что нужно.
pg_connect - обеспечивает подключеник заданной базе данных pg_disconnect - обеспечивает отключение от базы данных pg_exec - предназначен для тех операторов SQL, которые не возвращают информацию pg_select - предназначен для тех операторов SQL, которые возвращают набор данных
Простой пример
В данном примере, несмотря на простоту присутствуют все вышеописанные операторы:
#!/bin/sh # \ exec tclsh "$0" "$@"
# подгружаем библиотеку load libpgtcl.so
# подготавливаем параметры для соединения set host "server" set dbname "traffic" set user "victor" set password "orel1"
# пытаемся подключиться к базе данных set result [catch {set dbc [pg_connect -conninfo "host=$host dbname=$dbname user=$user password=$password"]}]
# если result не ноль, то выдаем ошибку if {$result} { puts "Не удалось подключиться к базе данных. Проверьте параметры соединения" exit } # в противном случае, соединение удалось, а в переменной dbc находится # уникальный дескриптор
# делаем запрос к базе данных на получение всей информации из таблицы clients_tbl # при этом, названия полей (name, money, rang) выступают в виде индексов # ассоциативного массива с именем answer pg_select $dbc "SELECT * FROM clients_tbl" answer { puts "Клиент: $answer(name)" puts "Имеет денег: $answer(money)" puts "Его ранг: $answer(rang)" }
# удаляем из таблицы всех клиентов, у которых денег меньше чем 1000 # Поскольку информация не возвращается, воспользуемя оператором pg_exec pg_exec $dbc "DELETE FROM clients_tbl WHERE money
document.write('');
Новости мира IT:
02.08 - 02.08 - 02.08 - 02.08 - 02.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 31.07 - 31.07 - 31.07 - 31.07 - 31.07 -
Архив новостей
(66)
2 Август, 17:53
(19)
2 Август, 17:51
(34)
2 Август, 15:40
(42)
2 Август, 15:35
(1)
2 Август, 14:54
(3)
2 Август, 14:34
(3)
2 Август, 14:15
(2)
2 Август, 13:34
(7)
2 Август, 13:04
(3)
2 Август, 12:28
BrainBoard.ru
Море работы для программистов, сисадминов, вебмастеров.
Иди и выбирай!
google.load('search', '1', {language : 'ru'}); google.setOnLoadCallback(function() { var customSearchControl = new google.search.CustomSearchControl('018117224161927867877:xbac02ystjy'); customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET); customSearchControl.draw('cse'); }, true);
IT-консалтинг | Software Engineering | Программирование | СУБД | Безопасность | Internet | Сети | Операционные системы | Hardware |
PR-акции, размещение рекламы — , тел. +7 495 6608306, ICQ 232284597 | Пресс-релизы — |
This Web server launched on February 24, 1997 Copyright © 1997-2000 CIT, © 2001-2009 |
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. |
Представительство в суде. Обращайтесь: . Арбитражные дела. |
Расширения языка SQL
PostgreSQL имеет многочисленные расширения языка SQL 92. К ним относятся:
Хранимые процедуры Триггеры Правила (rules) Аггрегатные функции, задаваемые пользователем Встроенные языки программирования Операторы, создаваемые пользователем Генераторы числовых последовательностей, задаваемые пользоватем Новый типы данных, задаваемые пользователем
Неслабый списочек, как вы думаете? Некоторым коммерческим SQL-серверам есть чему поучиться.
Расширения PostgreSQL
) Я написал функцию определяемую пользователем. Когда я запускаю ее в psql, почему я получаю core dump?
) Как я могу внести некоторые классные новые типы и функции в PostgreSQL?
) Как мне написать C функцию, возвращающую строку таблицы?
) Я изменил исходный файл. Почему после перекомпиляции я не вижу изменений?
Сборка PostgreSQL 7.0 из исходных текстов и установка
Для начала сделаю лирическое отступление. Все что будет говорится ниже касается Linux. Однако, у меня не вызывает особых сомнений тот факт, что большая часть этого будет работать в любой UNIX системе. Тем не менее, кое-что может отличаться и если у вас что-то отличное от UNIX и если что-то не идет, то вам следует подумать головой.
Теперь поговорим о pg_hba.conf
Этот файл может содержать два вида записей:
Запись вида "host". Запись типа "local".
Запись вида "host" выглядит следующим образом:
host [аргумент для авторизации]
Здесь IP_адрес и маска_адреса это адрес компьютера в сети с его сетевой маской в виде "A.B.C.D". Используя маску адреса можно задать не один компьютер, а группу компьютеров. Например, при значениях 192.168.10.88 и 255.255.255.0 для IP-адреса и маски адреса соответственно, мы определяем весь диапазон адресов от 192.168.10.1 до 192.168.10.254 (учитывая, что 192.168.10.255 - это широковещательный адрес).
Параметр Способ авторизации доступа может принимать следующие значения:
ident | Авторизация доступа осуществляется через ident сервер, расположенный на удаленном компьютере через ident (RFC 1413) протокол. Если при этом задан Аргумент для авторизации, то он представляет собой имя карты, которое должно присутствовать в файле pg_ident.conf. (см. документацию для подробностей). |
trust | В этом режиме авторизации доступа не производится. Соединение считается доверительным. |
reject | Попытки соединений с этого адреса будут отвергаться. |
password | Авторизация доступа через пароль. Файл с паролями создается утилитой pg_password. Если задан Аргумент для авторизации, то пароль ищется в файле, который имеет имя этого аргумента, и который находится в каталоге, заданном в переменной PGDATA. Если аргумент опущен, то пароль берется из таблицы pg_shadow. |
crypt | Авторизация доступа осуществляется путем сравнения зашифрованного пароля, пришедшего от компьюетра, который запрашивает соедиенение с паролем из таблицы pg_shadow. |
krb4 и krb5 | Идентификация по протоколу Цербер версий 4 и 5 соответственно. |
Запись вида "local" выглядит следующим образом:
local [аргумент для авторизации]
Эта запись определяет авторизацю доступа к базе данных локальных пользователей. Здесь практически все тоже самое, что и для "host", за исключением того, что IP-адрес и маска адреса опущены за ненадобностью.
На этом позвольте обзор пакета postgresql закончить.
Точки сохранения - путь к спасению.
В новой версии PostgreSQL 8 эта проблема решается на основе точек сохранения. Точки сохранения - это именованные метки, которые разбивают транзакцию на этапы, заставляя базу сохранять данные в рамках каждого этапа. В случае ошибки мы можем определить этап, на котором она возникла, и сделать откат только до предыдущей точки сохранения, не теряя при этом работу, которая была проделана перед точкой сохранения. Поскольку каждая точка сохранения имеет свое имя, то и обращаться к ней необходимо по ее имени.
Чтобы инициализировать точку сохранения, вы должны быть в пределах блока транзакции:
template1=# BEGIN;
BEGIN template1=# INSERT INTO foo(column1,column2,column3) VALUES (1,2,0); INSERT 17231 1 template1=# INSERT INTO foo(column1,column2,column3) VALUES (1,2,0); INSERT 17232 1 template1=# INSERT INTO foo(column1,column2,column3) VALUES (1,2,0); INSERT 17233 1 template1=# SELECT * FROM foo; column1 | column2 | column3 ---------+--------+-------- 1 | 2 | 0 1 | 2 | 0 1 | 2 | 0 (3 rows)
template1=# SAVEPOINT main_values_inserted; SAVEPOINT template1=# INSERT INTO foo(column1,column2,column3) VALUES (1,2,1/0); ОШИБКА: деление на ноль ОШИБКА: деление на ноль
В предыдущей версии PostgreSQL вы потеряли бы результаты всех операций INSERT в этом коде (после возникновения ошибки деления на ноль в последнем операторе INSERT), но в версии 8 вы можете сделать откат до определенной точки сохранения. Обратите внимание, что код содержит точку сохранения с именем 'main_values_inserted'. Для отката до этой точки сохранения вы можете написать:
template1=# ROLLBACK TO main_values_inserted; ROLLBACK
Выполняя откат до этой точки сохранения, вы сохраняете все, что было сделано до нее, теряя только работу, выполненную после точки сохранения. После отката вы можете продолжить свою работу без полного повтора транзакции:
template1=# INSERT INTO foo(column1,column2,column3) VALUES (5,9,10); INSERT 17234 1 template1=# INSERT INTO foo(column1,column2,column3) VALUES (5,9,10); INSERT 17235 1 template1=# INSERT INTO foo(column1,column2,column3) VALUES (5,9,10); INSERT 17236 1 template1=# INSERT INTO foo(column1,column2,column3) VALUES (5,9,10); INSERT 17237 1 template1=# SAVEPOINT secondary_values_inserted; SAVEPOINT template1=# SELECT * FROM foo; column1 | column2 | column3 ---------+--------+-------- 1 | 2 | 0 1 | 2 | 0 1 | 2 | 0 5 | 9 | 10 5 | 9 | 10 5 | 9 | 10 5 | 9 | 10 (7 rows) template1=# SAVEPOINT all_values_inserted; SAVEPOINT template1=# DELETE FROM foo; DELETE 7 template1=# SELECT * FROM foo; column1 | column2 | column3 ---------+--------+-------- (0 rows)
Ой. Так же, как и в первом примере этой статьи, вы в действительности хотели удалить только одну строку, в которой 'column1 = 1'. Но теперь вы можете сделать откат ко второй точке сохранения 'all_values_inserted'.
template1=# ROLLBACK TO all_values_inserted; ROLLBACK template1=# SELECT * FROM foo; column1 | column2 | column3 ---------+--------+-------- 1 | 2 | 0 1 | 2 | 0 1 | 2 | 0 5 | 9 | 10 5 | 9 | 10 5 | 9 | 10 5 | 9 | 10 (7 rows)
Обратите внимание, что это восстановило все ваши данные. Теперь вы можете выполнить корректный оператор удаления.
template1=# DELETE FROM foo WHERE column1 = 1; DELETE 3 template1=# SELECT * FROM foo; column1 | column2 | column3 ---------+--------+-------- 5 | 9 | 10 5 | 9 | 10 5 | 9 | 10 5 | 9 | 10 (4 rows)
Наконец, вы можете зафиксировать вашу транзакцию. Последняя команда SELECT показывает, что целостность данных после всех этих вставок и откатов не нарушена.
template1=# COMMIT; COMMIT template1=# select * from foo; column1 | column2 | column3 ---------+--------+-------- 5 | 9 | 10 5 | 9 | 10 5 | 9 | 10 5 | 9 | 10 (4 rows)
В PostgreSQL 8.0 имеется много новых возможностей - точки сохранения, исключительные ситуации, plPgSQL и восстановление "Point in Time". Это делает систему наиболее предпочтительной для серьезных разработчиков среди баз данных категории Open Source.
Джошуа Д. Дрейк - Президент Command Prompt, Inc. Компания занимается поддержкой PostgreSQL и разработкой заказных программных систем. Он также соавтор книги 'Practical PostgreSQL', изданной O'Reilly and Associates.
Точки сохранения транзакций в PostgreSQL Version 8 могут сохранить ваши данные
Джошуа Д. Дрейк
Перевод: ,
Оригинал:
Несомненно, транзакции очень хороши, но в предыдущих версиях PostgreSQL механизм транзакций следовал принципу "все, или ничего", ликвидируя транзакцию, если внутри нее произошла ошибка. К счастью, в новой версии PostgreSQL 8 эта проблема решается путем добавления "savepoints" (точек сохранения), которые позволяют откатить только часть транзакции и изящно восстановиться от ошибки.
Одна из очень хороших особенностей PostgreSQL - транзакции. Они предотвращают случайную потерю данных или их искажение.
Например, скажем, вы хотите удалить записи из таблицы. В PostgreSQL команда выглядит так:
template1=# DELETE FROM foo;
Однако данная команда удалит все записи в таблице. Может оказаться, что это совсем не то, чего вы хотели, и, если вы не использовали транзакцию, единственным способом восстановить базу будет восстановление из резервной копии. Используя транзакции, вернуть данные очень просто. Пусть выполняется следующая последовательность команд:
BEGIN; DELETE FROM foo; DELETE 50
Оператор BEGIN заставляет базу данных начать транзакцию. Как только вы поймете, что забыли включить раздел WHERE и удалили всю таблицу, вы сможете откатить транзакцию.
BEGIN; DELETE FROM foo; DELETE 50 ROLLBACK;
Есть один недостаток в такой реализации транзакций - если внутри транзакции произошла ошибка, вы обязаны сделать откат. Откат производится при выполнении команды rollback, задаваемой внутри транзакции, и эта команда должна быть выполнена до того, как будут выполняться какие-либо другие команды в данном соединении. После выполнения отката вы должны снова запустить транзакцию и повторить команды таким образом, чтобы не совершить ошибку. Это правило включает в себя и ошибки пользователей типа удаления всех записей в таблице, и синтаксические ошибки типа попытки выбрать строки из таблицы, которая не существует. Например:
BEGIN; UPDATE foo SET bar = (SELECT count(*) FROM baz)); INSERT INTO foo (column1) SELECT column2 FROM bar; ОШИБКА: отношение "bar" не существует CREATE TABLE bar (column1 text, column2 float); ОШИБКА: текущая транзакция прерывается, команды игнорируются до конца блока транзакции
Из-за ошибки вы будете вынуждены делать откат, и вся ваша текущая работа будет потеряна. Этот специфический аспект транзакций PostgreSQL особенно раздражает в период отладки и тестирования.
Установка
Перед тем, как вы установите в работу свеже собранный PostgreSQL, вам необходимо произвести некоторую подготовительную работу.
Для начала вам нужно создать суперпользователя PostgreSQL с именем postgres. Именно от имени этого пользователя будут осуществляться все сервисные функции обслуживания сервера PostgreSQL. Помните, что postgres - это не рядовой пользователь, а для служебных целей, значит его вход в систему должен быть заблокирован (пользоваться можно только через команду su postgres), а домашний каталог должен указывать скажем на каталог, который содержит базы данных (в нашем случае - это /var/lib/postgres).
После того как вы создали пользователя postgres вы можете приступать к установке командой
make install
Опять-таки внимательно следите за работой программы и за сообщениями об ошибках.
Вопросы администрирования
) Как мне установить PostgreSQL в место отличное от /usr/local/pgsql?
) Как мне управлять соединениями с других компьютеров?
) Какие настройки мне нужно сделать для улучшения производительности?
) Какие возможности для отладки есть в наличии?
) Почему я получаю сообщение "Sorry, too many clients" когда пытаюсь подключиться к базе?
) Почему необходимо делать dump и restore при обновлении выпусков PostgreSQL?
) Какое компьютерное "железо" я должен использовать?
Вопросы эксплуатации
) Как выполнить SELECT только для нескольких первых строчек запроса? Для произвольной строки?
) Как мне найти какие таблицы, индексы, базы данных и пользователи существуют? Как мне увидеть запросы, которые использует psql для получения этой информации?
) Как изменить тип данных колонки?
) Каковы максимальные размеры для строк в таблице, таблиц и базы данных?
) Как много дискового пространства в базе данных нужно для сохранения данных из обычного текстового файла?
) Почему мои запросы работают медлено? Почему они не используют мои индексы?
) Как посмотреть на то, как оптимизатор выполняет мой запрос?
) Как мне выполнить поиск регулярного выражения и поиск независимый от регистра букв поиск регулярного выражения? Как мне использовать индекс для поиска независимого от регистра букв?
) Как я могу определить, что значение поля равно NULL в каком-либо запросе?
) Каковы отличия между разными символьными типами?
) Как мне создать поле serial/с-авто-увеличением?
) Как мне получить значение при вставке SERIAL?
) Не может ли получиться так, что использование currval() и nextval() приведет к зациклированию с другими пользователями?
) Почему числа из моей последовательности не используются снова при отмене транзакции? Почему создаются разрывы при нумерации в колонке, где я использую последовательность/SERIAL?
) Что такое OID? Что такое TID?
) Почему я получаю ошибку "ERROR: Memory exhausted in AllocSetAlloc()"?
) Как мне узнать, какая версия PostgreSQL запущена?
) Почему при работе с моим большим объектом я получаю ошибку "invalid large obj descriptor"?
) Как мне создать колонку которая по умолчанию будет содержать текущее время?
) Как выполнить внешнее связывание?
) Как выполнять запросы, использующие несколько баз данных?
) Как мне вернуть из функции несколько строк таблицы?
) Почему я получаю ошибку "missing oid", когда обращаютсь к временным таблицам в функциях PL/PgSQL?
) Какие опции шифрования существуют?
Вопросы пользователей по клиентской части
) Какие интерфейсы есть для PostgreSQL?
) Какие инструменты существуют для использования PostgreSQL через Web?
) Есть ли у PostgreSQL графический интерфейс пользователя?
Возможности PostgreSQL
Честно говоря, я даже не знаю с чего начать. Их так много, что полная документация на PostgreSQL составляет толстенную книжку. При этом еще следует заметить, что некоторые вещи описаны довольно сухо. Ладно попытаюсь зацепить всего поманельку.
Встроенные языки
Собрав PostgreSQL соответствующим образом, вы можете практически сразу использовать следующие встроенные языки:
SQL - родной SQL диалект PostgreSQL PL/pgSQL - расширенный SQL диалект PL/Tcl - команды языка Tcl PL/Perl - команды языка Perl Embedded SQL в С - команды SQL в языке C
Все эти языки могут быть использованы для написания хранимых процедур и функций в PostgreSQL.
Это только самый общий список возможностей. Со временем я буду его дополнять, когда разберусь, что к чему.
Copyright(C).
document.write('');
Новости мира IT:
02.08 - 02.08 - 02.08 - 02.08 - 02.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 31.07 - 31.07 - 31.07 - 31.07 - 31.07 -
Архив новостей
(66)
2 Август, 17:53
(19)
2 Август, 17:51
(34)
2 Август, 15:40
(42)
2 Август, 15:35
(1)
2 Август, 14:54
(3)
2 Август, 14:34
(3)
2 Август, 14:15
(2)
2 Август, 13:34
(7)
2 Август, 13:04
(3)
2 Август, 12:28
BrainBoard.ru
Море работы для программистов, сисадминов, вебмастеров.
Иди и выбирай!
google.load('search', '1', {language : 'ru'}); google.setOnLoadCallback(function() { var customSearchControl = new google.search.CustomSearchControl('018117224161927867877:xbac02ystjy'); customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET); customSearchControl.draw('cse'); }, true);
IT-консалтинг | Software Engineering | Программирование | СУБД | Безопасность | Internet | Сети | Операционные системы | Hardware |
PR-акции, размещение рекламы — , тел. +7 495 6608306, ICQ 232284597 | Пресс-релизы — |
This Web server launched on February 24, 1997 Copyright © 1997-2000 CIT, © 2001-2009 |
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. |
недорого. |
то не работает, пишите, попробую
Ну вот вроде бы и все. Если что- то не работает, пишите, попробую посмотреть в чем может быть проблема.
Copyright(C).
document.write('');
02.08 - 02.08 - 02.08 - 02.08 - 02.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 01.08 - 31.07 - 31.07 - 31.07 - 31.07 - 31.07 -
Архив новостей
(66)
2 Август, 17:53
(19)
2 Август, 17:51
(34)
2 Август, 15:40
(42)
2 Август, 15:35
(1)
2 Август, 14:54
(3)
2 Август, 14:34
(3)
2 Август, 14:15
(2)
2 Август, 13:34
(7)
2 Август, 13:04
(3)
2 Август, 12:28
BrainBoard.ru
Море работы для программистов, сисадминов, вебмастеров.
Иди и выбирай!
google.load('search', '1', {language : 'ru'}); google.setOnLoadCallback(function() { var customSearchControl = new google.search.CustomSearchControl('018117224161927867877:xbac02ystjy'); customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET); customSearchControl.draw('cse'); }, true);
IT-консалтинг | Software Engineering | Программирование | СУБД | Безопасность | Internet | Сети | Операционные системы | Hardware |
PR-акции, размещение рекламы — , тел. +7 495 6608306, ICQ 232284597 | Пресс-релизы — |
This Web server launched on February 24, 1997 Copyright © 1997-2000 CIT, © 2001-2009 |
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. |
Нами производится привлекательная. |
Замечания по Delphi
Эти два случая из моего опыта работы с PostgreSQL из Delphi.
Первую фичу я обнаружил на методе AppendRecord. Оказывается, чтобы данный метод отработал успешно, нужно первым элементом списка ставить nil, иначе, при выполнении возникнет ошибка. Т.е. теперь AppendRecord будет выглядеть, например так:
MyQuery.AppendRecord([nil, 1, 'Василий', 'Иванович', 'Чапаев']);
а не так, как делается, например, при работе с Interbase:
MyQuery.AppendRecord([1, 'Василий', 'Иванович', 'Чапаев']);
Вторая фича касается какой-то веселой ситуации, возникшей у меня один раз с сервером. По какой-то причине, тот отказывал в обслуживании клиентам. Похоже, это произошло потому, что в этот момент выполнялся какой-то процесс по обслуживанию базы данных на самом сервере.
Симптомом послужило то, что при обращении к PostgreSQL из программы на Deplhi, сама программа весилась намертво. При этом курсор принимал на экране характерную форму при выполнении SQL запроса. Однако этот запрос все продолжал выполняться и продолжал... Через 5 минут мне это надоело и я снял задачу принудительно.
Чем было вызвано зависание программы я даже не знаю. По идее должен был отработать тайм-аут по истечении которого, должна была появиться ошибка, но этого не случилось. Может виновата кривость BDE, может ODBC драйвера.
Вылечилось просто - на сервере был перезапущен PostgreSQL.
Запуск сервера
Сделать это можно как рекомендуется в документации командой:
nohup /usr/lib/postgresql/bin/postmaster -D /var/lib/postgres/data \ >server.log 2>>1 &
Однако, гораздо удобнее воспользоваться теми сценариями запуска, которые уже существуют в Debian Linux. Приводимый ниже сценарий, может быть размещен в каталоге /etc/init.d и вызываться из System V Init, например уровня 2 при загрузке системы:
#! /bin/sh # # To stop postgresql running, do # ln -sf /bin/false /usr/lib/postgresql/bin/can_i_run # To re-enable it, do # rm /usr/lib/postgresql/bin/can_i_run
startup () { /usr/lib/postgresql/bin/postgresql-startup }
POSTMASTER=/usr/lib/postgresql/bin/postmaster
case "$1" in start) startup ;; stop) echo Stopping PostgreSQL postmaster start-stop-daemon --stop --verbose --exec ${POSTMASTER} exit 0 ;; restart) echo Restarting PostgreSQL postmaster start-stop-daemon --stop --oknodo --verbose --exec ${POSTMASTER} sleep 3 startup ;; force-reload) echo Reload not supported by PostgreSQL - restarting postmaster start-stop-daemon --stop --oknodo --verbose --exec ${POSTMASTER} sleep 3 startup ;; reload) echo PostgreSQL does not support a reload option exit 2 ;; *) echo "Usage: /etc/init.d/postgresql {start|stop|restart}" exit 1 ;; esac
exit 0
Запуск сервера осуществляется командой /etc/init.d/postgresql start, а останов /etc/init.d/postgresql stop.