Установка и использование postgresql на ubuntu 18.04
Содержание:
- Шаг 5 — Открытие командной строки Postgres с новой ролью
- Install PostgreSQL from Local Ubuntu Repository
- Шаг 3 — Создание новой роли
- Работа с шаблонами баз данных
- Connect to the PostgreSQL database server via psql
- 6: Создание и удаление таблиц
- Шаг 3 — Создание новой роли
- Создание и удаление таблиц
- Настройка PostgreSQL в Ubuntu 20.04
- Какие параметры требуют перезапуск сервера?
- Подключение к PostgreSQL при помощи нового пользователя
- Аутентификация новой роли PostgreSQL
- PostgreSQL: установка и настройка на Ubuntu
- Создание новой базы данных
- Настройка авторизации методом Peer
- Шаг 4 — Создание новой базы данных
- Вперед к мониторингу
- Шаг 6 — Создание и удаление таблиц
- Устранение проблем
- Установка PostgreSQL из исходников
- 5: Аутентификация новой роли PostgreSQL
- Информация о текущих настройках сервера
- Advantages and Disadvantages of PostgreSQL
- 3: Создание роли
Шаг 5 — Открытие командной строки Postgres с новой ролью
Чтобы выполнить аутентификацию с помощью , вам потребуется пользователь Linux с тем же именем, что и имя роли и базы данных в Postgres.
Если у вас нет соответствующего пользователя Linux, то вы можете создать его с помощью команды . Вы должны воспользоваться учетной записи без прав root с привилегиями (т.е. не выполняя вход в качестве пользователя postgres):
Когда новая учетная запись будет доступна, вы можете переключиться и подключиться к базе данных следующим образом:
Либо же вы можете сделать следующее:
Эта команда позволит выполнить вход автоматически, полагая, что все компоненты были настроены должным образом.
Если вы хотите, чтобы ваш пользователь подключился к другой базе данных, то вы можете сделать это с помощью следующей команды:
После входа вы можете проверить данные о текущем подключении:
Это полезно, если вы подключены к нестандартным базам данных или используете нестандартных пользователей.
Install PostgreSQL from Local Ubuntu Repository
If you prefer installing PostgreSQL from the local Ubuntu repository, bear in mind that it is most likely not going to be the latest version of the package.
Step 1: Check Available PostgreSQL Version
Before you decide whether you want to set up PostgreSQL from the Ubuntu repository, verify which versions are available. Update the repository and then run the command:
The output provides all the necessary information about the package, including the release number and size.
Step 2: Install PostgreSQL Package
If you are happy with the PostgreSQL version accessible from the local repository, use the following command to install the package:
With these simple steps, you have successfully installed PostgreSQL on Ubuntu 18.04.
Шаг 3 — Создание новой роли
К настоящему моменту у вас есть только роль postgres, настроенная внутри базы данных. Вы можете создавать новые роли из командной строки с командой . Флаг будет запрашивать имя новой роли, а также попросит указать, будут ли у этой роли права superuser.
Если вы выполнили вход в учетную запись postgres, то можете создать нового пользователя с помощью следующей команды:
Если же вы предпочитаете использовать для каждой команды без переключения с обычной учетной записи, введите следующую команду:
Скрипт будет предлагать варианты на выбор и, исходя из ваших ответов, выполнять нужные команды Postgres для создания пользователя в соответствии с вашими спецификациями.
Вы можете получить дополнительный контроль с помощью дополнительных флагов. Посмотрите возможные варианты на странице :
В результате этих действий у вас будет новый пользователь, но вам предстоит еще добавить базы данных. В следующем разделе описан этот процесс.
Работа с шаблонами баз данных
При установке PostgreSQL по умолчанию создаются три базы данных: postgres, template0, template1.
Template0 и template1 — это шаблоны баз данных, из которых в дальнейшем будут создаваться пользовательские БД.
Фактически, когда вы выполняете команду CREATE DATABASE, Postgres создает клон базы template1. Если внести изменения в template1, они будут наследоваться всеми новыми создаваемыми базами. Это позволяет, например, добавить в template1 необходимые вам таблицы с данными или установить расширения, после чего не потребуется добавлять их для каждой новой базы.
Обратите внимание, что для установки расширений необходимо подключиться к template1 от суперпользователя (postgres или другой роли, имеющей данные привилегии). Подключитесь к шаблону template1:
Подключитесь к шаблону template1:
\c template1
И установите расширение:
CREATE EXTENSION название_расширения;
Например, если вы установите в template1 расширение pgcrypto, то в дальнейшем, при выполнении CREATE DATABASE, новые базы будут создаваться с уже установленным pgrypto.
Template0 — это исходная база, которая используется, когда нужно создать новую базу без каких-либо изменений, внесенных в шаблон template1, или же вернуть template1 в его изначальное состояние.
Чтобы создать «чистую» базу на основе template0, нужно выполнить:
CREATE DATABASE имя_базы TEMPLATE template0;
Также template0 необходима, если вам нужно внести изменения в кодировку или локаль создаваемой базы данных. По умолчанию (при использовании template1) эти изменения невозможны.
В этом случае нужно при создании базы указать template0 в качестве шаблона и указать требуемую кодировку и/или локаль, например:
CREATE DATABASE имя_базы TEMPLATE template0 ENCODING 'SQL_ASCII';
Пересоздание template1
С помощью template0 вы также можете вернуть базу template1 в исходный вид: для этого потребуется ее удалить, а после создать заново, на основе шаблона template0.
Сначала необходимо указать, что template1 не является шаблоном, чтобы удаление стало возможно:
UPDATE pg_database SET datistemplate = false WHERE datname = 'template1';
Далее удалить template1:
DROP DATABASE template1;
И создать базу template1 заново, указав, что она будет являться шаблоном:
CREATE DATABASE template1 OWNER postgres TEMPLATE template0 is_template true;
Connect to the PostgreSQL database server via psql
In PostgreSQL, a user account is referred to as a role. By default, PostgreSQL uses ident authentication.
It means that PostgreSQL will associate its roles with the system accounts of Linux. If a role exists in PostgreSQL, the same Linux user account with the same name is able to log in as that role.
When you installed PostgreSQL, the installation process created a user account called associated with the default role.
To connect to PostgreSQL using the role, you switch over to the account on your server by typing:
It’ll prompt for the password of the current user. You need to provide the password and hit the keyboard.
Then, you can access the PostgreSQL using the by typing the following command:
You’ll access the postgres prompt like this:
From here, you can interact with the PostgreSQL like issuing a query.
To quit the PostgreSQL prompt, you run the following command:
This above command will bring you back to the postgres Linux command prompt.
To return to your regular system user, you execute the command like this:
6: Создание и удаление таблиц
Вы уже умеете подключаться к системе баз данных PostgreSQL. Теперь давайте ознакомимся с некоторыми основными задачами по управлению Postgres.
Попробуйте создать таблицу для хранения данных. Синтаксис этой команды выглядит так:
Как видите, для таблицы нужно выбрать имя, определить столбцы, тип столбцов и максимальную длину поля. Опционально можно также установить ограничения для каждого столбца.
Для примера создайте простую таблицу, которая описывает оборудование детской площадки:
Данная таблица описывает всё оборудование детской площадки. Таблица начинается со столбца ID, который указывает порядковый номер записи. Этот столбец был ограничен по PRIMARY KEY, то есть значения должны быть уникальными и не должны быть нулём.
Столбцы type и color не могут быть пустыми. Столбец location ограничен, он имеет только восемь доступных значений. Последняя строка создает столбец date, который указывает дату установки оборудования.
Длина поля столбцов equip_id и install_date не ограничена; дело в том, что задавать длину некоторых столбцов необязательно, так как она автоматически задаётся типом данных.
Просмотреть таблицу можно при помощи команды:
playground_equip_id_seq имеет тип данных sequence. Это представление типа данных serial, установленного для столбца equip_id. Этот тип определяет следующий номер в последовательности.
Чтобы просмотреть таблицу вне этого типа данных, введите:
Шаг 3 — Создание новой роли
К настоящему моменту у вас есть только роль postgres, настроенная внутри базы данных. Вы можете создавать новые роли из командной строки с командой . Флаг будет запрашивать имя новой роли, а также попросит указать, будут ли у этой роли права суперпользователя.
Если вы выполнили вход в учетную запись postgres, то можете создать нового пользователя с помощью следующей команды:
Если же вы предпочитаете использовать для каждой команды без переключения с обычной учетной записи, введите следующую команду:
Скрипт будет предлагать варианты на выбор и, исходя из ваших ответов, выполнять нужные команды Postgres для создания пользователя в соответствии с вашими спецификациями.
Вы можете получить дополнительный контроль с помощью дополнительных флагов. Посмотрите возможные варианты на странице :
В результате этих действий у вас будет новый пользователь, но вам предстоит еще добавить базы данных. В следующем разделе описан этот процесс.
Создание и удаление таблиц
Теперь, когда вы знаете, как осуществлять доступ к СУБД Postgres, мы можем кратко рассмотреть вопрос выполнения некоторых распространённых задач в Postgres.
Для начала создадим таблицу для хранения данных. Давайте создадим таблицу, которая описывает параметры инвентаря детской площадки.
Базовый синтаксис для этой команды выглядит примерно так:
Как видно из этого примера, вы задаём имя таблицы и затем определяем необходимые столбцы, их тип и максимальную длину хранимых значений. Мы также можем добавлять ограничения на значения в каждом из столбцов.
Для целей нашего примера мы создадим простую таблицу:
Мы создали таблицу для инвентаря детской площадки. Первый столбец содержит идентификатор инвентаря с типом . Это целочисленный тип данных с автоинкрементом. Мы задали этот столбец с параметром первичного ключа (), что означает, что все значения должны быть ненулевыми и уникальными.
Для двух наших столбцов ( и ) мы не задали максимальную длину значений. Некоторые типы столбцов не требует задания максимальной длины значения, потому что длина определяется типом данных в этом столбце.
Кроме того мы создали столбцы и , которые не могут быть пустыми. Мы также создали столбец и настроили его таким образом, что его значение может принимать одно из восьми заданных значений. Последний столбец задаёт дату установки данной единицы инвентаря детской площадки.
Мы можем убедиться, что таблица создана, следующей командой:
Наша таблица на месте, но помимо неё у нас теперь есть и нечто под названием с типом . Это нечто представляет собой реализацию типа , который мы задали для столбца . Таким образом Postgres будет следить за следующим номером в последовательности идентификаторов, эта связь создаётся автоматически для столбцов данного типа.
Если вы хотите увидеть список только таблиц, без объектов-последовательностей, вы можете набрать следующую команду:
Настройка PostgreSQL в Ubuntu 20.04
После установки СУБД откройте терминал и переключитесь на пользователя postgres с помощью команды:
Эта учетная запись создается во время установки программы и на данный момент вы можете получить доступ к системе баз данных только с помощью нее. По умолчанию PostgreSQL использует концепцию ролей для аутентификации и авторизации.
Это очень похоже на учетные записи Unix, но программа не различает пользователей и групп, есть только роли. Сразу после установки PostgreSQL пытается связать свои роли с системными учетными записями, если для имени системной учетной записи существует роль, то пользователь может войти в консоль управления и выполнять позволенные ему действия. Таким образом, после переключения на пользователя postgres вы можете войти в консоль управления:
И посмотреть информацию о соединении:
Чтобы выйти наберите:
Теперь рассмотрим, как создать другие роли и базы данных.
Создание роли postgresql
Вы уже можете полноценно работать с базой данных с помощью учетной записи postgres, но давайте создадим дополнительную роль. Учетная запись postgres является администратором, поэтому имеет доступ к функциям управления. Для создания пользователя выполните команду:
Скрипт задаст лишь два вопроса, имя новой роли и нужно ли делать ее суперпользователем.
Создание базы данных
Точно также как имена ролей сопоставляются с системными пользователями, имя базы данных будет подбираться по имени пользователя. Например, если мы создали пользователя alex, то по умолчанию система попытается получить доступ к базе данных alex. Мы можем ее очень просто создать:
Дальше, чтобы подключиться к этой базе данных нам нужно войти от имени одноименного пользователя:
Заходим в консоль и смотрим информацию о подключении:
Все верно сработало. Мы подключились с помощью роли alex к базе alex. Если нужно указать другую базу данных, вы можете сделать это с помощью опции -d, например:
Все сработало верно, при условии, что все компоненты были настроены как описано выше.
Создание таблиц
Теперь, когда вы знаете, как подключится к базе данных PostgreSQL, давайте рассмотрим, как выполняются основные задачи. Сначала разберем создание таблиц для хранения некоторых данных. Для создания таблицы PostgreSQLиспользуется такой синтаксис:
CREATE TABLE имя_таблицы (имя_колонки1 тип_колонки (длина) ограничения, имя_колонки2 тип_колонки (длина), имя_колонки3 тип_колонки (длина));
Как видите, сначала мы задаем имя таблицы, затем описываем каждый столбец. Столбец должен иметь имя, тип и размер, также можно задать ограничения для данных, которые там будут содержаться. Например:
Мы создали таблицу детской площадки для описания оборудования, которое на ней есть. Сначала идет идентификатор equip_id, который имеет тип serial, это значит, что его значение будет автоматически увеличиваться, ключ primary key значит, что значения должны быть уникальны.
Следующие колонки — обычные строки, для них мы задаем длину поля, они не могут быть пустыми (NOT NULL). Следующий столбец тоже строка, но она может содержать только одно из указанных значений, последний столбец — дата создания.
Вы можете вывести все таблицы, выполнив команду:
Здесь мы видим, что кроме нашей таблицы, существует еще одна переменная -playground_equip_id_seq. В ней содержится последнее значение этого поля. Если нужно вывести только таблицы, выполните:
Какие параметры требуют перезапуск сервера?
Чтобы это выяснить нужно посмотреть все параметры у которых context = postmaster:
postgres@postgres=# SELECT name, setting, unit FROM pg_settings WHERE context = 'postmaster'; name | setting | unit -------------------------------------+---------------------------------------+------ archive_mode | off | autovacuum_freeze_max_age | 200000000 | autovacuum_max_workers | 3 | autovacuum_multixact_freeze_max_age | 400000000 | bonjour | off | bonjour_name | | cluster_name | | config_file | /usr/local/pgsql/data/postgresql.conf | data_directory | /usr/local/pgsql/data | data_sync_retry | off | dynamic_shared_memory_type | posix | event_source | PostgreSQL | external_pid_file | | hba_file | /usr/local/pgsql/data/pg_hba.conf | hot_standby | on | huge_pages | try | ident_file | /usr/local/pgsql/data/pg_ident.conf | ignore_invalid_pages | off | jit_provider | llvmjit | listen_addresses | localhost | logging_collector | off | max_connections | 100 | max_files_per_process | 1000 | max_locks_per_transaction | 64 | max_logical_replication_workers | 4 | max_pred_locks_per_transaction | 64 | max_prepared_transactions | 0 | max_replication_slots | 10 | max_wal_senders | 10 | max_worker_processes | 8 | old_snapshot_threshold | -1 | min port | 5432 | recovery_target | | recovery_target_action | pause | recovery_target_inclusive | on | recovery_target_lsn | | recovery_target_name | | recovery_target_time | | recovery_target_timeline | latest | recovery_target_xid | | restore_command | | shared_buffers | 16384 | 8kB shared_memory_type | mmap | shared_preload_libraries | | superuser_reserved_connections | 3 | track_activity_query_size | 1024 | B track_commit_timestamp | off | unix_socket_directories | /tmp | unix_socket_group | | unix_socket_permissions | 0777 | wal_buffers | 512 | 8kB wal_level | replica | wal_log_hints | off | (53 rows) Time: 0,666 ms
Сводка
Имя статьи
PostgreSQL. Конфигурирование
Описание
Сервер баз данных PostgreSQL имеет очень много параметров с помощью которых его можно настроить под любые нужды. В этой статье мы не будет рассматривать все эти параметры. Здесь мы посмотрим на различные способы настройки этого сервера.
Подключение к PostgreSQL при помощи нового пользователя
Предположим, у вас есть пользователь Linux по имени test1, одноименная роль PostgreSQL и одноименная БД.
Чтобы сменить системного пользователя и перейти в сессию test1, введите:
Затем можно подключиться к БД test1 как роль test1:
Программ выполнит автоматический вход при условии, что все компоненты были настроены правильно.
Чтобы при помощи этого пользователя подключиться к другой БД, укажите имя БД:
Чтобы получить информацию о текущем пользователе Postgres и БД, введите:
You are connected to database “postgres” as user “postgres” via socket in “/var/run/postgresql” at port “5432”.
Аутентификация новой роли PostgreSQL
Чтобы выполнить ident аутентификацию PostgreSQL, нужно иметь пользователя системы Linux, чье имя совпадает с именем роли и БД.
Если у вас нет такого пользователя, создайте его в Linux с помощью команды adduser (для этого необходимы права sudo).
После этого можно перейти в сессию нового пользователя и подключиться к БД:
Или же подключиться к БД напрямую:
Если все предыдущие настройки были выполнены правильно, команда выполнит автоматическое подключение к БД.
Чтобы подключиться к другой БД, нужно указать её имя:
Чтобы получить информацию о текущем подключении, введите:
Это может быть полезно при подключении к нестандартным базам данных или пользователям.
PostgreSQL: установка и настройка на Ubuntu
Для установки PostgreSQL (install Ubuntu):
-
1.
Обновите список пакетов:
-
2.
Установите пакеты Postgres и contrib:
Готово, вы установили PostgreSQL.
Чтобы узнать версию PostgreSQL, введите команду:
PostgreSQL: как запустить сервер
Настройка сервера и работа с ним происходит в консоли с помощью утилиты psql. При установке PostgreSQL автоматически создаётся суперпользователь postgres. Чтобы открыть консоль, введите команду:
Где postgres — имя суперпользователя. Ниже мы покажем, как создать другого пользователя.
Работа с PostgreSQL
После того как произведён запуск PostgreSQL из командной строки Linux, вы можете работать с базами данных. Рассмотрим основные запросы PostgreSQL для начинающих
Обратите внимание, что после каждого запроса должна стоять точка с запятой
Как создать базу данных:
Как создать пользователя:
Как установить пароль для пользователя при создании:
Как создать таблицу:
Где:
Готово. Конфигурация не настроена для рабочей нагрузки по умолчанию, поэтому в будущем вам потребуется для PostgreSQL настройка производительности.
Создание новой базы данных
Ещё одно допущение, которое делает Postgres, заключается в том, что для каждой роли, которая была использована для входа, необходимо создать базу данных с тем же именем, что и имя роли, к которой можно будет осуществлять доступ с помощью этой роли.
Поэтому для созданного нами ранее пользователя с именем соответствующая роль будет по умолчанию пытаться соединиться с базой данных . Вы можете создать эту базу данных с помощью команды .
Если вы вошли с использованием аккаунта , вам необходимо ввести нечто такое:
Если вы предпочитаете использовать перед вашими командами и не переключаться между пользователями, вы можете сделать это следующим образом:
Настройка авторизации методом Peer
Метод Peer аутентификации работает путем получения имени пользователя операционной системы клиента от ядра, с использованием его в качестве разрешенного имени пользователя базы данных, с дополнительным сопоставлением имен пользователей. Этот метод поддерживается только для локальных соединений.
Настройка авторизации
Закомментируйте все виды подключений к базе данных, оставив только локальные, изменив метод аутентификации на :
/etc/postgresql-13/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: #host all all 127.0.0.1/32 trust # IPv6 local connections: #host all all ::1/128 trust # Allow replication connections from localhost, by a user with the # replication privilege. #local replication all trust #host replication all 127.0.0.1/32 trust #host replication all ::1/128 trust
Перезагрузите настройки PostgreSQL:
/etc/init.d/postgresql-13 reload
Создание пользователя и базы данных
Создайте системного пользователя test:
useradd test
Создайте пользователя PostgreSQL test:
su postgres -c «createuser test»
Заметка
По умолчанию пользователь создаётся без возможности самому создавать базы данных. Для разрешения пользователю создавать новые базы данных добавьте параметр
Создайте базу данных testdb для пользователя test:
su postgres -c «createdb -O test testdb»
Подключение к базе данных
Для подключения к базе данных dbtest пользователем test, выполните:
psql -d testdb
psql (13.2) Введите "help", чтобы получить справку. testdb=>
Для подключения к базе данных dbtest пользователем , выполните:
su postgres -c «psql -d testdb»
psql (13.2) Введите "help", чтобы получить справку. testing=#
Шаг 4 — Создание новой базы данных
Еще одно предположение, которое система аутентификации Postgres использует по умолчанию, состоит в том, что для любой роли, используемой для входа, существует база данных с тем же именем, к которой роль может получить доступ.
Это означает, что если созданный вами в последнем разделе пользователь будет иметь имя sammy, эта роль попытается подключиться к базе данных, которая также называется «sammy» по умолчанию. Вы можете создать соответствующую базу данных с помощью команды .
Если вы используете учетную запись postgres, необходимо ввести следующее:
Если же вы предпочитаете использовать для каждой команды без переключения с обычной учетной записи, введите следующую команду:
Подобная гибкость предоставляет несколько способов для создания баз данных в зависимости от необходимости.
Вперед к мониторингу
Ранее в трех небольших публикациях мы рассмотрели процесс установки и настройки Zabbix на CentOS, диагностировали его работу и даже обновились с версии 4.0 на 5.0:
- Немного о мониторинге и простой установке Zabbix
- Диагностика работы Zabbix
- Обновляем Zabbix с 4.0 до 5.0 через грабли
С момента этих публикаций CentOS , поэтому теперь предпочитаю переориентироваться на Ubuntu. Есть даже сайт по теме прекращения поддержки CentOS.
Сегодня рассмотрим простую инструкцию по установке и настройке Zabbix, но уже на Ubuntu 20.04. Только основные шаги. Все что было в прошлых публикациях остается актуальным, просто здесь это сделано в контексте Ubuntu и в очень кратком виде.
Шаг 6 — Создание и удаление таблиц
Теперь, когда вы уже знаете, как подключиться к системе управления базами данных PostgreSQL, можно переходить к знакомству с основными задачами по управлению, которые решает Postgres.
Базовый синтаксис создания таблиц выглядит следующим образом:
Как видите, эти команды дают таблице имя, а затем определяют столбцы, тип столбцов и максимальную длину поля данных. Кроме того, вы можете добавить ограничения таблицы для каждой колонки.
Вы можете узнать больше о том, как создавать и управлять таблицами в Postgres, здесь.
Для демонстрационных целей необходимо создать следующую таблицу:
Эта команда создает таблицу с описью оборудования для установки на игровых площадках. В первом столбце таблицы хранятся идентификационные номера оборудования типа. Эти номера представляют собой целые числа с автоматическим инкрементальным увеличением. В этом столбце также содержится константа , и это означает, что значения в нем должны быть уникальными и ненулевыми.
Следующие две строки создают столбцы и оборудования соответственно, и ни один из них не может быть пустым. Следующая строка создает столбец и ограничение, требующее, чтобы значение было одним из восьми возможных вариантов. Последняя строка создает столбец , которая указывает дату установки оборудования.
Для двух из столбцов ( и ) команда не указывает длину поля. Это связано с тем, что для некоторых типов данных не требуется заданная длина, поскольку длина или формат являются подразумеваемыми.
Вы можете просмотреть вашу новую таблицу, введя следующую команду:
Ваша таблица игрового оборудования готова, но здесь есть что-то под названием с типом данных . Это представление типа , который присвоен столбцу . Оно отслеживает следующий номер последовательности и создается автоматически для столбцов данного типа.
Если вы хотите только просмотреть таблицу без последовательности, можете ввести следующую команду:
Мы подготовили таблицу и теперь можем использовать ее для тренировки управления данными.
Устранение проблем
Сообщение «Server Lacks Instrumentation Functions»
Эту проблему легко решить, с решением, зависящим от версии, которую вы используете. Что сложно, так это найти ответ. То, что потребуется — это импорт из файла, который уже существует на запоминающем устройстве: adminpack.sql. Чтобы решить эту проблему, запустите одну из следующих команд, соответствующую имеющейся версии:
Для PostgreSQL 9.0 и более ранних версий:
Для PostgreSQL 9.1 и более поздних версий:
Отсутствующие файлы настроек в /etc/postgresql-9.x и /var/lib/postgresql/9.x/data
Вы можете попытаться переместить файлы настроек в каталог следующим образом (x — это ваша версия postgresql):
Если данные файлы отсутствуют, вам нужно их инициализировать.
Сначала зайдите как пользователь postgres:
Затем, как пользователь postgres, запустите и укажите каталог с данными:
После этого будут созданы файлы настроек, и вы сможете скопировать их в каталог /etc/postgresql-9.x/, как было показано в первом примере данного раздела.
Это вызвано ссылающимися друг на друга символическими ссылками. Чтобы исправить данную проблему, введите следующее:
Помните, что любое обновление zoneinfo снова создаст данную символическую ссылку, и вам понадобится удалить ее снова.
Systemd
Заставьте сервис запускаться при загрузке:
Чтобы запустить сервис немедленно:
Если вы получите ошибку, проверьте, что существует каталог /run/postgresql/. Если он не существует, создайте его следующим образом:
Проверьте разрешения для файла настроек:
Service file and changes to it
Systemd service files (postgresql-@SLOT@-.service) can be found in /lib/systemd/system/:
example config change:
Файл Example config port change
Service Environment=PGPORT=5433
This will override the setting appearing in /lib/systemd/system/postgresql-@SLOT@.service.
(source: postgresql-10.service file)
RemoveIPC
PostgreSQL recommends in wiki.postgresql.org/wiki/Systemd to change the RemoveIPC setting to no in /etc/systemd/logind.conf:
Файл RemoveIPC
RemoveIPC=no
(source: wiki.postgresql.org/wiki/Systemd)
Установка PostgreSQL из исходников
Работаем из под пользователя root, поэтому будьте осторожны!
Прежде всего скачаем и распакуем архив:
# mkdir pg # cd pg/ # wget https://ftp.postgresql.org/pub/source/v13.3/postgresql-13.3.tar.gz # tar xf postgresql-13.3.tar.gz # cd postgresql-13.3/
Далее, установим необходимые пакеты, соберем из исходников postgresql и установим его:
# apt install gcc make # apt install libreadline-dev # apt install zlibc zlib1g-dev # ./configure # make # make install
В результате, PostgreSQL у нас установится в каталог /usr/local/pgsql/, здесь лежат сами бинарники.
Теперь нам нужно создать каталог для хранения данных. В PostgreSQL он называется PGDATA по имени переменной $PGDATA в которой содержится путь к каталогу кластера PostgreSQL. Создадим такой каталог а также пользователя “postgres“. Дополнительно сделаем этого пользователя владельцем этого каталога и установим права (750):
# mkdir /usr/local/pgsql/data # adduser postgres # chown postgres /usr/local/pgsql/data/ # chmod 750 /usr/local/pgsql/data/
5: Аутентификация новой роли PostgreSQL
Чтобы выполнить ident аутентификацию PostgreSQL, нужно иметь пользователя системы Linux, чье имя совпадает с именем роли и БД.
Если у вас нет такого пользователя, создайте его в Linux с помощью команды adduser (для этого необходимы права sudo).
После этого можно перейти в сессию нового пользователя и подключиться к БД:
Также вы можете подключиться к БД напрямую:
Если все предыдущие настройки были выполнены правильно, команда автоматически подключится к БД.
Чтобы подключиться к другой БД, нужно указать её имя:
Чтобы получить информацию о текущем подключении, введите команду:
Это может пригодиться при подключении к нестандартным базам данных или пользователям.
Информация о текущих настройках сервера
В PostgreSQL есть 2 представления через которые можно посмотреть текущие настройки сервера:
- pg_file_settings – какие параметры записаны в файлах postgresql.conf и postgresql.auto.conf;
- pg_settings – текущие параметры, с которыми работает сервер.
Например посмотрим значение параметра config_file из представления pg_settings, который покажет конфигурационный файл текущего кластера:
postgres@postgres=# SELECT setting FROM pg_settings WHERE name = 'config_file'; setting --------------------------------------- /usr/local/pgsql/data/postgresql.conf (1 row) Time: 1,844 ms
Внесём изменения в параметр work_mem в postgresql.conf и postgresql.auto.conf. Затем посмотрим на все не закомментированные параметры в этих файлах:
postgres@postgres=# \! echo 'work_mem = 8MB' >> $PGDATA/postgresql.conf postgres@postgres=# ALTER SYSTEM SET work_mem TO '10MB'; ALTER SYSTEM Time: 0,728 ms postgres@postgres=# SELECT sourceline, name, setting, applied FROM pg_file_settings; sourceline | name | setting | applied ------------+----------------------------+--------------------+--------- 63 | port | 5433 | f 64 | max_connections | 100 | t 121 | shared_buffers | 128MB | t 142 | dynamic_shared_memory_type | posix | t 228 | max_wal_size | 1GB | t 229 | min_wal_size | 80MB | t 563 | log_timezone | Europe/Moscow | t 678 | datestyle | iso, dmy | t 680 | timezone | Europe/Moscow | t 694 | lc_messages | ru_RU.UTF-8 | t 696 | lc_monetary | ru_RU.UTF-8 | t 697 | lc_numeric | ru_RU.UTF-8 | t 698 | lc_time | ru_RU.UTF-8 | t 701 | default_text_search_config | pg_catalog.russian | t 780 | work_mem | 8MB | f 3 | work_mem | 10MB | t (16 rows) Time: 0,650 ms
Как можно заметить в примере выше, у меня 2 одинаковых параметра work_mem. Колонка applied показывает, может ли быть применён параметр. Первый work_mem не может быть применен, так как второй его перезапишет. При этом реальное значение с которым работает сервер отличается, так как сервер не перечитал конфигурацию.
Теперь посмотрим на реальное, текущее значение этого параметра:
postgres@postgres=# SELECT name, setting, unit, boot_val, reset_val, source, sourcefile, sourceline, pending_restart, context FROM pg_settings WHERE name = 'work_mem'\gx ----+--------- name | work_mem setting | 4096 unit | kB boot_val | 4096 reset_val | 4096 source | default sourcefile | sourceline | pending_restart | f context | user Time: 0,854 ms
В примере выше мы использовали расширенный режим (в конце запроса \gx), поэтому табличка перевёрнута. Разберём колонки:
- name – имя параметра;
- setting – текущее значение;
- unit – единица измерения;
- boot_val – значение по умолчанию (жёстко задано в коде postgresql);
- reset_val – если перечитаем конфигурацию, то применится это значение;
- source – источник, это значение по умолчанию;
- sourcefile – если бы источником был конфигурационный файл, то тут был бы указан этот файл;
- sourceline – номер строки в этом файле;
- pending_restart – параметр изменили в конфигурационном файле и требуется перезапуск сервера. У нас требуется всего лишь перечитать конфигурацию;
-
context – действия, необходимые для применения параметра, может быть таким:
- internal – изменить нельзя, задано при установке;
- postmaster – требуется перезапуск сервера;
- sighup – требуется перечитать файлы конфигурации;
- superuser – суперпользователь может изменить для своего сеанса;
- user – любой пользователь может изменить для своего сеанса на лету.
Перечитаем конфигурацию сервера:
postgres@postgres=# SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) Time: 3,178 ms postgres@postgres=# SELECT name, setting, unit, boot_val, reset_val, source, sourcefile, sourceline, pending_restart, context FROM pg_settings WHERE name = 'work_mem'\gx ----+------------------------------------------- name | work_mem setting | 10240 unit | kB boot_val | 4096 reset_val | 10240 source | configuration file sourcefile | /usr/local/pgsql/data/postgresql.auto.conf sourceline | 3 pending_restart | f context | user Time: 1,210 ms
Как видим, параметр изменился. Он был взят из postgresql.auto.conf и теперь равняется 10 MB.
Advantages and Disadvantages of PostgreSQL
PostgreSQL is a feature-rich application, offering advanced features such as materialized views, triggers, and stored procedures. It can handle a very high workload, including data warehouses or highly-scaled web applications, and is noted for its stability. PostgreSQL can be extended with custom data types and functions, and can integrate with code from different languages. However, due to its focus on compatibility, it does not always match other database systems in terms of performance. In addition, not all open source applications support PostgreSQL.
With a large database schema, PostgreSQL can consume a substantial amount of disc space. To store large amounts of data, we recommend hosting PostgreSQL on a
High Memory Linode.
3: Создание роли
На данный момент в СУБД есть только одна роль, postgres. Чтобы создать новую роль, используйте команду createrole. Чтобы создать роль в интерактивном режиме, добавьте флаг –interactive (он позволит вам задать имя роли и предоставить ей права суперпользователя).
В сессии postgres создать нового пользователя можно с помощью команды:
В сессии другого пользователя можно использовать команду sudo, чтобы не переходить в сессию postgres:
Скрипт запросит данные о пользователе. В зависимости от полученных данных он выполнит все необходимые команды, чтобы создать отвечающего требованиям пользователя.
У этого скрипта есть много различных флагов. Ознакомиться со списком доступных опций можно в справке: