- Home
- Packages
- Forums
- Wiki
- Bugs
- AUR
- Download

# PostgreSQL (Русский)

From ArchWiki

Эта статья описывает как настроить PostgreSQL и интегрировать ее с PHP и Apache. Она также описывает, как сделать PostgreSQL доступным из клиента удалённого доступа. Считаем, что PHP и Apache уже установлены. Если вам нужна помощь настройки любой из этих программ, смотрите LAMP и следуйте всем разделам, кроме связанного с MySQL.

## Установка PostgreSQL

- Устанавливаем postgresql

    $ sudo pacman -S postgresql

- Запускаем сервер PostgreSQL (При первом запуске создаётся каталог данных и пользователей, необходимый для запуска сервера. Весь процесс отражается в выводе.)

    $ sudo /etc/rc.d/postgresql start

- Убедитесь в том, пользователь postgres создан и находится в группе postgres.

    $ groups postgres

- (Не обязательно) Добавьте postgresql в перечень демонов запускаемых при старте системы в файле /etc/rc.conf.

## Создание Вашей первой базы данных

- Становимся пользователем postgres (этот пользователь был создан при запуске "/etc/rc.d/postgresql start".)

    su root
    su - postgres

- Добавляем нового пользователя базы данных

    createuser -DRSP <username>

-D Пользователь не может создавать базы данных
-R Пользователь не может создавать аккаунты
-S Пользователь не является суперпользователем
-P Запрашивать пароль при создании

С другой стороны, вы можете использовать команду createuser без параметров. Вывод в терминале выглядит так::

    # createuser <username>
    Shall the new role be a superuser? (y/n)  n
    Shall the new role be allowed to create databases? (y/n)  y
    Shall the new role be allowed to create more new roles? (y/n)  y

- Если имя созданного пользователя совпадает с именем пользователя ($ USER) вы получите доступ к базе данных оболочки PostgreSQL без указания имени пользователя (что весьма удобно).

- Создайте новую базу даных от пользователя, имеющего разрешение на чтение и запись (read/write).

    createdb -O username databasename [-E database_encoding]

- Вот и всё! Ваша база данных создана.

## Знакомство с PostgreSQL

### Доступ к оболочке базы данных

- Становимся postgres пользователем, чтобы иметь возможность задать ваши права (как у основного пользователя)

    $ sudo su postgres

- Запускаем основную оболочку базы данных, в которой мы сможем создавать, удалять базы данных/таблицы, задавать права и запускать команды SQL.

    $ psql

  --Вы также можете использовать `psql <database_name>` для редактирования конкретной базы данных.

- Подключаем базу данных

    => \c <database>

Configure Postgre*Список всех пользователей и их уровни доступа

    => \du

- Краткая информация о всех таблицах в текущей базе данных

    => \dt

Есть, конечно, много других мета-команд, но именно эти должны помочь вам начать работу.

## Настройка удалённого доступа к PostgreSQL

Файл настроек сервера баз данных PostgreSQL `postgresql.conf`. Этот файл находится в папке данных сервера, обычно `/var/lib/postgres/data`. В этой же папке находятся основные файлы настроек включая и `pg_hba.conf`. Замечание | По умолчанию эта папка не доступна даже для просмотра (или поиска) от лица обычного пользователя.

1. Из-под пользователя root редактируем файл

       $ sudo nano /var/lib/postgres/data/postgresql.conf

2. В разделе connections and authentications раскомментируйте или исправьте строку`listen_addresses` по вашему желанию

       listen_addresses = '*'

   и внимательно просмотрите другие строки.
3. Далее добавляем следующую строку в основной файл настройки проверки подлинности `/var/lib/postgres/data/pg_hba.conf`. Этот файл определяет, каким хостам разрешено подключаться, так что будьте осторожны.

       # IPv4 local connections: <br>host   all   all   your_desired_ip_address/32   trust

   где `your_desired_ip_address` ip адрес клиента.
4. После этого необходимо перезапустить демон, чтобы изменения вступили в силу

       $ sudo /etc/rc.d/postgresql restart

Замечание | Postgresql по умолчанию использует порт 5432 для удалённого доступа. Поэтому убедитесь, что этот порт открыт и может принимать входящие соединения

Если возникли проблемы взгляните на лог-файл сервера

    tail /var/log/postgresql.log

## Настройка PostgreSQL для работы с PHP

1. Установите модуль PHP-PostgreSQL

       $ pacman -S php-pgsql

2. Откройте файл `/etc/php/php.ini` в удобном для вас текстовом редакторе, например,

       # sudo nano /etc/php/php.ini

3. Найдите строку, начинающуюся с, ";extension=pgsql.so" и исправьте её так: "extension=pgsql.so". (Только уберите ";"). Если вы используете PDO, сделайте то же самое с ";extension=pdo.so" and ";extension=pdo_pgsql.so". Если этих строк нет, добавьте их. Эти строки находятся в разделе файла "Dynamic Extensions", или в самом конце файла.
4. Перезапустите веб сервер Apache

       # /etc/rc.d/httpd restart

## Изменение кодировки новой базы данных на UTF-8 (По вашему усмотрению)

Когда создаётся новая база данных (например, `createdb blog`) PostgreSQL просто копирует шаблон базы данных. Есть два стандартных шаблона: template0 - ваниль, и template1 используемый по умолчанию. Один из вариантов изменения кодировки новой базы данных, заключается в изменении шаблона template1. Для этого, заходим в оболочку PostgresSQL (psql) и делаем вот что:

