Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв БД 2013-06-02.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
26.54 Mб
Скачать

6.7. Субд PostgreSql

История ПОСТГРЕС началась в 1977 г. с базы данных Ingress.

В 1986 г. в университете Беркли, Калифорния, она была переименована в PostgreSQL (произносится «Пост-Грес-Кью-Эль»).

В 1995 г. постгрес стала открытой базой данных. Появился интерактивный psql.

В 1996 г. Postgres95 была переименована в PostgreSQL версии 6.0.

У постгреса несколько сотен разработчиков по всему миру.

Архитектура PostgreSQL

PostgreSQL – унифицированный сервер баз данных, имеющий единый движок – storage engine. Постгрес использует клиент-серверную модель.

Для каждого клиента на сервере создается новый процесс (не поток !). Для работы с такими клиентскими процессами сервер использует семафоры.

Клиентский запрос проходит следующие стадии.

  1. Коннект.

  2. Парсинг: проверяется корректность запроса и создается дерево запроса (query tree). В основу парсера положены базовые юниксовые утилиты yacc и lex.

  3. Rewrite: берется дерево запросов и проверяется наличие в нем правил (rules), которые лежат в системных каталогах. Всякий раз пользовательский запрос переписывается на запрос, получающий доступ к таблицам базы данных.

  4. Оптимизатор: на каждый запрос создается план запроса – query plan, который передается исполнителю – executor. Смысл плана в том, что в нем перебираются все возможные варианты получения результата (использовать ли индексы, джойны и т.д.), и выбирается самый быстрый вариант.

  5. Выполнение запроса: исполнитель рекурсивно проходит по дереву и получает результат, используя при этом сортировку, джойны и т.д., и возвращает строки.

Постгрес – обьектно-реляционная база данных, каждая таблица в ней представляет класс, между таблицами реализовано наследование. Реализованы стандарты SQL92 и SQL99.

Транзакционная модель построена на основе так называемого multi-version concurrency control (MVCC), что дает максимальную производительность. Ссылочная целостность обеспечена наличием первичных и вторичных ключей.

Организация СУБД PostgreSQL

Как и любая СУБД PostgreSQL должна обслуживать запросы sql и возвращать результаты клиентским приложениям. Для этого механизм СУБД оптимизатор запросов принимает решение об оптимальном использовании ресурсов и строит план запроса. При этом он может опереться на используемых механизмы ускорения работы (индексов, кэшей в памяти, ресурсам процессора, данные статистики и т.д.). Результаты запросов возвращаются клиентским подключениям

В Windows управляет всем файл службы pg_ctl.exe (останавливает, запускает, перезапускает).

Сам движок базы – это postgres.exe.

Оптимизатор запросов мало подвержен управлению со стороны разработчиков, поэтому к нему вернемся лишь косвенно в разделе анализа быстродействия.

Зато управление дисковым пространством имеет весомое значение. Как и в любой СУБД, для баз данных PostgreSQL лучше использовать RAID 10 для баз данных и отдельный дисковый массив под логии. Применение STORAGE систем может также положительно сказаться на всем быстродействии. Еще одна фича, ускоряющая работу за счет расположения данных на разных дисках, это табличные пространства (tablespaces).

Критически важные для администраторов многогигабайтных хранилищ данных, табличные пространства позволяют размещать большие таблицы и индексы на отдельных дисках или массивах, что повышает производительность запросов.

У PostgreSQL есть особенность в реализации хранения – это так называемый “кластер”. В данном случаи речь идет месте расположения каталога для баз данных. Плюс PostgreSQL  организует  единую  файловую структуру, в которой  отдельные файлы не соответствуют непосредственно таблицам или другим  объектам  базы  данных.

При установке вы указываете “кластер” (читай каталог).

Рисунок 6.7.1

При установке PostgreSQL создает системную базу postgres и базу template1 как шаблон настроек для всех новых баз. Обычно в Linux-среде  в каталоге /var/postgres/data находится некоторое количество служебных файлов для PostgreSQL, а в каталоге /var/postgres/data/base размещаются базы данных, каждая в своем отдельном каталоге.

