Главная страница

Как установить Postgresql на Linux и Windows с. 16


Скачать 1.38 Mb.
Название Как установить Postgresql на Linux и Windows с. 16
Дата10.07.2022
Размер1.38 Mb.
Формат файлаpdf
Имя файлаpotgresql.pdf
ТипДокументы
#628132
страница7 из 8
1   2   3   4   5   6   7   8

SELECT pg_reload_conf();
Подробнее о настройках аутентификации:
postgrespro.ru/doc/client-authentication.html
Проверка связи
Для того, чтобы обратиться к PostgreSQL из програм- мы на каком-либо языке программирования, необходи- мо использовать подходящую библиотеку и установить драйвер СУБД.
Ниже приведены простые примеры для нескольких по- пулярных языков, которые помогут быстро проверить соединение с базой данных. Приведенные программы намеренно содержат только минимально необходимый код для запроса к базе данных; в частности, не преду- смотрена никакая обработка ошибок. Не стоит рассмат- ривать эти фрагменты как пример для подражания.
Если вы используете ОС Windows, не забудьте в окне
Command Prompt сменить шрифт на TrueType (например,
«Lucida Console» или «Consolas») и выполнить команды:
C:\> chcp 1251
Active code page: 1251
C:\> set PGCLIENTENCODING=WIN1251
110

PHP
В языке PHP работа с PostgreSQL организована с помо- щью специального расширения. В Linux кроме самого
PHP нам потребуется пакет с этим расширением:
$ sudo apt-get install php5-cli php5-pgsql
PHP для Windows можно установить с сайта windows.
php.net/download. Расширение для PostgreSQL уже вхо- дит в комплект, но в файле php.ini необходимо найти и раскомментировать строку (убрать точку с запятой):
;extension=php_pgsql.dll
Пример программы (test.php):
$conn = pg_connect('host=localhost port=5432 ' .
'dbname=appdb user=app ' .
'password=p@ssw0rd') or die;
$query = pg_query('SELECT * FROM greeting') or die;
while ($row = pg_fetch_array($query)) {
echo $row[0].PHP_EOL;
}
pg_free_result($query);
pg_close($conn);
?>
Выполняем:
$ php test.php
Привет, мир!
Расширение для PostgreSQL описано в документации:
php.net/manual/ru/book.pgsql.php.
111

Perl
В языке Perl работа с базами данных организована с помощью интерфейса DBI. Сам Perl предустановлен в Debian и Ubuntu, так что дополнительно нужен только драйвер:
$ sudo apt-get install libdbd-pg-perl
Существует несколько сборок Perl для Windows, кото- рые перечислены на сайте www.perl.org/get.html.
ActiveState Perl и Strawberry Perl уже включают необ- ходимый для PostgreSQL драйвер.
Пример программы (test.pl):
use DBI;
my $conn = DBI->connect(
'dbi:Pg:dbname=appdb;host=localhost;port=5432',
'app','p@ssw0rd') or die;
my $query = $conn->prepare('SELECT * FROM greeting');
$query->execute() or die;
while (my @row = $query->fetchrow_array()) {
print @row[0]."\n";
}
$query->finish();
$conn->disconnect();
Выполняем:
$ perl test.pl
Привет, мир!
Интерфейс описан в документации:
metacpan.org/pod/DBD::Pg.
112

Python
В языке Python для работы с PostgreSQL обычно ис- пользуется библиотека psycopg (название произносит- ся как «сайко-пи-джи»). В Debian и Ubuntu язык Python версии 2 предустановлен, так что нужен только драйвер:
$ sudo apt-get install python-psycopg2
(Если вы используете Python 3, установите вместо этого пакет python3-psycopg2.)
Python для операционной системы Windows можно взять с сайта www.python.org. Библиотека psycopg до- ступна на сайте проекта initd.org/psycopg (выбери- те версию, соответствующую установленной версии
Python). Там же находится необходимая документация.
Пример программы (test.py):
import psycopg2
conn = psycopg2.connect(
host='localhost', port='5432', database='appdb',
user='app', password='p@ssw0rd')
cur = conn.cursor()
cur.execute('SELECT * FROM greeting')
rows = cur.fetchall()
for row in rows:
print row[0]
conn.close()
Выполняем:
$ python test.py
Привет, мир!
113

