Difference between revisions of "PostgreSQL (Русский)"

From ArchWiki
Jump to: navigation, search
(More Resources)
(Больше информации)
Line 114: Line 114:
  
 
==Больше информации==
 
==Больше информации==
*[http://www.postgresql.org/ Official PostgreSQL Homepage]
+
*[http://www.postgresql.org/ Официальная страница PostgreSQL]

Revision as of 09:20, 13 December 2013

Tango-preferences-desktop-locale.pngThis article or section needs to be translated.Tango-preferences-desktop-locale.png

Notes: please use the first argument of the template to provide more detailed indications. (Discuss in Talk:PostgreSQL (Русский)#)

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

Установка PostgreSQL

  • Устанавливаем postgresql
$ sudo pacman -S postgresql
  • Создаём конфигурационный файл из готовых шаблонов systemd (они находятся по адресу /usr/lib/tmpfiles.d/)
$ systemd-tmpfiles --create postgresql.conf
  • Инициализируем кластер с нужной локалью (она должна быть доступна в системе)
$ sudo su - postgres -c "initdb --locale ru_RU.UTF-8 -E UTF8 -D '/var/lib/postgres/data'"
  • Запускаем сервер PostgreSQL
$ systemctl start postgresql
  • Допонительно его можно добавить в автозагрузку
$ systemctl enable postgresql

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

  • Становимся пользователем 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. После этого необходимо перезапустить демон, чтобы изменения вступили в силу
    $ systemctl restart postgresql

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

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

$ journalctl -u postgresql

Настройка 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
    # systemctl restart httpd

Изменение кодировки новой базы данных на 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     |

Больше информации