Как установить Postgresql на Linux и Windows с. 16
Скачать 1.38 Mb.
|
Подробнее о настройках аутентификации: 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 |