Java
В языке Java работа с базой данных организована через интерфейс JDBC. Устанавливаем JDK 1.7; дополнительно нам потребуется пакет с драйвером JDBC:
$ sudo apt-get install openjdk-7-jdk
$ sudo apt-get install libpostgresql-jdbc-java
JDK для Windows можно скачать с www.oracle.com/
technetwork/java/javase/downloads. Драйвер JDBC
доступен на сайте jdbc.postgresql.org (выберите вер- сию, соответствующую установленной версии JDK), там же находится и документация.
Пример программы (Test.java):
import java.sql.*;
public class Test {
public static void main(String[] args)
throws SQLException {
Connection conn = DriverManager.getConnection(
"jdbc:postgresql://localhost:5432/appdb",
"app", "p@ssw0rd");
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(
"SELECT * FROM greeting");
while (rs.next()) {
System.out.println(rs.getString(1));
}
rs.close();
st.close();
conn.close();
}
}
114

Компилируем и выполняем, указывая путь к классу- драйверу JDBC (в Windows пути разделяются не двое- точием, а точкой с запятой):
$ javac Test.java
$ java -cp .:/usr/share/java/postgresql-jdbc4.jar \
Test
Привет, мир!
Резервное копирование
Хотя в созданной нами базе данных appdb всего одна таблица, не помешает задуматься и о сохранности дан- ных. Пока в вашем приложении немного данных, сде- лать резервную копию проще всего утилитой pg_dump:
$ pg_dump appdb > appdb.dump
Если вы посмотрите получившийся файл appdb.dump с помощью текстового редактора, то обнаружите в нем обычные команды SQL, создающие и заполняющие дан- ными все объекты appdb. Этот файл можно подать на вход psql, чтобы восстановить содержимое базы дан- ных. Например, можно создать новую БД и загрузить данные туда:
$ createdb appdb2
$ psql -d appdb2 -f appdb.dump
115

У pg_dump много возможностей, с которыми стоит по- знакомиться: postgrespro.ru/doc/app-pgdump. Некото- рые из них доступны, только когда данные выгружаются в специальном внутреннем формате; в таком случае для восстановления нужно использовать не psql, а утилиту pg_restore.
В любом случае pg_dump выгружает содержимое только одной базы данных. Если требуется сделать резервную копию всего кластера, включая все базы данных, поль- зователей и табличные пространства, надо воспользо- ваться другой, хотя и похожей, командой pg_dumpall.
Для больших серьезных проектов требуется продуман- ная стратегия периодического резервного копирова- ния. Для этого лучше подойдет физическая «двоич- ная» копия кластера, которую можно получить утили- той pg_basebackup. Подробнее про доступные средства резервного копирования и восстановления смотрите в документации: postgrespro.ru/doc/backup.
Штатные средства PostgreSQL позволяют сделать прак- тически все, что нужно, но требуют выполнения мно- гочисленных шагов, нуждающихся в автоматизации.
Поэтому многие компании создают собственные ин- струменты резервирования для упрощения этой зада- чи. Такой инструмент есть и у нашей компании Postgres
Professional. Он называется pg_probackup, распростра- няется свободно и позволяет выполнять инкременталь- ное резервное копирование на уровне страниц, кон- тролировать целостность данных, работать с большими объемами информации за счет параллелизма и сжа- тия, реализовывать различные стратегии резервного
116
копирования. Полная документация доступна по адресу postgrespro.ru/doc/app-pgprobackup.
Что дальше?
Теперь вы готовы к разработке вашего приложения.
По отношению к базе данных оно всегда будет состо- ять из двух частей: серверной и клиентской. Серверная часть — это все, что относится к СУБД: таблицы, индек- сы, представления, триггеры, хранимые функции. А кли- ентская — все, что работает вне СУБД и подключается к ней; с точки зрения базы данных не важно, будет ли это «толстый» клиент или сервер приложений.
Важный вопрос, на который нет однозначного правиль- ного ответа: где должна быть сосредоточена бизнес- логика приложения?
Популярен подход, при котором вся логика находится на клиенте, вне базы данных. Особенно часто это про- исходит, когда команда разработчиков не знакома на детальном уровне с возможностями СУБД и предпочи- тает полагаться на то, что знает хорошо: на прикладной код. В этом случае СУБД становится неким второстепен- ным элементом приложения и лишь обеспечивает «пер- систентность» данных, их надежное хранение. Часто от
СУБД отгораживаются еще и дополнительным слоем аб- стракции, например, ORM-ом, который автоматически генерирует запросы к базе данных из конструкций на языке программирования, привычном разработчикам.
117