К сожалению, реализованный в PostgreSQL способ хранения данных требует  дополнительного обслуживания  -  периодической  дефрагментации  базы  данных  командой VACUUM. Примечание. Материализованные запросы (представления пользователя) view платформой не используются.

Размеры базы данных

На данный момент (версия 9.1.2), в PostgreSQL имеются следующие ограничения:

Максимальный размер базы данных

Нет ограничений

Максимальный размер таблицы

32 ТБайт

Максимальный размер записи

1,6 ТБайт

Максимальный размер поля

ГБайт

Максимум записей в таблице

Ограничено размером таблицы

Максимум полей в таблице

250—1600, в зависимости от типов полей

Максимум индексов в таблице

Нет ограничений

Сильными сторонами PostgreSQL считаются:

  1. поддержка БД практически неограниченного размера;

  2. мощные и надёжные механизмы транзакций и репликации;

  3. расширяемая система встроенных языков программирования: в стандартной поставке оддерживаются PL/pgSQL, PL/Perl, PL/Python и PL/Tcl;

  4. можно использовать PL/Java, PL/PHP, PL/Py, PL/R, PL/Ruby, PL/Schemeи PL/sh, а также имеется поддержка загрузки C-совместимых модулей;

  5. наследование;

  6. легкая расширяемость.

Утилита администрирования баз данных PostgreSQL pgAdmin - графическая оболочка проектирования и административная СУБД PostgreSQL  для Unix и системы Windows.

Рисунок 6.7.2

Pgadmin пишется на языке программирования  C и использует превосходный пакет разработчика платформы wxWidgets (когда-то wxWindows). pgAdmin распространяется по лицензии PostgreSQL, т.е. также является свободным ПО.

PosgreSQL в 1С 8.0

1С: Предприятие 8 имеет некоторые особенности работы с СУБД PostgreSQL, связанные с использованием транзакционных блокировок:

режиме автоматического управления блокировками в транзакции используются табличные блокировки СУБД;

в режиме управляемых блокировок в транзакции используются блокировки записей и полей СУБД.

Управление соединениями с других компьютеров

По умолчанию, PostgreSQL разрешает только соединения на локальной машине через сокеты домена Unix или TCP/IP соединения. Для того, чтобы другие машины смогли подключиться к базе вы должны изменить в PostgreSQL.conf, разрешить host-авторизация в файле $PGDATA/pg_hba.conf и перестартовать сервер.

Сравнительный Анализ PostgreSQL с MySQL

Ниже приводится таблица сравнения основных возможностей этих СУБД. Критерии сравнения выбирались сугубо из моих интересов/опыта и обзоров в инете.

Возможности

MySQL

PostgreSQL

Ответственный за код

компания MySQL AB

разные разработчики

Сжатие данных при передаче

+

+

Поддержка модели ACID

+/- (InnoDB, Falcon)

+

Поддержка SQL команд: insert ignore / replace

+

-

Поддержка внешних ключей

+/- (InnoDB)

+

Репликации

+

+ (говорят в 8.4 стало все хорошо)

Под запросы

+

+

Полнотекстовые индексы

+ (MyISAM)

+

Частичное индексирование

-

+

Чистка после работы команд UPDATE и DELETE

не нуждается

VACUUM

Система привилегий

+

+/- (проще чем в MySQL)

Хранение таблиц в файлах

+

-

Хранение/обработка географических данных

+/-

+

Лицензирование

GNU GPL

BSD

MySQL PostgreSQL: сходство и различия

ACID-стандарт

Стандарт ACID базируется на атомарности, целостности, изоляции и надежности. Эта модель используется для гарантии целостности данных. Реализуется это на основе транзакций. PostgreSQL полностью соответствует стандарту ACID. Для полной поддержки ACID в MySQL в конфиге нужно установить default-storage-engine=innodb.

Производительность (performance)

Базы данных часто оптимизируются в зависимости от окружения, в котором они работают. Обе базы имеют различные технологии для улучшения производительности. Исторически так сложилось, что MySQL начинала разрабатываться с прицелом на скорость, а PostgreSQL с самого начала разрабатывалась как база с большим числом настроек и соответствием стандарту. PostgreSQL имеет ряд настроек, которые повышают скорость доступа: парциальные индексы; компрессия данных; выделение памяти; улучшенный кеш.

