PostgreSQL/QuickStart/ru

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

Краткое описание PostgreSQL
PostgreSQL is a free and open source relational database management system (RDBMS). It supports such things as transactions, schemata and foreign keys, and is often touted to adhere to the SQL standards more strictly and be more secure, by default, than any other database, commercial or otherwise.

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

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

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

This article assumes that you will be installing the latest, stable version of PostgreSQL; at the time of this writing, the version was 9.3.5. Adjust the commands in this article as necessary for your specific version.

О ebuild-файлах
The PostgreSQL ebuilds in Portage feature slotting based on the major version. This allows you to have two major versions of PostgreSQL operating simultaneously; 9.0-9.4 libraries and servers can be installed and serve at the same time. This is useful in such circumstances where you need to move data from an older database to a new database, or need to have a production and a testing database on the same machine. Also, this prevents a database, corresponding libraries or executables from being overwritten by an incompatible update. That would require migration which is described in this guide.

Additionally, bug and security fixes, which are delivered via minor version updates, can be applied without fear of corrupting the database or the PostgreSQL installation itself; 9.3.4 can be updated to 9.3.5 as they are guaranteed to be compatible and require no more interaction from you than to emerge it and restart the server process neither migration, reconfiguration nor initialization are necessary.

За подробностями обратитесь к 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-файлов к новым чтобы узнать как справиться с этой ситуацией.

Подготовка к инициализации кластера баз данных
Once the packages have finished emerging, you may want to edit. There are three lines that effect the defaults of the server and cannot be changed later without deleting the directory that contains the database cluster and reinitializing.

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

In the following example, PGDATA states that the configuration files are to be located in. DATA_DIR states that the database cluster should be installed to, which is the default. If you decide to stray from the default, bear in mind that it is a very good idea to keep the major version in the path. PG_INITDB_OPTS states that the default locale should be en_US.UTF-8. That is, U.S. English ordering and formatting, and UTF-8 character encoding.

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

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

Установка PG_INITDB_OPTS

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

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

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

Где размещаются файлы конфигурации
This time the focus is upon the files in the PGDATA directory,, instead with primary focus on the  and  files.

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, будут отклонены сообщением Permission denied.

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

Два метода, которые вы наиболее вероятно будете использовать, это password и md5. Метод password только указывает, что для установления соединения требуется пароль и пароль отправляется в виде простого текста. Этот метод хорош тогда, когда такого рода информация никогда не покинет машину, как, например, при соединении через доменный сокет Unix или localhost. Метод md5 схож с password, но защищает пароль использованием хэша md5. Это то, что вам потребуется использовать, когда бы пароль ни был отправлен через сеть.

В данный момент автор хотел бы обратить ваше внимание на последние две строчки и четыре строчки, включающие комментарии, в файле. PostgreSQL имеет нативную поддержку IPv6, независимо от того, желаете ли вы такую поддержку или нет. Вдобавок, адреса IPv4 автоматически отображаются в адреса IPv6, т.е., 127.0.0.1 будет отображен в ::FFFF:127.0.0.1 и, как чистый IPv6, ::FFFF:7F00:0001.

Хотя, кажется, есть некоторое непонимание того как имена хостов отображаются в IP-адреса. Давайте рассмотрим файл.

Из примера выше вы можете видеть, что оба адреса IPv4 и IPv6 отображаются на localhost. Когда  обратится к этому файлу, она захватит первое совпадение и использует его в качестве адреса; в этом случае 127.0.0.1. Когда Postgresql его проанализирует, он также будет соответствовать адресу в формате IPv6, например, ::ffff:127.0.0.1. Если, однако же, адрес IPv6 появится первым, то тогда  отобразит его только в один ::1; ::1 — это не то же самое, что ::ffff:127.0.0.1. Таким образом, если вы не имеете ::1 в качестве разрешенных средств доступа,  не будет способна установить соединение. Кроме того, ваше ядро должно поддерживать протокол IPv6.

Поэтому, лучше будет указать только одни IP адреса для  и в файле, вместо того чтобы полагаться на то, что  упорядочен должным образом. Это устраняет любые сомнения по поводу того какие IP-адреса разрешены или к какому серверу вы будете подключаться.

Поехали!
Теперь, запустите PostgreSQL и установите пароль для суперпользователя базы данных postgres. Эти команды должны быть запущены под 'root' в следующем листинге кода.

Измените 'trust' на 'password' для соединений с localhost.

Теперь запустите базу данных:

Откройте соединение к серверу и установите пароль:

Измените 'trust' на 'password' для локальных соединений:

Теперь перезагрузите настройки базы данных:

Finally, once everything works as it should, have PostgreSQL start at boot:

На данный момент вы готовы продолжать с официальным Руководством PostgreSQL. Это руководство проведет вас через создание ролей, баз данных, схем и все эти интересные и полезные вещи.