Иногда такое решение мотивируют желанием обеспе- чить переносимость приложения на любую СУБД.
Подход имеет право на существование; если система,
построенная таким образом, работает и выполняет воз- лагаемые на нее задачи — почему бы нет?
Но у этого решения есть и очевидные недостатки:
Поддержка согласованности данных возлагается на
приложение.
Вместо того, чтобы поручить СУБД следить за согла- сованностью данных (а это именно то, чем сильны реляционные системы), приложение самостоятельно выполняет необходимые проверки. Будьте увере- ны, что рано или поздно в базу попадут некоррект- ные данные. Эти ошибки придется исправлять или учить приложение работать с ними. А ведь бывают ситуации, когда над одной базой данных строятся несколько разных приложений: в этом случае обой- тись без помощи СУБД просто невозможно.
Производительность оставляет желать лучшего.
ORM-системы позволяют в какой-то мере абстраги- роваться от СУБД, но качество генерируемых ими
SQL-запросов весьма сомнительно. Как правило, вы- полняется много небольших запросов, каждый из которых сам по себе работает достаточно быстро.
Но такая схема выдерживает только небольшие на- грузки на небольшом объеме данных, и практически не поддается какой-либо оптимизации со стороны
СУБД.
118

Усложняется прикладной код.
На прикладном языке программирования невозмож- но сформулировать по-настоящему сложный запрос,
который бы автоматически и адекватно трансли- ровался в SQL. Поэтому сложную обработку (если она нужна, разумеется) приходится программиро- вать на уровне приложения, предварительно выби- рая из базы все необходимые данные. При этом,
во-первых, выполняется лишняя пересылка данных по сети, а во-вторых, алгоритмы работы с данными
(сканирования, соединения, сортировки, агрегации)
в СУБД отлаживаются и оптимизируются десятилетия- ми и справятся в задачей гарантированно лучше, чем прикладной код.
Конечно, использование СУБД на полную мощность,
с реализацией всех ограничений целостности и логи- ки работы с данными в хранимых функциях, требует вдумчивого изучения ее особенностей и возможностей.
Потребуется освоить язык SQL для написания запро- сов и какой-либо язык серверного программирования
(обычно PL/pgSQL) для написания функций и триггеров.
Взамен вы овладеете надежным инструментом, одним из важных «кубиков» в архитектуре любой информаци- онной системы.
Так или иначе, вопрос о том, где разместить бизнес- логику — на сервере или на клиенте — вам придется для себя решить. Добавим только, что крайности нужны не всегда и часто истину стоит искать где-то посере- дине.
119

pgAdmin
pgAdmin — популярное графическое средство для адми- нистрирования PostgreSQL. Программа упрощает основ- ные задачи администрирования, отображает объекты баз данных, позволяет выполнять запросы SQL.
Долгое время стандартом де-факто являлся pgAdmin 3,
однако разработчики из EnterpriseDB прекратили его поддержку и в 2016 году выпустили новую, четвертую,
версию, полностью переписав продукт с языка C++ на
Python и веб-технологии. Из-за изменившегося интер- фейса pgAdmin 4 поначалу был встречен достаточно прохладно, но продолжает разрабатываться и совер- шенствоваться.
Тем не менее, третья версия еще не окончательно за- быта, знамя разработки подхватила команда BigSQL:
www.openscg.com/bigsql/pgadmin3.
Мы же посмотрим на основные возможности нового pgAdmin 4.
120

Установка
Чтобы запустить pgAdmin 4 на Windows, воспользуйтесь установщиком на странице www.pgadmin.org/download/.
Процесс установки прост и очевиден, все предлагаемые значения можно оставить без изменений.
Для систем Debian и Ubuntu, к сожалению, пока нет го- тового пакета, поэтому опишем процесс подробно. Сна- чала устанавливаем пакеты для языка Python:
$ sudo apt-get install virtualenv python-pip \
libpq-dev python-dev
Затем инициализируем виртуальную среду в каталоге pgadmin4 (конечно, можно выбрать и другой каталог):
$ cd


$ virtualenv pgadmin4
$ cd pgadmin4
$ source bin/activate
Теперь устанавливаем собственно программу pgAdmin.
Последнюю актуальную версию можно посмотреть здесь:
www.pgadmin.org/download/pgadmin-4-python-wheel/.
$ pip install https://ftp.postgresql.org/pub/pgadmin/
pgadmin4/v2.0/pip/pgadmin4-2.0-py2.py3-none-any.whl
$ rm -rf /.pgadmin/
Последнее, что осталось сделать — сконфигурировать pgAdmin для работы в автономном режиме (другой, сер- верный, режим мы не будем здесь рассматривать).
121