MySQL имеет частичную поддержку парциальных индексов в InnoDB. Если взять MySQL-ский движок ISAM, он оказывается быстрее на плоских запросах, при этом нет блокировок на инсерты, нет поддержки транзакций, foreign key.

Компрессия

PostgreSQL лучше сжимает и разжимает данные, позволяя сохранить больше данных на дисковом пространстве. При этом компрессионные данные читаются быстрее с диска. MySQL-компрессия для разных движков частично поддерживается, частично нет, и это зависит от конкретной версии конкретного движка.

SMP

На мульти-процессорности PostgreSQL имеет преимущество над MySQL. Даже сами разработчики MySQL признают, что их движок в этом плане не так хорош.

Типы данных

MySQL: для хранения бинарных данных использует типы TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB, которые отличаются размером (до 4 ГБ).

Character: четыре типа – TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT.

PostgreSQL: поддерживает механизм пользовательских данных с помощью команды CREATE TYPE, тип BOOLEAN, геометрические типы.

Character: TEXT (ограничение – max row size).

Для хранения бинарных данных есть тип BLOB, который хранится в файловой системе. Столбцы таблицы могут быть определены как многомерный массив переменной длины. Обьектно-реляционное расширение: структура таблицы может быть унаследована от другой таблицы.

Хранимые процедуры

И PostgreSQL, и MySQL поддерживают хранимые процедуры. PostgreSQL придерживается стандарта Oracle PL/SQL, MySQL – IBM DB2. MySQL поддерживает extend SQL для написания функций на языке C/C++ с версии 5.1. PostgreSQL: PL/PGSQL, PL/TCL, PL/Perl, SQL, C для написания хранимых процедур.

Ключи

И PostgreSQL , и MySQL поддерживают уникальность Primary Key и Foreign Key. MySQL не поддерживает check constraint плюс вторичные ключи реализованы частично. PostgreSQL: полная реализация плюс поддержка ON DELETE CASCADE и ON UPDATE CASCADE.

Триггеры

MySQL: рудиментарная поддержка. PostgreSQL: декларативные триггеры: SELECT, INSERT, DELETE, UPDATE, INSTEAD OF; процедурные триггеры: CONSTRAINT TRIGGER. События: BEFORE или AFTER на INSERT, DELETE , UPDATE.

Автоинкремент

MySQL: в таблице может быть только один такой столбец, который должен быть проиндексирован. PostgreSQL: SERIAL data type.

Репликации

Поддерживаются и в MySQL, и в PostgreSQL. PostgreSQL имеет модульную архитектуру, и репликация входит в отдельные модули:

  • PGCluster;

  • Slony-I – основной механизм репликации в постгресе, производительность падает в квадратичной зависимости от числа серверов;

  • DBBalancer;

  • pgpool;

  • PostgreSQL table comparator;

  • SkyTools;

  • Sequoia;

  • Bucardo.

Репликация в PostgreSQL основана на триггерах и более медленная, чем в MySQL. В ядро репликацию планируется добавить, начиная с версии 8.4.

В MySQL репликация входит в ядро и имеет две разновидности, начиная с версии 5.1:

  • SBR – statement based replication;

  • RBR – row based replication.

Первый тип основан на логировании записей в бинарный лог, второй – на логировании изменений. Начиная с версии 5.5, в MySQL поддерживается так называемая полусинхронная репликация, при которой основной сервер (master) делает сброс данных на другой сервер (slave) при каждом коммите. Движок NDB делает полную синхронную двухфазную репликацию.

Транзакции

MySQL: только для для InnoDB. Поддержка SAVEPOINT, ROLLBACK TO SAVEPOINT. Уровни блокировки: table level (MyISAM). PostgreSQL: поддерживается плюс read committed и уровни изоляции. Поддержка ROLLBACK, ROLLBACK TO SAVEPOINT. Уровни блокировки: row level, table level.

Уровни привилегий

PostgreSQL: для пользователя или группы пользователей могут быть назначены привилегии.

Экспорт-импорт данных

MySQL: набор утилит для экспорта: mysqldump, mysqlhotcopy, mysqlsnapshot. Импорт из текстовых файлов, html, dbf. PostgreSQL: экспорт – утилита pg_dump. Импорт между базами данных и файловой системой.

