Как установить Postgresql на Linux и Windows с. 16
Скачать 1.38 Mb.
|
Windows Установка Скачайте установщик СУБД с нашего сайта: repo.postgrespro.ru/pgpro-10/win. Выберите 32- или 64-разрядную версию в зависимости от того, какая у вас версия Windows. Запустите скачан- ный файл и выберите язык установки. Установщик построен в традиционном стиле «мастера»: вы можете просто нажимать на кнопку «Далее», если вас устраивают предложенные варианты. Остановимся подробнее на основных шагах. 17 Компоненты устанавливаемой программы: Оставьте оба флажка, если не уверены, какие выбрать. 18 Выбор папки установки: По умолчанию PostgreSQL устанавливается в каталог C:\Program Files\PostgresPro\10 (или C:\Program Files (x86)\PostgresPro\10 для 32-разрядной версии на 64-разрядной системе). 19 Отдельно можно выбрать расположение каталога для баз данных. Именно здесь будет находиться хранимая в СУБД информация, так что убедитесь, что на диске достаточно места, если вы планируете хранить много данных. 20 Параметры сервера: Если вы планируете хранить данные на русском языке, выберите локаль «Russian, Russia» (или оставьте вариант «Настройка ОС», если в Windows используется русская локаль). Введите (и подтвердите повторным вводом) пароль пользователя СУБД postgres. Также отметьте флажок «Настроить переменные среды», чтобы подключаться к серверу PostgreSQL под текущим пользователем ОС. Остальные поля можно оставить со значениями по умол- чанию. 21 Если вы планируете установить PostgreSQL только для ознакомительных целей, можно отметить вариант «Ис- пользовать параметры по умолчанию», чтобы СУБД не занимала много оперативной памяти. Управление службой и основные файлы При установке Postgres Pro в вашей системе регистри- руется служба «postgrespro-X64-10» (или «postgrespro- X86-10» для 32-разрядной версии). Она запускается ав- томатически при старте компьютера под учетной запи- сью Network Service (Сетевая служба). При необходимо- 22 сти вы можете изменить параметры службы с помощью стандартных средств Windows. Чтобы временно остановить службу сервера баз дан- ных, выполните программу «Stop Server» из папки в ме- ню «Пуск», которую вы указали при установке: Для запуска службы там же есть программа «Start Server». Если при запуске службы произошла ошибка, для по- иска причины следует заглянуть в журнал сообщений сервера. Он находится в подкаталоге log того катало- га, который был выбран при установке для баз данных (обычно это будет C:\Program Files\PostgresPro\10\ data\log). Журнал настроен таким образом, чтобы за- пись периодически переключалась в новый файл. Найти актуальный файл можно по дате последнего изменения или по имени, которое содержит дату и время переклю- чения. 23 Есть несколько важных конфигурационных файлов, ко- торые определяют настройки сервера. Они располага- ются в каталоге баз данных. Вам не нужно их изменять, чтобы начать знакомство с PostgreSQL, но в реальной работе они непременно потребуются: • postgresql.conf — основной конфигурационный файл, содержащий значения параметров сервера; • pg_hba.conf — файл, определяющий настройки до- ступа. В целях безопасности по умолчанию доступ должен быть подтвержден паролем и допускается только с локального компьютера. Загляните в эти файлы — они прекрасно документиро- ваны. Теперь мы готовы подключиться к базе данных и по- пробовать некоторые команды и запросы. Переходите к разделу «Пробуем SQL» на с. 29. Debian и Ubuntu Установка Если вы используете Linux, то для установки необходи- мо подключить пакетный репозиторий нашей компании. Для ОС Debian (в настоящее время поддерживаются версии 7 «Wheezy», 8 «Jessie» и 9 «Stretch») выполните в терминале следующие команды: 24 $ sudo apt-get install lsb-release $ sudo sh -c 'echo "deb \ http://repo.postgrespro.ru/pgpro-10/debian \ $(lsb_release -cs) main" > \ /etc/apt/sources.list.d/postgrespro.list' Для ОС Ubuntu (в настоящее время поддерживаются версии 14.04 «Trusty», 16.04 «Xenial», 16.10 «Yakkety», 17.04 «Zesty» и 17.10 «Artful») команды немного отлича- ются: $ sudo sh -c 'echo "deb \ http://repo.postgrespro.ru/pgpro-10/ubuntu \ $(lsb_release -cs) main" > \ /etc/apt/sources.list.d/postgrespro.list' Дальше все одинаково для обеих систем: $ wget --quiet -O - http://repo.postgrespro.ru/pgpro- 10/keys/GPG-KEY-POSTGRESPRO | sudo apt-key add - $ sudo apt-get update Перед установкой проверьте настройки локализации: $ locale Если вы планируете хранить данные на русском языке, значение переменных LC_CTYPE и LC_COLLATE должно быть равно «ru_RU.UTF8» (значение «en_US.UTF8» тоже подходит, но менее предпочтительно). При необходимо- сти установите эти переменные: $ export LC_CTYPE=ru_RU.UTF8 25 $ export LC_COLLATE=ru_RU.UTF8 Также убедитесь, что в операционной системе установ- лена соответствующая локаль: $ locale -a | grep ru_RU ru_RU.utf8 Если это не так, сгенерируйте ее: $ sudo locale-gen ru_RU.utf8 Теперь можно приступить к установке. Дистрибутив поз- воляет полностью управлять установкой, но для начала работы удобно использовать пакет, который выполнит всю установку и настройку в автоматическом режиме: $ sudo apt-get install postgrespro-std-10 Как только эта команда выполнится, СУБД PostgreSQL будет установлена, запущена и готова к работе. Чтобы проверить это, выполните команду: $ sudo -u postgres psql -c 'select now()' Если все проделано успешно, в ответ вы должны полу- чить текущее время. 26 Управление службой и основные файлы При установке PostgreSQL на вашей системе автомати- чески был создан специальный пользователь postgres, от имени которого работают процессы, обслуживающие сервер, и которому принадлежат все файлы, относящи- еся к СУБД. PostgreSQL будет автоматически запускаться при перезагрузке операционной системы. С настройка- ми по умолчанию это не проблема: если вы не рабо- таете с сервером базы данных, он потребляет совсем немного ресурсов вашей системы. Если вы все-таки за- хотите отключить автозапуск, выполните: $ sudo pg-setup service disable Чтобы временно остановить службу сервера баз дан- ных, выполните команду: $ sudo service postgrespro-std-10 stop Запустить службу сервера можно командой: $ sudo service postgrespro-std-10 start Полный список команд можно получить, выполнив: $ sudo service postgrespro-std-10 Если при запуске службы произошла ошибка, для по- иска причины следует просмотреть журнал сообщений сервера. Как правило, вы получите последние журналь- ные сообщения по команде: 27 $ sudo journalctl -xeu postgrespro-std-10 Но в некоторых старых версиях операционных систем вам может потребоваться заглянуть в файл /var/lib/pgpro/std-10/pgstartup.log. Вся информация, которая попадает в базу данных, рас- полагается в файловой системе в специальном каталоге /var/lib/pgpro/std-10/data/. Убедитесь, что у вас до- статочно свободного места, если собираетесь хранить много данных. Есть несколько важных конфигурационных файлов, ко- торые определяют настройки сервера. Для начала рабо- ты вам не придется их изменять, но с ними лучше сразу познакомиться, потому что в дальнейшем эти файлы вам непременно понадобятся: • /var/lib/pgpro/std-10/data/postgresql.conf — основной конфигурационный файл, содержащий зна- чения параметров сервера; • /var/lib/pgpro/std-10/data/pg_hba.conf — файл, определяющий настройки доступа. В целях безопас- ности по умолчанию доступ разрешен только с ло- кального компьютера и только для пользователя ОС postgres. Самое время подключиться к базе данных и попробо- вать SQL в деле. 28 Пробуем SQL Подключение с помощью psql Чтобы подключиться к серверу СУБД и выполнить какие- либо команды, требуется программа-клиент. В главе «PostgreSQL для приложения» мы будем говорить о том, как посылать запросы из программ на разных языках программирования, а сейчас речь пойдет о терминаль- ном клиенте psql, работа с которым происходит интер- активно в режиме командной строки. К сожалению, в наше время многие недолюбливают ко- мандную строку. Почему имеет смысл научиться с ней работать? Во-первых, psql — стандартный клиент, входящий в лю- бую сборку PostgreSQL, и поэтому он всегда под рукой. Безусловно, хорошо иметь настроенную под себя сре- ду, но нет никакого резона оказаться беспомощным в незнакомом окружении. Во-вторых, psql действительно удобен для повседнев- ных задач по администрированию баз данных, для на- писания небольших запросов и автоматизации процес- сов, например, для периодической установки изменений 29 программного кода на сервер СУБД. Он имеет собствен- ные команды, позволяющие сориентироваться в объек- тах, хранящихся в базе данных, и удобно представить информацию из таблиц. Но если вы привыкли работать с графическими поль- зовательскими интерфейсами, попробуйте pgAdmin — мы еще упомянем эту программу ниже — или другие аналогичные продукты: wiki.postgresql.org/wiki/ Community_Guide_to_PostgreSQL_GUI_Tools Чтобы запустить psql, в операционной системе Linux выполните команду: $ sudo -u postgres psql В Windows запустите программу «SQL Shell (psql)» из папки меню «Пуск», которую вы указали при установке: 30 В ответ на запрос введите пароль пользователя post- gres, который вы указали при установке PostgreSQL. Пользователи Windows могут столкнуться с неправиль- ным отображением русских букв в терминале. В этом случае убедитесь, что свойствах окна терминала уста- новлен TrueType-шрифт (обычно «Lucida Console» или «Consolas»). В итоге и в одной, и в другой операционной системе вы увидите одинаковое приглашение postgres=#. «Post- gres» здесь — имя базы данных, к которой вы сейчас подключены. Один сервер PostgreSQL может одновре- менно обслуживать несколько баз данных, но одновре- менно вы работаете только с одной из них. Дальше мы будем приводить некоторые команды. Вво- дите только то, что выделено жирным шрифтом; пригла- шение и ответ системы на команду приведены исключи- тельно для удобства. База данных Давайте создадим новую базу данных с именем test. Выполните: postgres=# CREATE DATABASE test; CREATE DATABASE Не забудьте про точку с запятой в конце команды — 31 пока PostgreSQL не увидит этот символ, он будет счи- тать, что вы продолжаете ввод (так что команду можно разбить на несколько строк). Теперь переключимся на созданную базу: postgres=# \c test You are now connected to database "test" as user "postgres". test=# Как вы видите, приглашение сменилось на test=#. Команда, которую мы только что ввели, не похожа на SQL — она начинается с обратной косой черты. Так вы- глядят специальные команды, которые понимает только psql (поэтому, если у вас открыт pgAdmin или другое графическое средство, пропускайте все, что начинается на косую черту, или попытайтесь найти аналог). Команд psql довольно много, и с некоторыми из них мы познакомимся чуть позже, а полный список с крат- ким описанием можно получить прямо сейчас: test=# \? Поскольку справочная информация довольна объемна, она будет показана с помощью настроенной в операци- онной системе команды-пейджера; обычно это more или less. 32 Таблицы В реляционных СУБД данные представляются в виде таблиц. Заголовок таблицы определяет столбцы; соб- ственно данные располагаются в строках. Данные не упорядочены (в частности, нельзя полагаться на то, что строки хранятся в порядке их добавления в таблицу). Для каждого столбца устанавливается тип данных; зна- чения соответствующих полей строк должны удовлетво- рять этим типам. PostgreSQL располагает большим чис- лом встроенных типов данных (postgrespro.ru/doc/ datatype.html) и возможностями для создания новых, но мы ограничимся несколькими из основных: • integer — целые числа; • text — текстовые строки; • boolean — логический тип, принимающий значения true (истина) или false (ложь). Помимо обычных значений, определяемых типом дан- ных, поле может иметь неопределенное значение NULL — его можно рассматривать как «значение неизвестно» или «значение не задано». Давайте создадим таблицу дисциплин, читаемых в вузе: test=# CREATE TABLE courses( test(# c_no text PRIMARY KEY, test(# title text, test(# hours integer test(# ); CREATE TABLE 33 Обратите внимание, как меняется приглашение psql: это подсказка, что ввод команды продолжается на но- вой строке. (В дальнейшем для удобства мы не будем дублировать приглашение на каждой строке.) В этой команде мы определили, что таблица с именем courses будет состоять из трех столбцов: c_no — тек- стовый номер курса, title — название курса, и hours — целое число лекционных часов. Кроме столбцов и типов данных мы можем опреде- лить ограничения целостности, которые будут автома- тически проверяться — СУБД не допустит появление в базе некорректных данных. В нашем примере мы добавили ограничение PRIMARY KEY для столбца c_no, которое говорит о том, что значения в этом столбце должны быть уникальными, а неопределенные значе- ния не допускаются. Такой столбец можно использо- вать для того, чтобы отличить одну строку в таблице от других. Полный список ограничений целостности: postgrespro.ru/doc/ddl-constraints.html. Точный синтаксис команды CREATE TABLE можно посмот- реть в документации, либо попросить справку прямо в psql: test=# \help CREATE TABLE Такая справка есть по каждой команде SQL, а полный список команд легко получить с помощью \help без параметров. 34 Наполнение таблиц Добавим в созданную таблицу несколько строк: test=# INSERT INTO courses(c_no, title, hours) VALUES ('CS301', 'Базы данных', 30), ('CS305', 'Сети ЭВМ', 60); INSERT 0 2 Если вам требуется массовая загрузка данных из внеш- него источника, команда INSERT — не лучший выбор; посмотрите на специально предназначенную для этого команду COPY: postgrespro.ru/doc/sql-copy.html. Для дальнейших примеров нам потребуется еще две таблицы: студенты и экзамены. Для каждого студента мы будем хранить его имя и год поступления; иденти- фицироваться он будет числовым номером студенческо- го билета. test=# CREATE TABLE students( s_id integer PRIMARY KEY, name text, start_year integer ); CREATE TABLE test=# INSERT INTO students(s_id, name, start_year) VALUES (1451, 'Анна', 2014), (1432, 'Виктор', 2014), (1556, 'Нина', 2015); INSERT 0 3 35 Экзамен содержит оценку, полученную студентом по некоторой дисциплине. Таким образом, студенты и дис- циплины связаны друг с другом отношением «многие ко многим»: один студент может сдавать экзамены по многим дисциплинам, а экзамен по одной дисциплине могут сдавать много студентов. Запись в таблице экзаменов идентифицируется сово- купностью имени студента и номера курса. Такое огра- ничение целостности, относящее сразу к нескольким столбцам, определяется с помощью фразы CONSTRAINT: test=# CREATE TABLE exams( s_id integer REFERENCES students(s_id), c_no text REFERENCES courses(c_no), score integer, CONSTRAINT pk PRIMARY KEY(s_id, c_no) ); CREATE TABLE Кроме того, с помощью фразы REFERENCES мы опре- делили два ограничения ссылочной целостности, на- зываемые внешними ключами. Такие ключи показыва- ют, что значения в одной таблице ссылаются на строки в другой таблице. Теперь при любых действиях СУБД будет проверять, что все идентификаторы s_id, ука- занные в таблице экзаменов, соответствуют реальным студентам (то есть записям в таблице студентов), а но- мера c_no — реальным курсам. Таким образом, будет исключена возможность оценить несуществующего сту- дента или поставить оценку по несуществующей дис- циплине — независимо от действий пользователя или возможных ошибок в приложении. 36 Поставим нашим студентам несколько оценок: test=# INSERT INTO exams(s_id, c_no, score) VALUES (1451, 'CS301', 5), (1556, 'CS301', 5), (1451, 'CS305', 5), (1432, 'CS305', 4); INSERT 0 4 Выборка данных Простые запросы Чтение данных из таблиц выполняется оператором SELECT. Например, выведем два столбца из таблицы courses: test=# SELECT title AS course_title, hours FROM courses; course_title | hours --------------+------- Базы данных | 30 Сети ЭВМ | 60 (2 rows) Конструкция AS позволяет переименовать столбец, если это необходимо. Чтобы вывести все столбцы, достаточно указать символ звездочки: test=# SELECT * FROM courses; c_no | title | hours -------+-------------+------- CS301 | Базы данных | 30 CS305 | Сети ЭВМ | 60 (2 rows) 37 В результирующей выборке мы можем получить несколь- ко одинаковых строк. Даже если все строки были раз- личны в исходной таблице, дубликаты могут появиться, если выводятся не все столбцы: test=# SELECT start_year FROM students; start_year ------------ 2014 2014 2015 (3 rows) Чтобы выбрать все различные года поступления, после SELECT надо добавить слово DISTINCT: test=# SELECT DISTINCT start_year FROM students; start_year ------------ 2014 2015 (2 rows) Подробнее смотрите в документации: postgrespro.ru/ doc/sql-select.html#SQL-DISTINCT Вообще после слова SELECT можно указывать и любые выражения. А без фразы FROM результирующая таблица будет содержать одну строку. Например: test=# SELECT 2+2 AS result; result -------- 4 (1 row) 38 |