PostgreSQL – это система управления реляционными базами данных корпоративного класса, наравне с лучшими проприетарными системами баз данных: Oracle, Microsoft SQL Server и IBM DB2. PostgreSQL уникален, потому что это не просто база данных, но еще и качественная платформа приложений.
PostgreSQL работает быстро. В тестах PostgreSQL либо превосходит, либо сопоставляет производительность многих других баз данных, как открытых, так и проприетарных.
PostgreSQL предлагает вам написать хранимые процедуры и функции на многочисленных языках программирования. Помимо готовых языков C, SQL и PL/pgSQL, вы можете легко включить поддержку дополнительных языков, таких как PL/Perl, PL/Python, PL/V8 (он же PL/JavaScript), PL/Ruby и PL/R. Такая поддержка широкого спектра языков позволяет вам выбирать язык с конструкциями, которые могут наилучшим образом решить имеющуюся проблему. Например, используйте R для статистики и построения графиков, Python для вызова веб-сервисов, библиотеку Python SciPy для научных вычислений и PL/V8 для проверки данных, обработки строк и обработки данных JSON. Еще проще: найдите необходимую вам свободно доступную функцию, узнайте язык, на котором она написана, включите этот конкретный язык в PostgreSQL и скопируйте код. От этого качество выполненной работы не пострадает.
Разнообразие типов
Большинство выпускаемых баз данных ограничивают вас предопределенным набором типов данных: целыми числами, текстами, логическими значениями и т. д. PostgreSQL не только поставляется с большим встроенным набором, чем большинство баз, но и имеет возможность установки дополнительных типов данных в соответствии с вашими потребностями. Нужны комплексные числа? Создайте составной тип, состоящий из двух чисел. Имеется треугольный фетиш? Создайте тип координат, затем создайте тип треугольника, состоящий из трех пар координат. Предпочитаете двенадцатеричную систему исчисления? Создайте свой собственный двенадцатеричный тип. Инновационные типы полезны, поскольку операторы и функции их поддерживают. Поэтому, как только вы создали свои специальные типы чисел, не забудьте определить для них основные арифметические операции. Да, PostgreSQL позволит вам настроить значение символов (+,-,/,*). Всякий раз, когда вы создаете новый тип, PostgreSQL автоматически создает для вас тип сопутствующего массива. Если вы создали тип комплексного числа, вам доступны массивы комплексных чисел без дополнительной работы.
PostgreSQL также автоматически создает типы из любых определенных вами таблиц. Например, создайте таблицу собак с такими столбцами, как порода, остроумие и громкость лая. За кулисами PostgreSQL поддерживает для вас тип данных dog. Этот удивительно полезный мост между реляционным миром и объектным миром означает, что вы можете обрабатывать элементы данных так, чтобы это было удобно для поставленной задачи. Вы можете создавать функции, которые работают с одним объектом одновременно, или функции, которые работают с наборами объектов одновременно. Многие сторонние расширения для PostgreSQL используют пользовательские типы для достижения прироста производительности, предоставляют доменные конструкции для более короткого и удобного в обслуживании кода и выполняют функции, о которых вы можете только мечтать с другими базами данных.
Наш главный совет таков: не воспринимайте базы данных как простое хранилище. База данных, такая как PostgreSQL, может быть полноценной прикладной платформой. С надежной базой данных все остальное становится лишь декорацией. После того, как вы станете профессионалом в SQL, вы сможете за считанные секунды достичь того, что потребует большого количества времени от обычного программиста, как в плане кодирования, так и в плане подготовки к релизу.
Недостатки
Типичный размер установленной PostgreSQL без каких-либо расширений составляет более 100 МБ. Это исключает PostgreSQL в качестве базы данных на небольшом устройстве или в качестве простого хранилища кеша. Существует множество облегченных баз данных, которые могли бы лучше удовлетворить ваши потребности без увеличения занимаемой площади.
Учитывая его корпоративный статус, PostgreSQL воспринимает безопасность слишком серьезно. Если вы разрабатываете легковесные приложения, в которых вы управляете безопасностью на уровне приложений, безопасность PostgreSQL с ее сложной ролью и управлением разрешениями может оказаться излишней. Так что в подобных случаях лучше обратиться к однопользовательской базе данных, такой как SQLite. Также можно воспользоваться Firebird, которая может быть запущена как клиентский сервер или в однопользовательском встроенном режиме.
Все это говорит о том, что стандартной практикой для PostgreSQL является объединение с другими типами баз данных. Одна из распространенных комбинаций, которую вы найдете, – это использование Redis или Memcache для кэширования результатов запросов PostgreSQL. В качестве другого примера, SQLite можно использовать для хранения несвязанного набора данных для автономных запросов, когда PostgreSQL является основным сервером базы данных для приложения.
Наконец, многие хостинговые компании не предлагают PostgreSQL в среде общего хостинга или предлагают его устаревшую версию. Большинство команий все еще тяготеет к MySQL.
Файлы конфигурации
Операциями сервера PostgreSQL управляют три основных файла конфигурации:
- postgresql.conf. Управляет общими настройками, такими как распределение памяти, место хранения по умолчанию для новых баз данных, IP-адреса, которые прослушивает PostgreSQL, расположение журналов и многое другое.
- pg_hba.conf. Управляет доступом к серверу, определяя, какие пользователи могут входить в какие базы данных, какие IP-адреса могут подключаться и какую схему аутентификации принимать.
- pg_ident.conf. Если этот файл присутствует, он сопоставляет аутентифицированный логин ОС пользователю PostgreSQL. Люди иногда связывают корневую учетную запись ОС с учетной записью суперпользователя PostgresSQL, postgres.
Если вы приняли параметры установки по умолчанию, вы найдете эти файлы конфигурации в главной папке данных PostgreSQL. Вы можете редактировать их, используя любой текстовый редактор или пакет администратора в pgAdmin. Если вы не можете найти физическое расположение этих файлов, запустите запрос из примера ниже в качестве суперпользователя при подключении к любой базе данных.
Применение параметров конфигурации
Некоторые изменения конфигурации требуют перезапуска службы PostgreSQL, которая закрывает любые активные подключения от клиентов. Другие изменения требуют только перезагрузки. Новые пользователи, подключающиеся после перезагрузки, получат новые настройки. Существующие пользователи с активными подключениями не будут затронуты во время перезагрузки. Если вы не уверены, требует ли изменение конфигурации перезагрузки или перезапуска, обратитесь к контекстному параметру, связанному с конфигурацией. Если контекст является postmaster, вам потребуется перезапуск. Если контекст имеет статус user, будет достаточно и перезагрузки.
Перезагрузка
Перезагрузка может быть выполнена несколькими способами. Один из способов – открыть окно консоли и запустить эту команду:
Если у вас установлен PostgreSQL в качестве службы в RedHat Enterprise Linux, CentOS или Ubuntu, введите вместо этого:
postgresql-9.5 – это название вашего сервис (в более старых выпусках PostgreSQL сервис иногда называют postgresql без номера версии).
Вы также можете войти как суперпользователь в любую базу данных и выполнить следующий SQL:
Перезапуск
Более фундаментальные изменения конфигурации требуют перезапуска. Вы можете выполнить перезапуск, остановив и перезапустив службу postgres (daemon). Да, маневренный режим мощности тоже поможет.
Вы не можете сделать перезапуск с помощью команды PostgreSQL, но вы можете сделать это из оболочки операционной системы. В Linux/Unix со службой введите:
Для любого экземпляра PostgreSQL, не установленного в качестве службы:
В Windows вы также можете просто нажать «Перезагрузить» в службе PostgreSQL в диспетчере служб.
Кастомизация psql
Разработчикам, которые часто имеют дело с psql, не лишним будет рассмотреть возможность адаптации среды psql для повышения производительности. Psql берет настройки из специального файла psqlrc, отвечающего за конфигурацию (если он есть). Когда запускается psql, он автоматически проводит поиск этого файла и инициирует все его команды.
В Linux/Unix этот файл обычно имеет название .psqlrc и должен быть помещен в ваш корневой каталог. В Windows же он имеет название psqlrc.conf и располагается на диске C, в папке Roaming. Не беспокойтесь, если сразу по завершению инсталяции не можете определить его местонахождение; вам обычно нужно его создать. Разнообразные команды в файле переопределяют дефолтные значения для psql.
Данный пример дает представление о файле psqlrc. Вы можете включить в него любую psql-команду.
Когда вы вновь запустите psql, результат выполнения файла конфигурации отразится на экране:
Какая-то часть команд доступна только в системах Linux/Unix, в то время как другие работают только в Windows. В любой из ОС вы должны использовать косую черту в стиле Linux/Unix (прямую косую черту) для обозначения пути. Если вы хотите обойти файл конфигурации и запустить psql со всеми его значениями по умолчанию, запустите его с опцией -X.
Вы можете изменять настройки на лету, пока находитесь в psql, хотя изменение вступит в силу только во время сеанса psql. Чтобы удалить переменную конфигурации или установить ее по умолчанию, введите команду unset, а затем настройку, например: unset qstat92.
При использовании set помните, что переменная, которую вы устанавливаете, чувствительна к регистру. Используйте все заглавные буквы, чтобы установить системные параметры, и строчные буквы для ваших собственных переменных. В позапрошлом примере PROMPT1 – это системный параметр для отображения приглашения ввода psql, тогда как qstats92 – это переменная, инициализированная как сокращение для отображения текущих действий на сервере PostgreSQL.