Вложенные запросы

Есть и в MySQL, и в PostgreSQL, но в MySQL могут работать непроизводительно.

Индексация

Хэширование индексов: в MySQL– частичное, в PostgreSQL – полное. Полнотекстовый поиск: в MySQL– частичный, в PostgreSQL – полный. Парциальные индексы: в MySQL не поддерживаются, в PostgreSQL поддерживаются. Многостолбцовые индексы: в MySQL ограничение 16 столбцов, в PostgreSQL – 32. Expression-индексы: в MySQL– эмуляция, в PostgreSQL – полное. Неблокирующий create index: в MySQL – частичное, в PostgreSQL – полное.

Партиционирование (Partitioning)

MySQL поддерживает горизонтальное партиционирование: range, list, hash, key, композитное партиционирование. PostgreSQL поддерживает RANGE и LIST. Автоматическое партиционирование для таблиц и индексов.

Автоматическое восстановление после сбоев

MySQL: частичное для InnoDB – нужно вручную сделать backup. PostgreSQL: Write Ahead Logging (WAL).

Data Storage Engines

PostgreSQL поддерживает один движок – Postgres Storage System. В MySQL 5.1 их несколько:

  • MyISAM – используется для хранения системных таблиц;

  • InnoDB – максимальное соответствие ACID, хранит данные с первичными ключами, кэширует инсерты, поддерживает компрессию, начиная с версии 5.1 – см. атрибут ROW_FORMAT=COMPRESSED;

  • NDB Cluster – движок, ориентированный на работу с памятью, кластерная архитектура, использующая синхронную репликацию;

  • ARCHIVE – поддерживает компрессию, не использует индексы;

  • а также: MERGE, MEMORY (HEAP), CSV.

InnoDB разрабатывается компанией InnoBase, являющейся дочерней компанией Oracle. В 6-й версии должны появиться два движка – Maria и Falcon. Falcon – движок, основанный на ACID-транзакциях.

Лицензирование

PostgreSQL: BSD (Berkeley Software Distribution) open source. MySQL: GPL (Gnu General Public License) или Commercial. MySQL – это open-source продукт. Postgres – это open-source проект.

Краткое описание СУБД

PostgreSQL - это объектно-реляционная система управления базами данных (ORDBMS) (по-русски ОРСУБД или просто СУБД) основанная на POSTGRES, Версии 4.2, которая была разработана в Научном Компьютерном Департаменте Беркли Калифорнийского Университета. Проект POSTGRES, под руководством профессора Майкла Стоунбрейкера (Michael Stonebraker), был поддержан Агентством Расширенных Оборонных Исследовательских Проектов (Defense Advanced Research Projects Agency (DARPA)), Офисом Армейских Исследований (Army Research Office (ARO)), Национальным Научным Фондом (National Science Foundation (NSF)), а также ESL, Inc.

PostgreSQL является прямым потомком с открытым исходным кодом от оригинального кода, сделанного в Беркли. СУБД предоставляет поддержку SQL92/SQL99 и другие современные возможности.

POSTGRES является пионером во многих объектно-реляционных аспектах, появившихся теперь в некоторых коммерческих СУБД. Традиционные реляционные СУБД (RDBMS) поддерживают модель данных, которая составляет коллекцию поименованных кортежей, содержащих атрибуты заданного типа. В современных коммерческих системах, к возможным типам относятся числа с плавающей точкой, целые числа, символьные строки, денежные типы и даты. Это обычно приводит к тому, что данная модель является неадекватной для будущих приложений обработки данных. Реляционная модель успешно заменяет предыдущие модели отчасти в силу "Спартанской простоты". Однако, такая простота делает реализацию определённых приложений очень трудной. PostgreSQL предлагает существенное увеличение мощи СУБД, через внедрение следующих дополнительных аспектов, которые позволяют пользователям легко расширять систему:

  • наследование

  • типы данных

  • функции

Другие возможности, предоставляющие дополнительные удобства и мощь:

  • ограничения целостности

  • триггеры

  • правила

  • транзакционная целостность

