PostgreSQL/QuickStart/ru

Это краткая инструкция к PostgreSQL. Она охватывает установку PostgreSQL и ее конфигурацию. Она является дополнением к официальной документации, но не заменяет ее.

Краткое описание PostgreSQL
PostgreSQL - это свободная система управления реляционными базами данных (RDBMS, или СУРБД) с открытым исходным кодом. Она поддерживает такие вещи как транзакции, схемы и внешние ключи, и часто позиционируется как более строго соответствующая стандартам SQL и более безопасная, по умолчанию, чем любая другая база данных, коммерческая или иная.

Посетите страницу About на postgresql.org для более подробной информации.

Что охватывает эта статья?
Эта статья проведет Вас через характерные для Gentoo шаги для установки СУРБД PostgreSQL.

Ebuild-файлы, охватываемые этой статьей: dev-db/postgresql-docs, dev-db/postgresql-base и dev-db/postgresql-server.

В этой статье предполагается, что Вы будете устанавливать последнюю, стабильную версию PostgreSQL; на время написания, этой версией является 9.0.3. Исправьте команды в этой статье так, как это требуется для Вашей определенной версии.

О ebuild-файлах
Ebuild-файлы PostgreSQL в портеже отличаются номерами слотов, основанными на главной версии. Это позволяет Вам иметь две главных версии PostgreSQL действующих одновременно; библиотеки и сервера версий 8.4 и 9.0 могут устанавливаться и обслуживаться в одно и то же время. Это полезно в тех обстоятельствах, когда Вам нужно перенести данные из старой базы данных в новую, или требуется иметь рабочую и тестовую базу данных на одной и той же машине. Также, это предотвращает перезаписывание базы данных, соответствующих библиотек или исполняемых файлов несовместимым обновлением. Это требует миграции, которая описана в данном руководстве.

Вдобавок, исправления багов и уязвимостей безопасности, которые поставляются через обновления младших версий, могут применяться без страха повреждения базы данных или самой сборки PostgreSQL; 9.0.2 может обновляться до 9.0.3, так как гарантируется их совместимость и они не требуют от Вас большего, чем установка и перезапуск серверного процесса. Ни миграция, ни повторная конфигурация, ни инициализация не являются необходимыми.

За подробностями обратитесь к PostgreSQL Versioning Policy.

Что эта статья не охватывает
Большая часть информации не будет описана. Официальная документация находится где-то во окрестностях 2000 страниц. Поэтому, в этом кратком руководстве большинство подробностей будет пропущено. Будут описаны только проблемы, характерные для Gentoo, и некоторые основные рекомендации по конфигурации.

Устаревшие ebuild-файлы
Если у Вас установлены какие-либо из следующих ebuild-файлов, то у Вас устаревшая Gentoo-сборка PostgreSQL, и вы должны мигрировать сейчас: dev-db/postgresql-libs, dev-db/postgresql-client, dev-db/libpq и/или dev-db/postgresql.

Эта статья описывает миграцию со старых ebuild-файлов к новым.

Начало Установки
Вы можете получить уведомление по поводу того, что какие-либо их вышеперечисленных пакетов заблокированы одним или всеми из следующих пакетов: dev-db/postgresql-libs, dev-db/postgresql-client, dev-db/libpq или dev-db/postgresql. Эти пакеты не поддерживаются и являются устаревшими. Обратитесь к разделу по миграции с предыдущих ebuild-файлов к новым чтобы узнать как справиться с этой ситуацией.

Подготовка к Инициализации Кластера Баз Данных
Как только пакеты завершили установку, Вы можете пожелать отредактировать. Существуют три строки, которые затрагивают значения сервера по умолчанию и не могут быть изменены позже без удаления каталога, который содержит кластер базы данных и повторной инициализации.

PGDATA определяет где размещать файлы настроек. DATA_DIR определяет где создавать кластер базы данных и сопутствующие файлы. PG_INITDB_OPTS может хранить любые дополнительные параметры, которые Вы можете пожелать установить. Установка дополнительных параметров не требуется, так как разумные значения по умолчанию, кхм, разумны.

В следующем примере, PGDATA определяет, что файлы настроек должны быть расположены в. DATA_DIR определяет, что кластер базы данных должен быть установлен в, который является каталогом по умолчанию. Если Вы решите отклониться от значений по умолчанию, держите в уме, что очень хорошей идеей будет хранить номер старшей версии в пути. PG_INITDB_OPTS определяет, что локалью по умолчанию должна быть en_US.UTF-8. То есть, U.S. English упорядочивание и форматирование, и кодировка символов UTF-8.

