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

From ArchWiki
Jump to: navigation, search
(systemd compat)
Line 112: Line 112:
 
                                                       : postgres=CTc/postgres
 
                                                       : postgres=CTc/postgres
 
  template1 | postgres | UTF8      | C        | C    |
 
  template1 | postgres | UTF8      | C        | C    |
 
==Installing phpPgAdmin (optional)==
 
[http://phppgadmin.sourceforge.net 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<pre># pacman -S phppgadmin</pre>
 
 
===Option B: install via a manual install (the old way)===
 
#Download the latest .bz2 file from [http://phppgadmin.sourceforge.net/?page=download here] into the root of your server directory <pre>wget -P /home/httpd/html<nowiki> http://downloads.sourceforge.net/phppgadmin/phpPgAdmin-4.1.3.tar.bz2</nowiki></pre>
 
#Extract the file into the new directory<pre>tar -C /home/httpd/html/ -jxvf /home/httpd/html/phpPgAdmin-4.1.3.tar.bz2</pre>
 
#Remove the tar file<pre>rm /home/httpd/html/phpPgAdmin-4.1.3.tar.bz2</pre>
 
#Change the name of the directory created in the previous step to include the version number (this will help in the future when upgrading)<pre>mv /home/httpd/html/phpPgAdmin /home/httpd/html/phpPgAdmin-4.1.3/</pre>
 
#Create a link to that directory (for ease of linking and upgrading)<pre>ln -s /home/httpd/html/phpPgAdmin-4.1.3/ /home/httpd/html/phpPgAdmin</pre>
 
#Copy the included generic config file<pre>cp /home/httpd/html/phpPgAdmin/conf/config.inc.php-dist /home/httpd/html/phpPgAdmin/conf/config.inc.php</pre>
 
 
 
The config file is located at '''/home/httpd/html/phpPgAdmin/conf/config.inc.php'''. No changes should be required. Check [http://phppgadmin.sourceforge.net/?page=faq this page] for any other setup questions that you might have.
 
 
==Upgrading Postgresql ==
 
{{Warning|Official postgresql [http://www.postgresql.org/docs/current/static/install-upgrading.html 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 [http://www.postgresql.org/docs/faqs.FAQ.html#item3.6 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
 
[http://www.postgresql.org/docs/8.3/static/app-pg-dumpall.html pg_dumpall] > pgs_db.out
 
 
Unless you have a [http://www.postgresql.org/docs/8.3/static/libpq-pgpass.html .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
 
systemctl stop postgresql
 
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)
 
systemctl start postgresql
 
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==
 
==More Resources==
 
*[http://www.postgresql.org/ Official PostgreSQL Homepage]
 
*[http://www.postgresql.org/ Official PostgreSQL Homepage]

Revision as of 09:19, 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     |

More Resources