Все эти особенности помещают PostgreSQL в категорию СУБД, известную как объектно-реляционные (object-relation). Заметим, что здесь есть отличие от тех объектно-ориентированных (object-oriented) СУБД, которые в основном поддерживают традиционные языки реляционных СУБД. Однако, PostgreSQL имеет некоторые объектно-ориентированные возможности, это важно в мире реляционных СУБД. Фактически, некоторые коммерческие СУБД только недавно заимели встроенные возможности, которые были открыты в PostgreSQL.

Установка и настройка

Перед тем как вы сможете использовать PostgreSQL, вам, конечно же, необходимо его установить. Возможно, что PostgreSQL уже установлен на вашей машине, или потому, что он включён в состав дистрибутива операционной системы или потому что системный администратор уже установил его. В этом случае, вы должны получить информацию из документации по операционной системе или от вашего системного администратора, о том как получить доступ к PostgreSQL.

Если вы не уверены в том, что PostgreSQL уже доступен или, что вы можете использовать его в ваших экспериментах, то вы можете установить его сами. Это нетрудно сделать и может быть полезно для вашего опыта. PostgreSQL может установить любой непривилегированный пользователь, но вам потребуются права суперпользователя (root).

Если вы устанавливаете PostgreSQL сами, то обратитесь к PostgreSQL Administrator's Guide за инструкциями по установке и вернитесь к данному руководству, когда завершите установку. Убедитесь, что вы прошли секцию, где рассказывается об установке соответствующих переменных окружения.

Если администратор вашей машины не произвел некоторых установок по умолчанию, то вы можете сделать это сами. Например, если машина с сервером баз данных является удаленной машиной, вам может понадобится прописать имя этой машины в перменную окружения PGHOST. Также может быть установлена и переменная PGPORT. В заключение можно сказать так: если вы пытаетесь запустить приложение и оно говорит, что не может подключиться к базе данных, то вы должны проконсультироваться с системным администратором или, если вы им и являетесь, прочитать документацию, чтобы убедиться, что вы правильно установили ваше окружение. Если вы не поняли предыдущий параграф, то прочтите следующий.

Основные этапы установки:

ШАГ 1. Запустить дистрибутив. Программа самостоятельно выполнить нужные настройки.

ШАГ 2. Нажимаем клавишу next для продолжения установки (см. рисунок 6.7.3).

Рисунок 6.7.3

ШАГ 3. Выбираем директорию для сохранения. По умолчанию создаётся папка в каталоге program files. Нажимаем клавишу next (рисунок 6.7.4)

Рисунок 6.7.4

ШАГ 4. Выбираем директорию для создания data Directory. Рекомендуется выбор той папки, которая стоит по умолчанию (рисунок 6.7.5)

Рисунок 6.7.5

ШАГ 5. Установщик потребует дважды ввести пароль для доступа к СУБД. В нашем случае пароль: 111 (рисунок 6.7.6)

Рисунок 6.7.6

ШАГ 6. Установщик потребует ввести номер порта сервера. Если возникают затруднения, попробуйте указать тот номер, который стоит по умолчанию.

Рисунок 6.7.7

ШАГ 7. Установщик потребует ввести язык работы с опциями. Выбираем: Russia.

Рисунок 6.7.8

ШАГ 8. Без комментариев.

Рисунок 6.7.9

ШАГ 9. Установщик займётся инсталляцией.

Рисунок 6.7.10

ШАГ 10. Инсталляция прошла успешно.

Рисунок 6.7.11

ШАГ 11. Установка дополнительных компонентов (без которых, вообще говоря, работа СУБД невозможна)

Рисунок 6.7.12

ШАГ 12. Без комментариев.

Рисунок 6.7.13

ШАГ 13. Выбор устанавливаемых приложений (исходя из поставленных цели и задач создания БД)

Рисунок 6.7.14

ШАГ 14. Подтверждение выбора, устанавливаемых приложений.

Рисунок 6.7.15

ШАГ 15. Загрузка приложений (нужен доступ к сети Интернет).

Рисунок 6.7.16

ШАГ 16. Автоматическая последовательная установка, скаченных приложений.

Cреда PostgreSQL

Рабочую среду СУБД можно разделить на 5 областей:

1: программное меню;