Существуют шесть параметров локали, которые могут быть установлены для переопределения --locale=. Следующая таблица перечисляет шесть этих параметров, которые, если используются, должны быть отформатированы как:.

Таким образом, если Вы хотите в качестве языка по умолчанию взять Английский, но сообщения должны быть, скажем, на Шведском, то Ваши PG_INITDB_OPTS будут выглядеть так:

Установка PG_INITDB_OPTS

Полный список кодировок языков и символов, поддерживаемых сервером, может быть найден в документации, но Ваша система также должна поддерживать соответственные языки и кодировки символов. Сравните вывод  с кодировками в документации.

Вы можете изменить Ваши локаль и набор кодировок во время создания базы данных. Для того, чтобы изменить локаль для базы данных после того, как Вы ее создали, Вы должны удалить базу данных и начать все сначала.

Это создаст кластер базы данных и сохранит все принадлежащие серверу файлы в PGDATA и DATA_DIR.

Где размещаются файлы конфигурации
На этот раз мы сосредоточимся на файлах в каталоге PGDATA,, с основным фокусом на файлах и.

postgresql.conf
Это основной файл конфигурации. Строкой, которая может немедленно показаться Вам интересной, является listen-addresses. Эта переменная определяет к каким адресам PostgreSQL будет осуществлять привязку. По умолчанию, привязаны только localhost и доменный сокет Unix. Изменения listen_addresses недостаточно для разрешения удаленных соединений. Это будет описано в следующем разделе. Официальная документация довольно легка для понимания и всесторонне охватывает все доступные настройки. Вам следует прочесть ее в дополнение к тому что описано здесь, так как некоторые вещи могут измениться.

Второстепенным вопросом является место назначения логирования. По умолчанию, все пишется в в каталоге DATA_DIR. Имеется целый подраздел, который охватывает большое количество вариантов того как, что и куда нужно логировать. Подраздел обозначен как: ERROR REPORTING AND LOGGING.

Кроме listen_addresses и параметров логирования, остальная часть значений по умолчанию в довольно приемлема для начала.

pg_hba.conf
Файл определяет кому разрешается подключаться к серверу баз данных и какой метод аутентификации должен быть использован для установки соединения. Опять же, документация по настройкам и тому что они означают является довольно исчерпывающей, но несколько вещей здесь описаны для разъяснения.

Как было упомянуто ранее, сервер по умолчанию сконфигурирован безопасно. В своем роде. Существует только одна роль базы данных, которая доступна для входа по умолчанию: postgres. И только одним способом инициировать соединение к базе данных является соединение через сокет Unix, который принадлежит системному пользователю и группе postgres, или установка соединения через localhost. Теперь вернемся к в своем роде. Любой пользователь системы может сделать соединение к базе данных через localhost. Даже в качестве суперпользователя базы данных postgres.

Однако же, чтобы сделать соединение через доменный сокет Unix, пользователи, включая пользователей других служб, таких как apache, должны принадлежать системной группе postgres. Используйте, чтобы добавить user в группу postgres. Пользователи, которые не входят в группу postgres будут отклонены сообщением Permissoin denied.

Метод trust - это то, что позволяет каждому пользователю входить от имени любого пользователя без пароля. Оно указывает только то, что оно подразумевает: доверять всем соединениям для определенного типа к определенной базе данных от определенного пользователя базы данных (но не системного пользователя) из определенного местонахождения без пароля. Это то что изначально позволяет каждому пользователю системы входить от имени любого пользователя через соединение localhost. Это не настолько опасно, как кажется, но представляет серьезный риск для безопасности в большинстве обстоятельств.

The two methods you will most likely use are: password and md5. The password method only specifies that a password is required to start the connection and the password is sent "in-the-clear". This method is fine when such information will never leave the machine, such as connecting via the Unix socket or localhost. The md5 method is like password, but protects the password by using an md5 hash. This is what you want to use whenever the password is going to traverse a network.

At this point, this author would like to bring your attention to the last two lines, four lines including comments, of the file. PostgreSQL has native support for IPv6 regardless of your desires for such support. Additionally, IPv4 addresses are automatically mapped to IPv6 addresses, i.e., 127.0.0.1 will be mapped to ::FFFF:127.0.0.1 and as "pure" IPv6 ::FFFF:7F00:0001.

