PostgreSQL (Русский)
Эта статья описывает как настроить 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.
Замечание | По умолчанию эта папка не доступна даже для просмотра (или поиска) от лица обычного пользователя.
- Из-под пользователя root редактируем файл
$ sudo nano /var/lib/postgres/data/postgresql.conf
- В разделе connections and authentications раскомментируйте или исправьте строку
listen_addressesпо вашему желаниюlisten_addresses = '*'
и внимательно просмотрите другие строки. - Далее добавляем следующую строку в основной файл настройки проверки подлинности
/var/lib/postgres/data/pg_hba.conf. Этот файл определяет, каким хостам разрешено подключаться, так что будьте осторожны.# IPv4 local connections: <br>host all all your_desired_ip_address/32 trust
гдеyour_desired_ip_addressip адрес клиента. - После этого необходимо перезапустить демон, чтобы изменения вступили в силу
$ sudo /etc/rc.d/postgresql restart
Замечание | Postgresql по умолчанию использует порт 5432 для удалённого доступа. Поэтому убедитесь, что этот порт открыт и может принимать входящие соединения
Если возникли проблемы взгляните на лог-файл сервера
tail /var/log/postgresql.log
Настройка PostgreSQL для работы с PHP
- Установите модуль PHP-PostgreSQL
$ pacman -S php-pgsql
- Откройте файл
/etc/php/php.iniв удобном для вас текстовом редакторе, например,# sudo nano /etc/php/php.ini
- Найдите строку, начинающуюся с, ";extension=pgsql.so" и исправьте её так: "extension=pgsql.so". (Только уберите ";"). Если вы используете PDO, сделайте то же самое с ";extension=pdo.so" and ";extension=pdo_pgsql.so". Если этих строк нет, добавьте их. Эти строки находятся в разделе файла "Dynamic Extensions", или в самом конце файла.
- Перезапустите веб сервер 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)
- Make sure that the [community] repo is enabled.
- Install the package via Pacman
# pacman -S phppgadmin
Option B: install via a manual install (the old way)
- 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
- Extract the file into the new directory
tar -C /home/httpd/html/ -jxvf /home/httpd/html/phpPgAdmin-4.1.3.tar.bz2
- Remove the tar file
rm /home/httpd/html/phpPgAdmin-4.1.3.tar.bz2
- 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/
- 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
- 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
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