Когда вам требуется миграция
Существуют только две причины по которым вам необходимо выполнить миграцию: при переходе от одной главной версии к другой, например, от PostgreSQL 8.4.7 к 9.0.3, но не от 9.0.2 к 9.0.3; или при переключении с устаревшего формата временных меток с плавающей точкой к новому 64-битному целочисленному формату временных меток.

Миграция после версии 9.0
pg_upgrade, новая утилита, которая поставляется с версиями 9.0 и позже, радикально упрощает процесс миграции.

Однако, имеются два предостережения при использовании утилиты pg_upgrade. Во-первых, она не поддерживает файлы конфигурации, находящиеся в каталоге, отличном от того, где хранятся данные. Это может быть разрешено использованием символьных ссылок. Во-вторых, вы можете использовать ее только для миграции с базы данных начинающейся с версии 8.3 или более новой. Если вы имеете более старую базу данных, вам нужно следовать инструкциям по миграции с установок, предшествующих версии 9.0.

Don't forget to initialize the new database:

Остановите серверы с которых и на которые вы собираетесь мигрировать:

Проверьте доступные версии и затем выберите вашу:

Измените метод аутентификации пользователя базы данных 'postgres' так, чтобы доверять локальным соединениям на всех базах данных:

Вам может потребоваться изменить разрешения на '/var/lib/postgresql/' перед выполнением следующего шага.

Выполните команды, которые pg_upgrade требует запустить, если таковые имеются.

And now you're done:

Миграция перед версией 9.0: с помощью новых ebuild-файлов
По той причине, что новые ebuild-файлы предлагают более совершенный метод слоттинга, чем предыдущие, время простоя довольно мало, скорее всего это будут минуты, нежели часы.

В следующих примерах предполагается, что вы используете местоположения и настройки портов по умолчанию, и что вы мигрируете с 8.3 на 8.4. Отрегулируйте их соответствующим образом, если вы отклонились от значений по умолчанию.

Если вы еще этого не сделали, следуйте инструкциям по установке перед началом миграции. Такая компиляция может повлиять негативным образом на производительность сервера баз данных, но, тем не менее, она может выполняться.

Необходимо отредактировать пару файлов перед началом миграции. Установите PGPORT в файле конфигурации на 6543. (Подойдет любой порт отличный от того, который привязан к предыдущей установке.)

Затем, отредактируйте так, чтобы только суперпользователь базы данных postgres мог получить доступ к кластеру базы данных через доменный сокет Unix.

Следующие инструкции должны быть безопасны. Прочтите документацию, чтобы быть в этом уверенными.

Не забудьте скопировать те файлы конфигурации, которые могут вам понадобиться.

Начинайте переправлять данные со старого кластера на новый кластер.

Установите PGPORT обратно на 5432.

Разрешите пользователям доступ еще один раз.

Надеемся, все прошло по плану и вы успешно обновили сервер, который содержит те же самые данные, точь-в-точь, как и старый сервер.

Миграция перед версией 9.0: со старых ebuild-файлов
Вам потребуется запланировать некоторое время простоя для вашего сервера. Старые ebuild-файлы не могут быть установлены в то же самое время, что и новые. Таким образом, заранее предположите, что сервер будет остановлен в течение нескольких часов. Даже, может быть, на все выходные.

Перед началом, вам понадобится запретить доступ к серверу, так, чтобы не сделать изменений. Вы также можете пожелать сделать резервное копирование и  и любого другого файла конфигурации, который вы считаете важным.

Следуйте шагам по установке и конфигурации сервера, описанным в подробностях в этой статье.

Вы можете повредить некоторые пакеты, которые были собраны с этими пакетами, но как только вы установили dev-db/postgresql-base и/или dev-db/postgresql-server, вы можете запустить , чтобы заново установить любые пакеты, которые могут быть повреждены.

pgAdmin III
pgAdmin III — это графическая утилита для управления 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 one of the following commands appropriate to the version you have.

For PostgreSQL 9.0 and earlier:

For PostgreSQL 9.1 and later:

Missing config files in and
You can try to move the config files into the directory, where x is your postgresql version number, as follows:

If those files are missing you will need to initialize them.

First su into the postgres user:

Then, as the postgres user, run  and specify the data directory:

This will generate your configuration files and allow you to copy them over to as shown in the first command in this section.

"ERROR: timezone directory stack overflow" or "FATAL: too many private dirs demanded"
This is caused by a symlink loop. To fix it, type the following:

Keep in mind that any update to zoneinfo will recreate this symlink, thus requiring you to remove it again.

Systemd
Force the service to start on bootup:

To start service immediately:

If an error occurs check if the directory is there. If not, then create it like so:

Check the config file permissions:

Благодарности
Мы хотели бы поблагодарить следующих авторов и редакторов за их вклад в это руководство:


 * Aaron W. Swenson
 * Mikkel A. Clausen