2: графический интерфейс;

3: браузер объектов;

4: свойства, статистика, зависимости;

5: панель sql.

Рисунок 6.7.17 – Рабочая среда

Для того, чтобы создать новый сервер необходимо нажать на вкладку «Файл» -> «Добавить сервер» (рисунок 6.7.18)

10

Рисунок 6.7.18 – Добавление сервера

Для дальнейшего создания сервера, необходимо ввести регистрационные данные:

Рисунок 6.7.19 – Регистрационные данные сервера

Во вкладке «Файл» -> «Параметры» выбираем нужные нам параметрам по различным разделам

Рисунок 6.7.20 – Параметризация

Создание базы данных

Первый тест, с помощью которого будет видно, что вы можете получить доступ к серверу баз данных - это попытка создать базу данных. Запущенный сервер PostgreSQL может управлять множеством баз данных. Обычно, для каждого проекта или каждого пользователя используется отдельная база данных.

Возможно, что администратор вашей машины уже создал базу данных для вас. Он должен был бы сказать вам имя вашей базы данных. В этом случае вы можете пропустить данный шаг и перейти к следующей секции.

Для создания новой базы данных, в этом примере называющейся mydb, вы можете использовать следующую команду:

Команда должна выдать такой ответ:

Если он появился, то данный шаг был пройден успешно и вы можете пропустить написанное далее до конца этой секции.

Если вы получите что-то похожее на

createdb: command not found

то это означает, что продукт PostgreSQL не был правильно установлен. Или было установлено не все или путь поиска не был установлен соответствующим образом. Попытайтесь вызвать эту команду, используя полный путь:

$ /usr/local/pgsql/bin/createdb mydb

Полный путь на вашей машине может быть другим. Свяжитесь с вашим администратором или проверьте инструкции по установке, чтобы исправить ситуацию.

Другое сообщение, которое вы можете получить:

psql: could not connect to server: Connection refused

Is the server running locally and accepting

connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

createdb: database creation failed

Это означает, что сервер не был запущен или что он не был запущен так, как этого ожидает команда createdb. Снова, проверьте инструкции по установке или проконсультируйтесь с администратором.

Если у вас нет прав, требуемых для создания базы данных, вы увидите следующее сообщение:

ERROR: CREATE DATABASE: permission denied

createdb: database creation failed

Не каждый пользователь имеет авторизацию для создания новых баз данных. Если PostgreSQL отвергает ваши попытки создания баз данных, то администратору вашей машины нужно дать вам права для создания баз данных. Проконсультируйтесь с ним в этом случае. Если вы устанавливали PostgreSQL сами, то вы должны для целей преследуемых этим учебником подключиться как пользователь, от имени которого запускается сервер баз данных.

Вы можете также создавать базы данных с любыми другими именами. PostgreSQL позволяет вам создавать любое количество баз данных на одном сервере. Имена баз данных должны состоять из букв и цифр (вначале всегда должна быть буква) и быть не более 63 символов длиной. Довольно удобно создавать базу данных с таким же именем как у пользователя. Многие инструменты по умолчанию считают, что имя базы данных именно такое, так что вы сможете не нажимать лишние кнопки. Чтобы создать базу данных, просто наберите

$ createdb

Если вы не хотите использовать вашу базу данных в будущем, вы можете удалить ее. Например, если вы являетесь владельцем (создателем) базы данных mydb, вы можете уничтожить её, используя следующую команду:

$ dropdb mydb

(Для этой команды вы должны обязательно задать имя базы данных, она не будет считать, что имя базы данных - это имя текущего пользователя). Данная команда физически удалит все файлы, связанные с указанной базой данных так, что их нельзя будет восстановить, так что выполняйте эту операцию с большой осторожностью.

Доступ к базе данных

Если вы создали базу данных, то вы можете получить доступ к ней через:

  • запуск интерактивной терминальной программы PostgreSQL, называемой psql, которая позволит вам интерактивно вводить, редактировать и выполнять команды SQL;

Рисунок 6.7.21 – Работа с pcql

  • использование графического инструмента типа PgAccess или о

  • фисного пакета с поддержкой ODBC, который позволит создавать и манипулировать базой данных;

  • написание специального приложения, используя один из нескольких доступных языков программирования, для которых существуют привязки к PostgreSQL. Эти возможности описываются далее в PostgreSQL Programmer's Guide.

