Настройка PostgreSQL под Linux
Время от времени приходится слышать мнение от некоторых системных администраторов, а также некоторых 1С-разработчиков, что установка, настройка и поддержка PostgreSQL под Linux очень сложна. Что гораздо дешевле покупать лицензии Windows и Microsoft SQL Server, чем нанимать высококвалифицированных администраторов, которые будут администрировать все эти open-source системы.
На наших бизнес-приложениях, использующих в качестве СУБД PostgreSQL, работают 70% крупнейших розничных сетей в Беларуси. Во всех из них одновременно работают от 500 до 1500 пользователей. В приложениях реализованы практически все основные процессы розничных сетей (демо, чтобы оценить сложность). Размер баз данных на данный момент составляет от 2 до 4ТБ. И все они работают практически со стандартными настройками PostgreSQL на одиночных серверах без какой-либо кластеризации. При этом даже в самых загруженных серверах есть еще значительный резерв по ресурсам для дальнейшего увеличения нагрузки без потребности в кластеризации.
Да, конечно же, многое зависит от запросов к СУБД, и несколькими кривыми запросами можно положить весь сервер. Однако, точно также можно положить и Oracle, и MSSQL. Да, платформа lsFusion, на которой написаны наши приложения, делает много различных оптимизаций запросов конкретно под PostgreSQL. Но вручную SQL-запросы можно оптимизировать еще лучше.
В этой статье я полностью опишу все настройки PostgreSQL (и немножко ОС), которые мы делаем на наших системах. Кроме того, мы специально стараемся не изменять те настройки, которые не дают видимого изменения в производительности, чтобы потом не гадать, почему в одном окружении есть проблема, а в другом — нет.
Установка PostgreSQL
Не буду сильно заострять внимание непосредственно на установке, так как по ней есть миллион инструкций в интернете, но вкратце опишу, чтобы показать насколько это просто.
Сейчас у большинства наших клиентов мы используем в качестве ОС CentOS 7. Просто так исторически сложилось, хотя у некоторых используются и Debian, и Ubuntu, и там тоже все работает нормально. Единственная проблема у нас возникала у двух клиентов только с CentOS 8. Там почему-то производительность была процентов на 30 ниже чем с CentOS 7 за счет возникающего высокого system time при активной работе со временными таблицами. Анализ perf и исходников PostgreSQL не дал быстрых результатов, а из-за ограничения времени и давления со стороны клиентов пришлось просто откатиться на CentOS 7, после чего проблема ушла.
Установка CentOS делается с минимального образа, скачанного с официального сайта. Там есть графический инсталятор, и с установкой прекрасно справлялись даже системные администраторы, которые ранее в глаза не видели Linux. Естественно, установка ОС идет не на голое железо, а на виртуальную машину.
Единственная рекомендация, которую мы стараемся давать при установке ОС — чтобы под базу данных подключали отдельный диск (лучше даже без LVM). Это удобно тем, что потом можно легко при необходимости менять ОС, просто подключая диск с базой данных к другой виртуальной машине.
После того, как ОС установлена, и к ней получен SSH-доступ, делается установка как описано на официальном сайте PostgreSQL. В частности, на Redhat-based Linux, которой и является CentOS, в консоле нужно запустить следующие команды :
Эти команды добавляют в общий список yum-репозиторий, и устанавливают программные файлы PostgreSQL.
Дальше нужно создать саму базу данных. Часто в документации PostgreSQL используется терминология кластер базы данных, который более правильный, так как в кластере может быть много баз. Но в дальнейшем, для упрощения, я буду часто называть ее просто базой данных (так как в рабочих окружениях, кроме системных мы держим только одну базу данных).
Перед инициализацией базы данных рекомендуется проверить и установить часовой пояс и регион (так как они запишутся в настройки самой базы из настроек ОС) :
По умолчанию, база данных будет установлена по пути /var/lib/pgsql/14/data. Но если под базу данных был выделен отдельный диск, то можно перед инициализацией кластера задать путь, куда будет установлена база данных следующим образом :
В появившемся окне редактора указать следующие параметры :
Если диск с базой был смонтирован по пути /data, то лучше помещать кластер в подкаталог /data/14, чтобы потом было легче делать pg_upgrade базы данных до 15й и последующих версий.
Наконец, создаем сам кластер БД при помощи следующей команды :
Помимо создания самой базы данных эта команда создает в ОС службу postgresql-14. Ее дальше нужно добавить в автозагрузку при помощи команды :
Запуск и остановка службы осуществляется соответственно следующим образом :
Настройка PostgreSQL
Все основные настройки PostgreSQL находятся в двух файлах : postgresql.conf и pg_hba.conf. В первом хранятся настройки самой базы данных, а в во втором — настройки доступа к ней. Изменение параметров осуществляется путем редактирования этих файлов в любом текстовом редакторе. Лично я чаще всего пользуюсь встроенным редактором Midnight Commander.
После любых изменений параметров требуется уведомить СУБД о том, что требуется перечитать конфигурацию. Лишь маленькая часть параметров требует перезапуска службы PostgreSQL (при помощи команд stop/start указанных чуть выше). Большинство параметров можно изменить на лету несколькими способами. Я чаще всего использую для этого psql. Для этого делается сначала в консоли :
А затем уже внутри psql запускается :
Основные настройки
Главные настройки, которые значительно могут влиять на производительность, которые необходимо сделать в первую очередь — это настройки памяти. По умолчанию, PostgreSQL сконфигурирован так, чтобы запуститься на любой машине без какой-либо автоматической адаптации.
Первым делом возможно надо увеличить параметр max_connections. По умолчанию, он равен 100, что может быть мало при большом количестве пользователей. Однако слишком большое значение тоже не стоит указывать (так как есть дополнительные расходы). Поскольку lsFusion создает под каждого пользователя по своему выделенному соединению, то мы обычно выставляем :
PostgreSQL не работает с данными на диске напрямую. Когда ему нужно что-то считать или записать, то он загружает соответствующие страницы с диска в блок памяти, который называется shared buffers. Эта общая память, которая используется одновременно всеми подключениями. Чем выше объем этих буферов, тем меньше будет нагрузка на диск. Для тонкой настройки можно анализировать в динамике, как именно идет ротация этих буферов, но на практике мы обычно выставляем от 30 до 50% всей доступной памяти на сервере :
Помимо этого параметра, обычно мы сразу настраиваем еще три :
Эти параметра указывают сколько памяти может использоваться каждым подключением для внутренних операций при выполнении запросов и работе с временными таблицами. Так как от этого параметра зависит сколько памяти будет потреблять каждое подключение, то эти параметры лучше всего эмпирически регулировать в ходе работы в зависимости от свободной памяти. Если в течение недели памяти достаточно, то можно увеличить оба параметра (и наоборот).
Существует один прием, используемый автоматически платформой lsFusion, который позволяет уменьшать потребляемую память. Каждое подключение к PostgreSQL — это отдельный процесс в ОС. По мере выполнения запросов эти процессы не всегда быстро отдают использованную память обратно операционной системе. Для того чтобы бороться с этим, платформа время от времени закрывает активные подключения и открывает их заново. Тем самым процесс, который потребляет много памяти, уничтожается, а на его месте создается новый. Это позволяет значительно уменьшить объем частной памяти потребляемый всеми пользовательскими подключениями.
Этот параметр по умолчанию слишком маленький и лучше его увеличивать, чтобы ускорить разные системные операции.
Дополнительные настройки
Описанных выше настроек уже достаточно для того, чтобы PostgreSQL работал достаточно хорошо. Дальше опишу настройки, которые мы делаем для улучшения производительности. Каждая из них не дает существенного прироста, но они могут быть полезны в определенных случаях.
Если не планируется настройка асинхронной реплики, то обычно понижаем уровень wal_level. Synchronous_commit также отключаем, так как мы не пишем банковские системы. Если сервер упадет (что бывает крайне редко), то нет принципиальной разницы успело пользователю прийти сообщение об успешном сохранении или нет. Зато все сохранения будут работать чуть-чуть быстрее.
Под сильной нагрузкой СУБД некоторых наших клиентов успевают записывать по 1ГБ wal’ов в минуту. При значении max_wal_size равном 1ГБ получается, что чекпоинты будут происходить раз в минуту, что не есть хорошо (особенно при включенном full_page_writes). Поэтому обычно повышаем значение, чтобы чекпоинты происходили раз в 20 минут. Соответственно, немного уменьшается нагрузка на диск. Да, будет дольше восстановлении при падении, но это бывает крайне редко.
Обычно мы значительно понижаем (по сравнению со стандартными) стоимости диска, и в свою очередь увеличиваем стоимости процессорных операций. Так делается потому, что изначально настройки PostgreSQL делались под медленные HDD-диски. У нас же всегда используются SSD-диски в RAID-массивах, где стоимость чтения значительно ниже, а произвольное запись/чтение от последовательной не сильно отличается.
Единственное, мы стараемся использовать везде идентичные настройки параметров cost, чтобы планы выполнения запросов были одинаковыми. Иначе на тестовом окружении может работать все быстро, а в рабочем будет другой план, который будет значительно медленнее.
Здесь следует отметить, что изменения в параметрах PostgreSQL не всегда приводят к ожидаемому результату в планах запросов. У нас была ситуация, когда простое увеличение параметра work_mem привело к тому, что запрос вместо 20 минут начал выполняться 2 часа. В плане выполнения начал использоваться hash join с предварительным seq scan всей таблицы, которую приходилось читать с диска. Тут кроется одна из основных проблем планирования запросов в PostgreSQL. Планы не учитывают какие данные находятся сейчас в shared buffers, а какие нет. И часто гораздо выгоднее сделать пробег по тем данным, которые в кэше (пусть их и значительно больше), чем читать с диска меньший объем.
Внешний доступ
Если сервер приложений расположен не на той же самой машине, что и PostgreSQL, то требуется разрешить подключения с другого сервера. По умолчанию, PostgreSQL в целях безопасности принимает только локальные подключения. Чтобы разрешить принимать подключения извне, нужно в postgresql.conf установить следующий параметр :
После этого потребуется рестарт всей службы PostgreSQL. После этого, нужно добавить в pg_hba.conf IP, с которых принимать подключения (а именно адрес сервера приложений) :
Вместо trust нужно использовать scram-sha-256, если доступ требуется по паролю.
Дополнительные настройки Linux
Помимо описанных ранее настроек PostgreSQL в серверах с большим количеством памяти мы часто изменяем еще несколько настроек самого CentOS.
Во-первых, в /etc/sysctl.conf устанавливаются следующие параметры :
Первый параметр устанавливает минимальное количество свободной памяти, которую будет стараться держать ОС. Это нужно, чтобы избавиться фрагментации памяти и высокого system time в определенных случаях (вот тут описана проблема). Swappiness выставляем в 1, так как своп будет очень сильно вредить, а 0, вроде как, не рекомендуется (хотя особой разницы в поведении между 0 и 1 я не замечал).
Далее, в /etc/fstab при подключении диска с базой данных прописываем опции noatime,nodiratime. Мелочь, но хуже не будет. Например :
Также на большом объеме памяти обычно настраиваем использование huge pages. Для этого сначала отключаем THP, а затем добавляем фиксированное количество страниц, которое соответствует размеру shared buffers. В файл /etc/sysctl.conf добавляем :
Ну и наконец, так как мы используем высокопроизводительные SSD диски, то обычно выключаем планировщик ввода/вывода, включая noop или none режим. Есть много способов это сделать, но обычно мы просто настраиваем службу :
Конфигурация сервера
В заключении пару слов хотелось бы написать про то оборудование, которой используется под PostgreSQL. Несмотря на то, что обычно используется виртуализация, машина с PostgreSQL устанавливается единственной на всем физическом сервере.
Например, один из наших клиентов использует сервер с двумя процессорами Intel Gold с 24 ядрами в каждом (что дает 96 виртуальных ядер) и 256ГБ памяти. В сервер напрямую через PCI express воткнуты 4 NVME диска по 3ТБ каждый, которые собраны в программный RAID-10 (через LVM) объемом около 5.8ТБ. Сейчас база данных там занимает около 3ТБ, с которой работают около 1000 одновременных пользователей. Рыночная стоимость такого сервера на данный момент составляет около 12K$ (и еще 12К$ стоят диски такого размера).
Такая конфигурация дает очень высокую скорость как дисковых операций, так и большой запас по CPU. В частности, график использования CPU на этом сервере выглядит следующим образом :
В пиковые моменты времени скорость чтения на таком сервере достигает 1.5ГБайт/секунду без существенного увеличения времени waiting :
Такого запаса производительности сервера будет достаточно при увеличении количества пользователей в 2-3 раза, прежде чем нужно будет начинать использовать кластеризацию.
Заключение
Мы активно используем PostgreSQL в нагруженных приложениях уже более 5 лет. Мы поддерживаем базы данных у нескольких десятков клиентов (как мелких на пару десятков пользователей, так и достаточно крупных). За все это время было много различных нештатных ситуаций, связанных с аварийными отключениями виртуальных машин и серверов. И ни разу у нас не было потерь данных. PostgreSQL всегда запускался, воспроизводил wal с последнего checkpoint и прекрасно продолжал работу. Один раз системный администратор клиента случайно удалил диск, на котором хранился целый tablespace от базы данных. При этом PostgreSQL продолжил работу просто без этих таблиц. Но даже тогда после определенных танцев с бубнами удалось восстановить базу данных в нормальное состояние, а данные пропавших таблиц достать из копии.
PostgreSQL постоянно развивается. Приблизительно каждый год выходит новый релиз с новыми возможностями. Последней значимой для нас была 13я версия (все крупные клиенты уже давно перешли на нее). В ней, в частности, значительно улучшили работу индексов с повторяющимися значениями. В результате размер наших баз данных сократился на 10-15 процентов.
Резюмируя, хочу отметить, что PostgreSQL прекрасно подходит для бизнес-приложений, легка в настройке, и предоставляет отличную альтернативу коммерческим СУБД.
How to Install PostgreSQL on Ubuntu, pgAdmin Configuration, and Useful Tips
Any modern application or system requires a database to run correctly. Unlike NoSQL solutions, such as MongoDB, most people choose a relational database management system. Relational databases work by providing a logical structure to the data. Thus such data can be queried and accessed at any time.
One of the most popular relational database management systems is PostgreSQL. It is an open-source, community-driven, and scalable product that is an excellent choice for small businesses and big enterprises.
In this tutorial, we will show you two ways how to install PostgreSQL on Ubuntu 18.04, 20.04, and 22.04. We will also cover the pgAdmin installation process and provide valuable tips for using PostgreSQL databases.
3 Easy Steps to Install PostgreSQL on Ubuntu
In order to install the PostgreSQL server on Ubuntu, you will need to have an already running virtual private server (VPS) with Ubuntu operating system installed.
Pro Tip
If you haven’t launched your server yet, learn how to setup a VPS with Hostinger’s step-by-step guide.
With all the prerequisites done, connect to SSH and start with the installation.
Step 1 – Install PostgreSQL
Start by choosing one of the following options – installation from the APT repository or by using a local Ubuntu repository. We recommend sticking with the APT repository method, as you will always get the newest version of the PostgreSQL server.
Option 1 – Installation From APT Repository
The most popular way of installing PostgreSQL is by using the APT package manager. Start with importing the key from the official PostgreSQL repository. Run the following commands one at a time:
Next, refresh the APT command to synchronize all repositories:
Install PostgreSQL with APT and sudo privileges. This command will install the latest version of PostgreSQL:
Pro Tip
If you want to install a specific version, proceed with the following command sudo apt-get -y install postgresql-12. In this example, PostgreSQL 12 version was installed.
In order to confirm that the installation was successful, run the following command:
Then, filter out the version:
Here’s a visual example of how the output should look:
Option 2 – Installation Using Local Ubuntu Repository
Another option to install PostgreSQL is by using the local Ubuntu repository. Keep in mind that this method does not guarantee the newest version available. First, verify which PostgreSQL apt repository versions are available:
Then proceed with the installation:
In our case, we installed the 12.11 version. If a 404 error shows up during the installation process, run this command to try again:
To confirm that the installation was successful, run the following command:
Then, filter out the version:
A command-line example should look like this:
As shown in the example, PostgreSQL server version 12.11 was successfully installed.
Step 2 – Connect to PostgreSQL
Now that the PostgreSQL installation is complete, go ahead and switch to the postgres user with this command:
In order to start PostgreSQL, type:
Step 3 – Change User Password
To change the postgres database user password, connect to PostgreSQL using this command:
Then, change the password:
Make sure to replace “NewPassw0rd” with an actual password. To double-check if the change was successful, use the following command:
Once that’s done, restart the PostgreSQL service.
Using PostgreSQL on Ubuntu
With the PostgreSQL database management system installed, it’s time to go over the most popular configuration options. We will go through the steps of creating a new user and a new database.
Creating a User on PostgreSQL
The easiest way to create a new PostgresSQL user account is to use the interactive mode. Start by switching to the postgres user:
Then, create a new user:
In our example, we called it TheNewUser:
To validate the new role, log in to PostgreSQL with the postgres account:
Lastly, check all of the currently created users with this command:
As shown in the example above, TheNewUser was successfully created.
Creating a Database on PostgreSQL
PostgreSQL assumes that the role name should be the same as the database name. If you create a role named TheNewUser, PostgreSQL will try to access a database with the same TheNewUser name.
Important! PostgreSQL uses Linux information for authentication. For the previous example, you need to have a user called TheNewUser.
To create a new database, proceed with the following command:
To log in to the newly created database, you must create a Linux user account with the same name. Since we use capital letters for the TheNewUser username, we will also use the –force-badname option.
Then, log in to the PostgreSQL prompt.
Lastly, confirm the connection:
Great work, TheNewUser user is now connected to the TheNewUser database.
How to Install pgAdmin on Ubuntu
Similar to phpMyAdmin, pgAdmin is a web-based GUI tool to manage your PostgreSQL databases. To install it, we will use the same APT package manager.
Start by adding the pgAdmin repository by running the following commands consecutively:
Now, update the package lists:
Once complete, install phAdmin:
After installation, initiate the primary configuration with the following command:
Fill in your email address and password. Your end result should look something like this:
After installation, open your web browser and enter pgAdmin with the following address:
Make sure to replace the IP with an actual address. Then, enter your email address, and password and click Login:
You will be redirected to the main pgAdmin dashboard. To connect PostgreSQL – select Add New Server and proceed with the configuration process.
Conclusion
If you want a robust and reliable database management system, consider using PostgreSQL. It will allow you to quickly scale your projects and manage them with a convenient pgAdmin GUI.
In this tutorial, we showed two ways how to install PostgreSQL on an Ubuntu system. We also covered how to:
One of the main advantages of using PostgreSQL 14 is better connection scaling. That means that large enterprises with a lot of database connections will benefit the most from PostgreSQL 14.
Other than that, the performance is similar in other areas. However, we recommend always sticking to the newest version because such software is generally safer and updated more frequently.
We hope that you found this tutorial helpful. If you have any questions, feel free to leave us a comment.
How to Install PostgreSQL FAQ
Where Is Postgres Installed on Ubuntu?
The main PostgreSQL server files are installed under /usr/lib/postgresql/<version/bin/postgres directory. All database clusters are stored in /var/lib/postgresql//main directory. If users need to access the PostgreSQL configuration file, they can open the /etc/postgresql//main/postgresql.conf file.
How Do I Know if PostgreSQL Is Installed on Ubuntu?
The easiest way to check if PostgreSQL is installed is to run any PostgreSQL-specific command, like sudo -u postgres psql. Alternatively, use the which psql command. You should see an output with the installation path if it is installed.
Should I Use PostgreSQL 13 or 14?
One of the main advantages of using PostgreSQL 14 is better connection scaling. That means that large enterprises with a lot of database connections will benefit the most from PostgreSQL 14. We recommend sticking to the newest version because such software is generally safer and updated frequently.
Ignas takes great satisfaction in helping people tackle even the most complex technical issues. His current goal is to write easy-to-follow articles so that these issues will not happen at all. During his free time, Ignas likes to play video games and fix up things around his house.
Установка и использование PostgreSQL в Ubuntu 20.04
Инструкция о том, как развернуть PostgreSQL на виртуальной машине и научиться работать с базовыми функциями сервиса.
Введение: краткое описание PostgreSQL
PostgreSQL (Postgres) — одна из популярных СУБД для проектов различных уровней: от стартапа до высоконагруженной системы. Она имеет большой набор функций, помогающий разработчикам и администраторам в разработке приложений, защите целостности данных и их управлении. PostgreSQL стандартизирована, надежна и способна осуществлять параллельность операций без блокировки при чтении. Она универсальна, подходит под любую операционную систему. В числе преимуществ также можно выделить:
- расширяемость (можно определять свои типы данных, создавать пользовательские функции);
- возможность индексирования географических объектов и присутствие расширения PostGIS;
- наследование (концепция ООП, считающая, что абстрактный тип данных способен наследовать данные и набор функций уже существующего типа, способствуя переиспользованию компонентов ПО;
- масштабируемая система встроенных языков программирования;
- устойчивые и надежные функции репликаций и транзакций.
Поскольку PostgreSQL продукт open-source, ее функции можно расширять и дополнять. Для дополнения функций можно воспользоваться одним из следующих языков:
- процедурный язык PL/pgSQL, встроенный язык, аналогичный PL/SQL, который используется в СУБД Oracle;
- классические языки C, C++, Java (с модулем PL/Java);
- скриптовые языки PL/v8 (JS), PL/Scheme, PL/Tcl, PL/sh, PL/Ruby, PL/Python, PL/PHP, PL/Perl, PL/LOLCODE, PL/Lua;
- Статистический язык R (используя модуль PL/R).
PostgreSQL поддерживает следующие объекты БД: B-дерево, хеш, GiST, BRIN, Bloom.
У PostgreSQL большой список поддерживаемых данных: численные типы, символьные типы, двоичные типы, «дата/время», булев тип, геометрические примитивы и т.д.
PostgreSQL позволяет нескольким пользователям работать одновременно с БД благодаря механизму MVCC (Multiversion Concurrency Control). За счет этого исключается необходимость блокировок чтения.
В этой инструкции мы развернем PostgreSQL на виртуальной машине. Рассмотрим базовые функции сервиса: генерацию роли, базы данных и таблицы, работу с консолью с добавленной ролью и удаление СУБД на виртуальной машине.
Требования к серверу
СУБД развернем на виртуальной машине Ubuntu 20.04, аккаунтом без root прав с sudo и брандмауэром.
Создание виртуальной машины (сервера)
При написании этой инструкции мы воспользуемся «Облачной платформой Selectel», на которой сконфигурируем сервер с нужной нам операционной системой.
На странице «Облачная платформа» перейдем в раздел «Серверы» и нажмем «Создать сервер».
Имя серверу присваивается в поле «Имя». Назовем машину postgresdoc.
В поле «Источник» из выпадающего списка выберем Ubuntu 20.04.
Проскроллим экран вниз и в поле «Сеть» в выпадающем списке укажем «Плавающий IP-адрес» для входа на сервер с других устройств.
Минимальные настройки готовы, нажмем кнопку «Создать» — наша виртуальная машина готова и отображается в списке на вкладке «Серверы».
Мы собрали сервер с характеристиками:
- Ubuntu 20.04 LTS 64-bit;
- ядро: 1vCPU;
- память 1ГБ RAM;
- память 5 ГБ HDD.
Как самостоятельно сконфигурировать сервер, развернуто написано в базе знаний.
Первичная настройка
До развертывания PostgreSQL настроим сервер: перейдем к нему по SSH и настроим брандмауэр с утилитой UFW.
Подключение по SSH
В терминале локальной машины введем:
server_ip — значение IP-адреса сервера, находится в разделе «Порты».
Для аутентификации потребуется пароль root-пользователя, его можно увидеть в разделе «Консоль».
Настройка брандмауэра
Чтобы сервер позволял подключаться пользователям по SSH, разберемся с брандмауэром.
На сервер мы подключились под root-пользователем и прежде чем настраивать, переключимся на аккаунт без root-прав с sudo.
Для брандмауэра скачиваем утилиту UFW:
Список профилей UFW можно вывести, написав:
OpenSSH будет отображаться в списке:
Разрешаем воспользоваться подключением по SSH:
И стартуем брандмауэр:
Проверим статус брандмауэра и список подключений OpenSSH:
Система даст ответ:
Займемся непосредственно развертыванием PostgreSQL.
Установка PostgreSQL на Ubuntu
В репозиториях Ubuntu уже включена PostgreSQL. Развертывание выполняется командой apt.
До загрузки PostgreSQL обновляем списки пакетов:
Загрузим PostgreSQL с утилитой -contrib:
Загрузятся драйверы PostgreSQL последней версии и развернутся необходимые компоненты на виртуальной машине с Ubuntu.
Проверка статуса сервиса:
Сервис развернули, разберемся в работе аккаунта postgres.
Работа с аккаунтом PostgreSQL
PostgreSQL применяет термин «Роль». Практически это тот же аккаунт в Ubuntu. При запуске СУБД роли сервиса привязываются к одноименным аккаунтам в Unix-системах. Другими словами, при наличии роли в PostgreSQL, войти в СУБД можно с аккаунтом Ubuntu. При запуске СУБД генерируется аккаунт postgres, привязываемый к роли PostgreSQL.
Вариант 1
Войдем в аккаунт:
После ввода команды видим подтверждение о переходе в аккаунт:
Откроем консоль Postgres:
Консоль открыта, что подтверждается записью в начале строки:
Работа в СУБД ведется из консоли.
Узнать статус подключения:
Возврат в аккаунт:
Вариант 2
Войдем в аккаунт postgres с sudo. Если сейчас находимся в аккаунте postgres, нужно выйти, набрав exit. В этом варианте перейдем в аккаунт postgres с sudo:
Возврат в аккаунт:
Создание роли
Аккаунт postgres обладает правами администратора. Напишем createuser, эта команда сообщает, что мы добавляем новую роль. Чтобы указать имя роли и выдать суперюзера, применим флаг —interactive.
Запись будет такой:
Вариант работы без переходов между аккаунтами:
Вводим имя, выдаем суперюзера:
Посмотреть другие ключи настроек:
Роль создана, поднимаем БД.
Создание базы данных
Любому созданному аккаунту привязывается база данных с идентичным именем, то есть наш созданный tester начнет подключаться к базе данных tester.
Командой createdb добавим БД (поднимем новую базу PostgreSQL на Ubuntu), назвав ее tester:
Вариант работы без переходов между аккаунтами:
Переход в командную строку PostgreSQL с новой ролью
Работа в консоли PostgreSQL подразумевает наличие аккаунта Ubuntu с именем БД в Postgres.
Добавим аккаунт Ubuntu, используя adduser (предварительно выйдя из аккаунта postgres), назвав аналогично новой роли:
Добавив аккаунт tester, переключаемся на него и подключаемся к консоли:
Переключиться на другую БД:
Проверку желательно выполнять для разных пользователей с разными БД.
Создание таблицы с данными
Команда создания имеет вид:
Создавая таблицу, указываем ее имя, столбцы, их типы, ограничения размеров полей. В качестве непосредственного примера добавим таблицу комплекта сноубордиста:
СУБД выводит информацию:
- Equip_id — столбец с идентификатором типа serial и автоинкрементом. Ему присвоили свойство primary key, указывающее на использование не нулевых показателей.
- Title и company указывают наименование и фирму-производителя единицы комплекта.
- Size хранит размеры наименований комплекта, предлагая выбор одного из предложенных размеров.
Создана таблица с переменной snowboarder_equip_id_seq, тип данных sequence. Переменная указывает на номера последовательности и генерируется автоматически.
Вывести таблицу без переменной:
Работа с данными таблицы
Таблица есть, остается ее наполнить.
Добавление данных в таблицу
Состав комплекта нашего сноубордиста: snowboard (сноуборд), binding (крепления), boots (ботинки). Вызовем таблицу, где укажем столбцы и их значения. Добавим 3 строки:
Пишем внимательно, избегая ошибок. Неверно использовать кавычки в названиях столбцов. Кавычки указываются в значениях столбцов. Значение столбца equip_id генерируется самостоятельно во время создания строки.
После добавления каждой строки СУБД подтверждает операцию:
Вывод данных
Выведем таблицу с новыми данными:
Видим, что все поля заполнены значениями, прописанными нами, и в equip_id отображается нумерация строк.
Удаление данных
СУБД подтвердит удаление строки:
Строка binding удалена.
Изменение данных
Иногда записи таблицы приходится менять. Для изменения записи указывают тип и устанавливают новое значение. Выберем boots и изменим компанию на blackfire:
СУБД подтвердит обновление строки:
СУБД даст ответ:
Фирма-производитель ботинок изменилась на blackfire.
Работа со столбцами
Таблицы можно редактировать, меняя состав столбцов.
Добавление столбца
Введем столбец с отображением стоимости:
СУБД подтвердит добавление:
Выведя таблицу, увидим пустой добавленный столбец, так как добавили его без указания данных. Как его заполнить данными, описано выше.
СУБД даст ответ:
Удаление столбца
Удалить столбец из таблицы:
Команда удалит столбец price и значения внутри него.
СУБД подтвердит удаление столбца:
Удаление таблицы
Удаляется таблица командой:
СУБД подтвердит операцию:
Введя команду \dt, увидим сообщение от СУБД:
Установка phppgadmin
Утилита PhpPgAdmin доступна в репозитории по дефолту в Ubuntu 20.04. Устанавливаем утилиту PhpPgAdmin под пользователем Ubuntu:
Когда утилита установится, переходим в файл конфигурации phppgadmin.conf в директории /etc/apache2/conf-available и закомментируем строку Require local. Пропишем строку Allow From all. Такие изменения в файле конфигурации позволят подключаться к серверу как с локальной машины, так и с других устройств.
Удаление PostgreSQL
Перед удалением PostgreSQL и очисткой сервера от следов сервиса удостоверимся, что СУБД остановлена.
В аккаунте Ubuntu напишем, что хотим узнать:
Если СУБД остановлена, ответ на команду не должен показать никаких результатов. В ином случае, обслуживание нужно остановить. Остановить PostgreSQL:
PostgreSQL удалена на нашей виртуальной машине.
После удаления пропишем команды:
Заключение
В этой инструкции мы развернули PostgreSQL на сервере Ubuntu 20.04.
Рассмотрели базовые функции по работе в СУБД:
- добавили роль, БД, таблицу;
- внесли в нее нужные нам значения;
- удалили таблицу и саму PostgreSQL.
Поскольку СУБД обладает множеством возможностей, рассчитанных на новых пользователей, со временем понадобятся и более продвинутые функции хранения и обработки данных. Все функции PostgreSQL можно изучить на странице официальной англоязычной версии документации.
Стоит отметить, что у PostgreSQL большое сообщество пользователей, а открытый исходный код СУБД способствует тому, что при новых релизах новые ошибки выявляются, быстро исправляются, и успешно осуществляется тестирование.
Зарегистрируйтесь в панели управления
И уже через пару минут сможете арендовать сервер, развернуть базы данных или обеспечить быструю доставку контента.
How To Install Postgres for Ubuntu Linux
In this tutorial, you will learn how to install PostgreSQL on Linux with a Postgres Graphical Installer and using then apt-get command.
Note: This article was originally published on the Launch School blog on 2014–09–05
Note: For Postgres installation on Mac OS X, see How to Install Postgres for Mac OS X.
Introduction
For this post, we will go through the steps and options available to install Postgres on a Linux based system, specifically on Ubuntu 14.04 LTS. We will cover installation options using apt-get . Let's dive in!
Install Postgres Database
All Linux distributions come bundled with an Advanced Packaging Tool or APT, to handle installation and removal of software. This acts as a kind of user interface and simplifies the process of installing software on Debian/Linux distributions. apt-get is one of the common tools for dealing with packages on Linux systems. You can type apt-get —help to view usage and available options. APT relies on repositories that contain free software available for installation. PostgreSQL is available on Ubuntu's apt repository by default, thus we can install it easily.
Let’s start by updating our apt-get 's list of packages:
Enter your admin password when prompted and wait for the process to complete.
Next, we’ll install Postgres by entering the following command in our terminal:
What this does is to install additional modules and useful tools found in the contrib directory of the PostgreSQL distribution.
Enter y when prompted "Do you want to continue? [Y/n]" and wait for the installation to complete.
By default Postgres creates a postgres user and is the only user who can connect to the server. We'll want to create ourselves on the server with superuser capabilities with the same name as our login name:
Enter your desired password when prompted.
Next, we’ll have to create a database with the same name as our login name since this is what Postgres expects by default when connecting to the server with your login name:
Navigate to your home directory and enter the following command to create the .psql_history in order to save your history:
Type psql on your terminal to connect to the server:
Enter \q to quit and return to your terminal.
Set up Postgres to work with a Rails app
First, install the pg gem:
Make sure you include the pg gem in your Gemfile, and run
Now create a Postgres user we’ll use in the Rails app. Use the same username that you use for your development work.