PostgreSQL 9.2 Начало!

  • Tutorial
Мне хотелось создать прекрасный объемлющий мануал Getting Start без всякой воды, но включающий основные плюшки для начинающих по системе PostgreSQL в Linux.

PostgreSQL является объектно-реляционной системой управления базами данных (ОРСУБД) на основе POSTGRES, версия 4.2, разработанной в Университете Калифорнии в Беркли департаменте компьютерных наук.

PostgreSQL является open source потомком оригинального кода Berkeley. Он поддерживает большую часть стандарта SQL и предлагает множество современных функций:


Кроме того, PostgreSQL может быть расширен пользователем во многих отношениях, например, путем добавления новых
  • типов данных
  • функций
  • операторов
  • агрегатных функций
  • индекс методов
  • процедурных языков


Сборка и установка


Как и все любители мейнстрима PostgreSQL мы будем конечно же собирать, а не скачивать готовые пакеты (в репозитариях Debian, например, нет последней версии). Вот здесь лежит множество версий, скачивать конечно же лучше всего последнюю. На момент написания поста это версия 9.2.2

wget http://ftp.postgresql.org/pub/source/v9.2.2/postgresql-9.2.2.tar.gz
tar xzf postgresql-9.2.2.tar.gz

Теперь у нас есть директория с исходниками сей прекрасной базы данных.
По умолчанию файлы базы будут установлены в директорию /usr/local/pgsql, но эту директорию можно изменить задав

--prefix=/path/to/pgsql

перед командой ./configure
Перед сборкой можно указать компилятор С++

export CC=gcc

PostgeSQL может использовать readline библиотеку, если у вас её нет и нет желания её ставить просто укажите опцию

--without-readline

Надеюсь у всех есть Autotools? Тогда вперед к сборке:

cd postgresql-9.2.2
./configure --without-readline
sudo make install clean

Все господа! Поздравляю!

Настройка


Нам необходимо указать хранилище данных наших баз данных (кластер) и запустить её.

Есть один нюанс — владельцем директории данных и пользователь, который может запускать базу должен быть не root. Это сделано в целях безопасности системы. Поэтому создадим специального пользователя
sudo useradd postgres -p postgres -U -m

И далее все понятно

sudo chown -R postgres:postgres /usr/local/pgsql

Важный процесс. Мы должны инициализировать кластер баз дынных. Сделать мы должны это от имени пользователя postgres

initdb -D /usr/local/pgsql/data

Теперь нужно добавить запуск PostgreSQL в автостарт. Для этого существует уже готовый скрипт и лежит он в postgresql-9.2.2/contrib/start-scripts/linux
Этот файл можно открыть и обратить внимание на следующие переменные:
  • prefix — это место куда мы ставили PostgreSQL и задавали в ./configure
  • PGDATA — это то, где хранится кластер баз данных и куда должен иметь доступ наш пользователь postgres
  • PGUSER — это тот самый пользователь, от лица которого будет все работать

Если все стоит верно, то добвляем наш скрипт в init.d

sudo cp ./postgresql-9.2.2/contrib/start-scripts/linux /etc/init.d/postgres
sudo update-rc.d postgres defaults

Перезапускам систему, чтобы проверить что наш скрипт работает.
Вводим

/usr/local/pgsql/bin/psql -U postgres

И если появится окно работы с базой, то настройка прошла успешно! Поздравляю!
По умолчанию создается база данных с именем postgres

Теперь важно поговорить о методах авторизации.
В /usr/local/pgsql/data/pg_hba.conf как раз есть необходимые для этого настройка

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     trust
host    all             all             127.0.0.1/32            trust
host    all             all             ::1/128                 trust

Первая строка отвечает за локальное соединение, вторая — за соединение про протоколу IPv4, а третья по протоколу IPv6.
Самый последний параметр — это как раз таки метод авторизации. Его и рассмотрим (только основные)
  • trust — доступ к базе может получить кто угодно под любым именем, имеющий с ней соединение.
  • reject — отклонить безоговорочно! Это подходит для фильтрации определенных IP адресов
  • password — требует обязательного ввода пароля. Не подходит для локальных пользователей, только пользователи созданные командой CREATE USER
  • ident — позволяет только пользователем зарегистрированным в файле /usr/local/pgsql/data/pg_ident.conf устанавливать соединение с базой.

Вкратце расскажу об основных утилитах, которые пригодятся в работе.

Утилиты для работы с базой


pg_config
Возвращает информацию о текущей установленной версии PostgreSQL.

initdb
Инициализирует новое хранилище данных (кластер баз данных). Кластер представляет собой совокупность баз данных управляемых одним экземпляром севера. initdb должен быть запущен от имени будущего владельца сервера (как указано выше от имени postgres).

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

psql
Клиент для работы с базой дынных. Позволяет выполнять SQL операции.

createdb
Создает новую базу данных. По умолчанию, база данных создается от имени пользователя, который запускает команду. Однако, чтобы задать другого — необходимо использовать опцию -O (если у пользователя есть необходимые привилегии для этого). По сути — это обертка SQL команды CREATE DATABASE.
dropdb
Удаляет базу данных. Является оберткой SQL команды DROP DATABASE.

createuser
Добавляет нового пользователя базы дынных. Является оберткой SQL команды CREATE ROLE.
dropuser
Удаляет пользователя базы данных. Является оберткой SQL команды DROP ROLE.

createlang
Добавляет новый язык программирования в базу PostgreSQL. Является оберткой SQL команды CREATE LANGUAGE.
droplang
Удаляет язык программирования. Является оберткой SQL команды DROP LANGUAGE.