1. Первое, мы должны сбросить template1. Шаблоны не могут быть сброшены, так что мы сначала изменим его, как обычную базу данных:

    UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';

2. Сейчас уже можно сбросить её:

    DROP DATABASE template1;

3. Создаём новую базу данных, с новой кодировкой по умолчанию из template0:

    CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';

4. Теперь снова сделаем template1 шаблоном:

    UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';

5. (Рекомендация) Документация по PostgreSQL advises рекомендует "замораживать" изменения шаблона функцией VACUUM FREEZE:

    \c template1
    VACUUM FREEZE;

6. (По желанию) Если вы не хотите, чтобы кто-либо подключался к этому шаблону, присвойте параметру datallowconn значение FALSE:

    UPDATE pg_database SET datallowconn = FALSE WHERE datname = 'template1';

Теперь вы можете создать базу данных используя стандартные команды в терминале:

    su -
    su - postgres
    createdb blog;

Если снова войти в PSQL и проверить базу данных, вы должны увидеть правильную кодировку новой базы данных:

    \l

returns

                                  List of databases
      Name    |  Owner   | Encoding  | Collation | Ctype |   Access privileges
    -----------+----------+-----------+-----------+-------+----------------------
    blog      | postgres | UTF8      | C         | C     |
    postgres  | postgres | SQL_ASCII | C         | C     |
    template0 | postgres | SQL_ASCII | C         | C     | =c/postgres
                                                         : postgres=CTc/postgres
    template1 | postgres | UTF8      | C         | C     |

## Installing phpPgAdmin (optional)

phpPgAdmin is a web-based administration tool for PostgreSQL. It can be installed two ways.

### Option A: install via Pacman (preferred)

1. Make sure that the [community] repo is enabled.
2. Install the package via Pacman

       # pacman -S phppgadmin

### Option B: install via a manual install (the old way)

1. Download the latest .bz2 file from here into the root of your server directory

       wget -P /home/httpd/html http://downloads.sourceforge.net/phppgadmin/phpPgAdmin-4.1.3.tar.bz2

2. Extract the file into the new directory

       tar -C /home/httpd/html/ -jxvf /home/httpd/html/phpPgAdmin-4.1.3.tar.bz2

3. Remove the tar file

       rm /home/httpd/html/phpPgAdmin-4.1.3.tar.bz2

4. Change the name of the directory created in the previous step to include the version number (this will help in the future when upgrading)

       mv /home/httpd/html/phpPgAdmin /home/httpd/html/phpPgAdmin-4.1.3/

5. Create a link to that directory (for ease of linking and upgrading)

       ln -s /home/httpd/html/phpPgAdmin-4.1.3/ /home/httpd/html/phpPgAdmin

6. Copy the included generic config file

       cp /home/httpd/html/phpPgAdmin/conf/config.inc.php-dist /home/httpd/html/phpPgAdmin/conf/config.inc.php

The config file is located at /home/httpd/html/phpPgAdmin/conf/config.inc.php. No changes should be required. Check this page for any other setup questions that you might have.

## Upgrading Postgresql

Warning: Official postgresql upgrade documentation should be followed.

First thing: these instructions could cause data loss. Use at your own risk. They work for me, but things change and nothing is guaranteed.

I would highly suggest adding the line

    IgnorePkg = postgresql

to /etc/pacman.conf. This will make sure that you don't accidentally upgrade the database to an incompatible version. If you did an accidental upgrade you might not be able to access any of your data. Always check the Postgresql home page (http://www.postgresql.org/) to be sure of what steps are required for each upgrade. For a bit about why this is the case see this.

How to dump all of your data, upgrade PostgreSQL, and then restore all of your data (this may not be necessary for every upgrade, see #2 above)

Become the root user

    su

Become the postgres user

    su postgres

Change the current directory to one that the postgres user can write to

    eg. cd ~/data/

Dump the current contents of the database

    pg_dumpall > pgs_db.out

Unless you have a .pgpass file setup, you will be required to enter your password a few times (the number of times is roughly equal to the number of databases that you have + 2). One problem occurs if you don't have a password defined for the postgres user but you require local users to authenticate. In this case you will be asked to give a password that doesn't exist. To work around this problem, add a line to your pg_hba.conf file to trust the postgres user. You can remove this line after the upgrade is complete. So, the first line of the 'local' section of pg_hba.conf would look something like this:

    local     all postgres                                trust

Log out of the postgres user and return to superuser

    exit

Stop the PostgreSQL server

    /etc/rc.d/postgresql stop

Move Postgresql's data directory

    mv /var/lib/postgres /var/lib/postgres_old

Upgrade postgresql

    pacman -S postgresql

Start the PostgreSQL server (this will create all needed files and directories)

    /etc/rc.d/postgresql start

Become the postgres user

    su postgres

Change the current directory to the directory that you dumped the data out to (in step 4 above)

    eg. cd /var/lib/postgres_old/data/

Restore the database

    psql -e template1 -f pgs_db.out

## More Resources

- Official PostgreSQL Homepage

Retrieved from "https://wiki.archlinux.org/index.php?title=PostgreSQL_(Русский)&oldid=252296"
Categories:

- Русский
- Database management systems (Русский)

## Navigation menu