$ cat <
>lib/python2.7/site-packages/pgadmin4/config_local.py
import os
DATA_DIR = os.path.realpath(
os.path.expanduser(u'/.pgadmin/'))
LOG_FILE = os.path.join(DATA_DIR, 'pgadmin4.log')
SQLITE_PATH = os.path.join(DATA_DIR, 'pgadmin4.db')
SESSION_DB_PATH = os.path.join(DATA_DIR, 'sessions')
STORAGE_DIR = os.path.join(DATA_DIR, 'storage')
SERVER_MODE = False
EOF
К счастью, эти действия надо проделать один раз.
Для запуска pgAdmin 4 выполните:
$ cd /pgadmin4
$ source bin/activate
$ python \
lib/python2.7/site-packages/pgadmin4/pgAdmin4.py
Теперь пользовательский интерфейс (полностью пере- веденный на русский язык нашей компанией) доступен вам в веб-браузере по адресу localhost:5050.
Возможности
Подключение к серверу
В первую очередь настроим подключение к серверу.
Нажмите на значок Добавить новый сервер (Add New
Server) и в появившемся окне на вкладке Общие (General)
введите произвольное имя (Name) для соединения, а на
122
вкладке Соединение (Connection) — имя сервера (Host name/address), порт (Port), имя пользователя (Username)
и пароль (Password). Если не хотите вводить пароль каж- дый раз вручную, отметьте флажок Сохранить пароль
(Save password).
При нажатии на кнопку Сохранить (Save) программа проверит доступность сервера с указанными парамет- рами и запомнит новое подключение.
123

Навигатор
В левой части окна находится навигатор объектов. Раз- ворачивая пункты списка, вы можете спуститься до сер- вера, который мы назвали LOCAL. Ниже будут перечис- лены имеющиеся в нем базы данных:
• appdb мы создали для проверки подключения к PostgreSQL из разных языков программирования,
• demo — демонстрационная база данных,
• postgres создается автоматически при установке
СУБД,
• test мы использовали, когда знакомились с SQL.
124

Развернув пункт Схемы (Schemas) для базы данных demo, можно обнаружить все таблицы, посмотреть их столбцы, ограничения целостности, индексы, триггеры и т. п.
Для каждого типа объекта в контекстном меню (по пра- вой кнопке мыши) приведен список действий, которые с ним можно совершить. Например, выгрузить в файл или загрузить из файла, выдать привилегии, удалить.
В правой части окна на отдельных вкладках выводится справочная информация:
Панель информации (Dashboard) — показывает гра- фики, отражающие активность системы;
Свойства (Properties) — свойства выбранного объекта
(например, для столбца будет показан тип его дан- ных и т. п.);
SQL — команда SQL для создания выбранного в на- вигаторе объекта;
Статистика (Statistics) — информация, которая ис- пользуется оптимизатором для построения планов выполнения запросов и может рассматриваться ад- министратором СУБД для анализа ситуации;
Зависимости и Зависимые (Dependencies, Dependents) —
зависимости между выбранным объектом и другими объектами в базе данных.
125

Выполнение запросов
Чтобы выполнить запрос, откройте новую вкладку с ок- ном SQL, выбрав в меню Инструменты — Запросник
(Tools — Query tool).
Введите запрос в верхней части окна и нажмите F5.
В нижней части окна на вкладке Результат (Data Output)
появится результат запроса.
Вы можете вводить следующий запрос на новой строке,
не стирая предыдущий; просто выделите нужный фраг- мент кода перед тем, как нажимать F5. Таким образом история ваших действий всегда будет у вас перед гла- зами — обычно это удобнее, чем искать нужный запрос
126
в истории команд на вкладке История запросов (Query
History).
Другое
Программа pgAdmin предоставляет графический ин- терфейс для стандартных утилит PostgreSQL, таблиц системного каталога, административных функций и ко- манд SQL. Особо отметим встроенный отладчик PL/pgSQL- кода. Со всеми возможностями этой программы вы мо- жете познакомиться на сайте продукта www.pgadmin.org или в справочной системе самой программы.
127

Обучение и документация
Документация
Для серьезной работы с PostgreSQL не обойтись без чтения документации. Это не только описание всех воз- можностей СУБД, но и исчерпывающее справочное ру- ководство, которое всегда должно быть под рукой. Чи- тая документацию, вы получаете емкую и точную ин- формацию из первых рук — она написана самими раз- работчиками и всегда аккуратно поддерживается в акту- альном состоянии.
Мы в Postgres Professional перевели на русский язык весь комплект документации — он доступен на нашем сайте: www.postgrespro.ru/docs.
Глоссарий, составленный нами для перевода, опубли- кован по адресу postgrespro.ru/education/glossary.
Мы рекомендуем использовать его, чтобы грамотно пе- реводить англоязычные документы и использовать еди- ную, понятную всем терминологию для материалов на русском языке.
Предпочитающие оригинальную документацию на ан- глийском языке найдут ее и на нашем сайте, и по адре- су www.postgresql.org/docs.
128

1   2   3   4   5   6   7   8


написать администратору сайта