pg_dump
Создает бэкап (дамп) базы данных в файл.
pg_restore
Восстанавливает бэкап (дамп) базы данных из файла.
pg_dumpall
Создает бэкап (дамп) всего кластера в файл.

reindexdb
Производит переиндексацию базы данных. Является оберткой SQL команды REINDEX.

clusterdb
Производит перекластеризацию таблиц в базе данных. Является оберткой SQL команды CLUSTER.

vacuumdb
Сборщик мусора и оптимизатор базы данных. Является оберткой SQL команды VACUUM.

Менеджеры по работе с базой


Что касается менеджера по работа с базой, то есть php менеджер — это phpPgAdmin и GUI менеджер pgAdmin. Должен заметить, что они оба плохо поддерживают последнюю версию PostgreSQL.

P.S Если что-то забыл, скажите — добавлю.
Share post

Similar posts

Comments 26

    0
    Если покопаться на сайте, то можно увидеть, что есть репозитории с последними версиями СУБД для различных дистрибутивов, в том числе Debian.
    P.S.Интересно почитать про анализ и оптимизацию производительности PostgreSQL </реквест>
      –1
      тут идея в самой сборке!
        +1
        Понимаете, дело в том, что собирать софт из исходников в дистрибутивах с пакетными менеджерами — это не только плохой тон, но так делать нельзя, по разным причинам (на хабре есть подробные статьи на эту тему).

        В популярных дистрибутивах, кстати говоря, пакетные менеджеры предоставляют возможность пересобрать нужный пакет из исходников с требуемыми настройками.
      +3
      Два вопроса:
      1. Почему вы не пользуетесь пакетным менеджером?
      2. Почему вы делаете trust для localhost, вместо того чтобы по-человечески защитить всё логином/паролем?

      Извините, но это руководство из серии "$cat README"
        –1
        Идея в самой сборке.
        Я представил pg_hab.conf по умолчанию и выбор отдал пользователю.
          +5
          Тогда суть статьи — это configure && make && make install
          0
          Извините, но это руководство из серии "$cat README"

          Приведите пожалуйста точную команду для вывода информации из статьи.
            0
            ~/src/postgresql-9.1-9.1.7$ head -n 25 INSTALL
            PostgreSQL Installation from Source Code

            This document describes the installation of PostgreSQL using the source
            code distribution. (If you are installing a pre-packaged distribution,
            such as an RPM or Debian package, ignore this document and read the
            packager's instructions instead.)
            __________________________________________________________________

            Short Version

            ./configure
            gmake
            su
            gmake install
            adduser postgres
            mkdir /usr/local/pgsql/data
            chown postgres /usr/local/pgsql/data
            su — postgres
            /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
            /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
            /usr/local/pgsql/bin/createdb test
            /usr/local/pgsql/bin/psql test

            The long version is the rest of this document.
              –3
              Это лишь часть)
                +1
                Пажалста :)
                ~/src/postgresql-9.1-9.1.7$ find src/bin -type f -executable -exec {} --help \;
                  –5
                  ну замечательно!!! Проходите дальше!!!
          +8
          >--without-readline

          Это просто наказание для того, кто будет работать из консоли.
            +4
            Я думал, будут описаны новшества, нюансы, грабли 9.2 с точки зрения собственного опыта. Например, как перетащить огромный проект с 8.4 на 9.2 с наименьшими рисками.
              0
              В следующих темах.
                0
                Спустя три года наткнулся в поисковике на этот топик, посмотрел ваши «следующие темы», а там пусто :(
              0
              pgtune может спасти от OoM киллеров. Рекомендую использовать.
                +1
                Вы забыли дать ссылку на книгу «Работа с PostgreSQL» А.Ю.Васильева, postgresql.leopard.in.ua/

                Кроме того, для Debian последние версии PostgreSQL и PostGIS недавно появились на backports-master.debian.org/.
                  +6
                  Такой заголовок многообещающий и контент вообще ни о чем. Жаль.
                    0
                    Вообще-то я дейсвительно хотел куда больше рассказать о настройках и нюансах, но не дотерпел. решил в след статьях.
                    0
                    А мне понравилось, спасибо автору. Для нубов в самый раз. Всегда напрягал этот момент, для того чтобы установить Postgre нужно пройти 20+ шагов и притом хорошо разбираться в самом линуксе.
                    Подскажите нет ли решения вопроса в 2-3 строчки )? как например при установке Lamp, mysql ставится практически в авто режиме.
                      0
                      emerge postgresql-server
                      emerge --config postgresql-server
                        0
                        Чтобы установить достаточно, как правило, одной строчки (с любым пакетным менеджером).
                        Тут речь про сборку 9.2.x версии, которой пока нет в стабильных версиях дистрибутивов.
                        Вот только для 95% случаев подходят 8.7.x или 9.1.x версии, а они есть практически везде.
                        0
                        Пользуясь случаем и громким заголовком, хочу спросить…
                        Кто-нибудь работал в постгре с XML? А Если быть точнее, пытался сделать xml escape/unescape? Я вот столкнулся с тем, ч то не могу достать текст из xml-я в декодированном виде
                          0
                          В целом не плохо.
                          Только вы зря используете термин «кластер».
                          В общеустоявшмся понимании, «кластер» — это совокупность нескольких отдельных серверов баз данных (несколько отдельных машин), а не несколько разных баз в одном сервере.
                          И такая ваша трактовка сильно сбивает с толка.
                            0
                            А вот теперь для нубов. Что делает эта строчка?

                            sudo chown -R postgres:postgres /usr/local/pgsql
                              0
                              Смена владельца папки и ее содержимого.

                            Only users with full accounts can post comments. Log in, please.