Наверное, вы все-таки захотите запустить psql, чтобы выполнять примеры из этого учебника. Вы можете подключится к базе данных с именем mydb, введя следующую команду: $ psql mydb

Если вы опустите имя базы данных, то по умолчанию будет выбрано имя базы данных совпадающее с вашим именем пользователя. Вы уже читали об этом в предыдущей секции.

В psql, вы увидите следующее сообщение:

Welcome to psql 7.3.3, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms

\h for help with SQL commands

\? for help on internal slash commands

\g or terminate with semicolon to execute query

\q to quit

mydb=>

Последняя строка может также иметь вид:

mydb=#

Это будет означать, что вы имеете права суперпользоватя в базе данных, что наиболее вероятно, если вы устанавливали PostgreSQL сами. Быть суперпользователем означает, что вы не попадаете под ограничения доступа. Для целей, которые преследует данный учебник это не важно.

Если у вас возникли проблемы при запуске psql, то вернитесь назад к предыдущей секции. Диагностические сообщения psql и createdb похожи и если одна из этих программ работает, то и вторая тоже должна работать.

Последняя строка, которую выдает psql - это приглашение, которое показывает, что psql ожидает ввода запросов SQL в рабочую область, которой управляет psql. Попытайтесь ввести эти команды:

mydb=> SELECT version();

version

----------------------------------------------------------------

PostgreSQL 7.3devel on i586-pc-linux-gnu, compiled by GCC 2.96

(1 row)

mydb=> SELECT current_date;

date

------------

2002-08-31

(1 row)

mydb=> SELECT 2 + 2;

?column?

----------

4

(1 row)

Программа psql имеет несколько внутренних команд, которые не являются командами SQL. Они начинаются с обратной косой черты, "\". Некоторые из этих команд были перечислены в приветственном сообщении при запуске программы. Например, вы можете получить помощь в синтаксисе разных команд PostgreSQL SQL если введёте:

mydb=> \h

Чтобы выйти из psql введите

mydb=> \q

и psql завершит свою работу и вы вернетесь в командный интерпретатор (shell). (Внутренние команды можно увидеть, набрав \? на приглашение psql.) Полные возможности psql описываются в PostgreSQL Reference Manual. Если PostgreSQL установлен корректно, вы можете также ввести man psql в приглашении командного интерпретатора, чтобы посмотреть документацию на эту программу. В данном учебнике, мы не используем явно все возможности этой программы, но вы можете использовать их сами, когда прочтёте документацию и увидите их.

Создание новой таблицы

Вы можете создать новую таблицу, указав имя таблицы, а затем все имена полей в этой таблице и их типы. Рассмотрим пример таблицы, описывающей погоду:

Рисунок 6.7.22 – Таблица о погоде

Вы можете ввести эти строки в psql с разделителями строк. psql понимает, что команда не завершена, пока не встретится точка с запятой.

Пустые символы (т.е. пробелы, табуляция и символы перевода строки) свободно могут использоваться в командах SQL. Это означает, что вы можете вводить команду с произвольным выравниванием или даже вообще вводить все в одной строке. После двух дефисов ("--") вводят комментарии. ВсЈ что идет за ними игнорируется до конца текущей строки. SQL не обращает внимание на регистр вводимых слов и идентификаторов, за исключением случаев, когда идентификаторы находятся в двойных кавычках, которые сохраняют регистр (чего нет в данном выше примере).

varchar(80) задаёт тип данных, который может хранить символьные строки длиной до 80 символов. int - это обычный целочисленный тип. real - это тип данных, хранящий числа с плавающей точкой одинарной точности. Тип date говорит сам за себя. (Совершенно верно, поле с типом date так и называется дата. Удобно это или нет -- решать вам.)

PostgreSQL поддерживает таки полезные типы SQL как int, smallint, real, double precision, char(N), varchar(N), date, time, timestamp и interval, а также и другие общеиспользуемые типы и богатый набор геометрических типов. PostgreSQL можно настроить так, чтобы он работал с произвольным числом типов данных, определенных пользователем. Следовательно, имена типов не являются синтаксическими ключевыми словами, за исключаем тех случаев, где требуются поддержка специально согласно стандарту SQL.