There seems to be some misunderstanding, though, as to how host names are mapped to IP addresses. Let us take a look at the file.

From the example above you can see that both an IPv4 and an IPv6 IP address are mapped to localhost. When  refers to this file, it will grab the first match and use that as the address; in this case 127.0.0.1. When PostgreSQL parses this, it will match the IPv6 formatted address as well, e.g. ::ffff:127.0.0.1. If, however, the IPv6 address appears first, then  will map to ::1 alone; ::1 is not the same as ::ffff:127.0.0.1. As such, if you do not have ::1 as a permitted means of access,  will not be able to establish a connection. Furthermore, your kernel needs to support the IPv6 protocol.

So, it is better to specify IP addresses alone to  and in  rather than to rely on  to be ordered properly, and it removes any doubt as to which IP addresses are allowed or to which server you will connect.

Give It a Go!
Now start PostgreSQL and set the password for the database superuser postgres. The commands are to be performed as 'root' in the following code listing:

Change 'trust' to 'password' for the localhost connections.

Now start the database:

Open a connection to the server and set the password:

Change 'trust' to 'password' for the local connection:

Now restart the database:

At this point you are ready to continue on with the official PostgreSQL Tutorial. The tutorial will guide you through creating roles, databases, schemata and all that fun and useful stuff.

When You Need to Migrate
There are only two reasons you would need to perform a migration: When moving from one major version to another, e.g., from PostgreSQL 8.4.7 to 9.0.3, but not from 9.0.2 to 9.0.3; or when switching from the deprecated floating-point timestamp format to the new 64-bit integer timestamp format.

Post-9.0 Migration
pg_upgrade, a new utility that comes along with 9.0 and later, simplifies the migration process rather drastically.

However, there are two caveats with using pg_upgrade. Firstly, it does not support configuration files being in a different directory than where the data is stored. This can be resolved by using symbolic links. Lastly, you can only use it to migrate from a database from 8.3 or newer. If you have an older database you will need to follow the instructions to migrate from pre-9.0 deployments.

Don't forget to initialize the new database:

Stop the servers you're going to migrate from and to:

Check available versions, then select yours:

Change the method of database user 'postgres' to trust on local connections on all databases:

You may need to change the permissions of '/var/lib/postgresql/' before you perform the next step.

Perform the tasks pg_upgrade tells you to do, if any.

Remove the symbolic links we created earlier:

Pre-9.0 Migration: With the New Ebuilds
Because the new ebuilds feature a more advanced slotting method than the previous ones, the downtime is quite minimal, most likely minutes rather than hours.

In the following examples, it is assumed that you are using the default locations and port settings, and that you are migrating from 8.3 to 8.4. Adjust accordingly if you have deviated from the default.

If you have not already done so, follow the installation instructions before starting the migration. Such a compile may hamper performance on the database server but it can keep going.

A couple of files need to be tweaked before beginning the migration. Edit PGPORT in the configuration file to 6543. (Any port number other than what your old installation is bound to will do.)

Next, edit so that only the database superuser postgres can access the database cluster via the Unix socket.

The following should be safe. Read the documentation to be sure.

Don't forget to copy over any other configuration files that you may need.

Begin piping the data from the old cluster to the new cluster.

Edit PGPORT back to 5432.

Allow users access once more.

Hopefully everything went according to plan and you have a successfully updated server that contains precisely the same data, bit for bit, as the old server.

Pre-9.0 Migration: From the Obsolete Ebuilds
You will need to schedule some downtime for your server. The old ebuilds cannot be installed at the same time as the new ebuilds. As such, assume that the server will have to be down for a few hours. Maybe for the weekend, even.

Before starting, you will need to deny access to the server, so that no changes are made. You may also want to backup your and  and any other configuration file that you deem important.

Follow the steps detailed in this article for installing and configuring the server.

You may break some packages that were built against those packages, but once you have installed dev-db/postgresql-base and/or dev-db/postgresql-server you can run  to reemerge any packages that may have been broken.

pgAdmin III
pgAdmin III is a graphical utility for managing PostgreSQL.

Server Lacks Instrumentation Functions
This problem is easy to solve, with the solution depending on the version you are using. What is difficult about it is finding the answer. What is required is an import from a file that already exists on the storage drive:. To resolve this issue, run the command appropriate to the version you have:

Acknowledgements
We would like to thank the following authors and editors for their contributions to this guide:


 * Aaron W. Swenson
 * Mikkel A. Clausen