Второй пример сохранит города и соответствующие им географические координаты:

Рисунок 6.7.22 – Таблица о координатах городов

Тип point - это пример специфического для PostgreSQL типа данных.

Наконец, если вам не нужна далее созданная вами таблица или если вы планируете пересоздать её с другим набором полей, вы можете удалить её используя команду:

Рисунок 6.7.23 – Команда

Заполнение таблицы записями

Для помещения записей в таблицу используется оператор INSERT:

Рисунок 6.7.24 – Оператор INSERT

Обратите внимание, что все типы данных, используемые в команде имеют соответствующие форматы. Константы, которые не являются простыми числовыми значениями обычно должны быть заключены в одинарные кавычки ('), как показано в примере. Тип date фактически может быть записан по-разному, но в данном учебнике мы будем придерживаться понятного формата, который показан в примере.

Тип point требует пару координат, как показано здесь:

Рисунок 6.7.25 – Оператор INSERT

Синтаксис, используемый здесь требует, чтобы вы помнили порядок полей. Альтернативная форма записи позволяет вам перечислять поля явно:

Рисунок 6.7.26 – Оператор INSERT

Вы можете указать поля в другом порядке, если захотите это или даже опустить некоторые поля, например, если проценты неизвестны:

Рисунок 6.7.27 – Опускание полей

Многие разработчики считают, что явное перечисление полей является более лучшим стилем, чем использование неявного порядка следования полей.

Пожалуйста, вводите все команды данные выше так, чтобы у вас были какие-либо данные для работы с ними в следующих секциях.

Для загрузки большого количества данных из простого текстового файла, вы также можете использовать команду COPY. Обычно это работает быстрее, потому что команда COPY оптимизирована для операции, которую она выполняет, но в то же время она менее гибкая чем команда INSERT. Вот пример её использования:

Рисунок 6.7.28 – Оператор загрузки

где файл, указанный как источник данных должен быть доступен на машине с backend сервером, а не на клиентской машине, потому что backend сервер читает этот файл напрямую. Вы можете прочитать подробности о команде COPY в PostgreSQL Reference Manual.

SQL: запросы к таблицам

Для получения данных из какой-либо таблицы, к этой таблице осуществляется запрос. Для этого используется оператор SQL SELECT. Этот оператор подразделяется на список выбора (часть, где перечисляются возвращаемые запросом поля), список таблиц (часть, где перечисляются таблицы, из которых выбираются данные) и необязательную часть отбора (часть, где указываются разные ограничения). Например, чтобы получить все записи таблицы weather введите:

Рисунок 6.7.29 – Оператор select

(здесь * означает "все поля") и вывод должен выглядеть так:

Рисунок 6.7.30 – Оператор select

Вы можете задать какие-либо произвольные выражения в списке выбора. Например, вы можете сделать так:

Рисунок 6.7.31 – Оператор select

Что приведет к выводу:

Рисунок 6.7.32 – Вывод

Обратите внимание, как для слово AS используется для изменения заголовка выводимого поля.

В запросе, в части отбора, разрешаются произвольные Логические операторы (AND, OR и NOT). Например, следующий запрос получает погоду в Сан-Франциско в дождливые дни:

Рисунок 6.7.33 – Запрос

Результат:

Рисунок 6.7.34 – Результат запроса

В качестве последнего замечания, отметим что результаты запроса могут быть получены в отсортированном виде, а также с удалением записей, которые дублируют друг друга:

Рисунок 6.7.35 – Сортировка

DISTINCT и ORDER BY, разумеется, могут использоваться и по отдельности.

Заключение

Подводя итоги, можно сказать следующее: MySQL и PostgreSQL – две наиболее популярные open-source базы данных в мире. Каждая база имеет свои особенности и отличия. Если вам нужно быстрое хранилище для простых запросов с минимальной настройкой, то лучше MySQL. Если вам нужно надежное хранилище для большого объема данных с возможностью расширения, репликации, полностью соответствующее современным стандартам языка SQL, то лучше PostgreSQL.