Основные операции с БД
Чтобы выполнять базовые действия в СУБД, нужно знать язык запросов к базе данных SQL.
Создание базы данных
Для создания базы данных используется команда:
create database
В приведенном ниже примере создается база данных с именем proglib_db.
Рисунок 3 — Создание базы данных с именем proglib_db
Если забыть точку с запятой в конце запроса, знак «=» в приглашении postgres заменяется на «-». Это зачастую указывает на то, что необходимо завершить (дописать) запрос.
Рисунок 4 — вывод ошибки при создании базы данных
На рисунке 4 видно сообщение об ошибке из-за того, что в нашем случае база уже создана.
Создание нового юзера
Для создания пользователя существует команда:
create user
В приведенном ниже примере создается пользователь с именем author.
Рисунок 5 — Создание пользователя с именем author
При создании пользователя отобразится сообщение CREATE ROLE. Каждый пользователь имеет свои права (доступ к базам, редактирование, создание БД / пользователей и т. д.). Вы могли заметить, что столбец Attributes для пользователя author пуст. Это означает, что пользователь author не имеет прав администратора. Он может только читать данные и не может создать другого пользователя или базу.
Можно установить пароль для существующего пользователя.
С этой задачей справится команда :
postgres=#\password author
Чтобы задать пароль при создании пользователя, можно использовать следующую команду:
postgres=#create user author with login password 'qwerty';
Удаление базы или пользователя
Для этой операции используется команда : она умеет удалять как пользователя, так и БД.
drop database <database_name> drop user <user_name>
Данную команду нужно использовать очень осторожно, иначе удаленные данные будут потеряны, а восстановить их можно только из бэкапа (если он был).
Если вы укажете psql postgres (без имени пользователя), то postgreSQL пустит вас под стандартным суперюзером (postgres). Чтобы войти в базу данных под определенным пользователем, можно использовать следующую команду:
psql
Войдем в базу proglib_db под пользователем author. Выполним команду , чтобы выйти из текущей БД, а затем выполните следующую команду:
Рисунок 6 — Вход в базу данных proglib_db
psql command not found
Вы хотите запустить Postgres скрипт из bash
andrey@olegovich-10:/mnt/c/Users/olegovich$ psql -h localhost -p 5432 -U andrei
но получаете эту ошибку
-bash: psql: command not found
Это значит, что путь до Postgres не прописан в $PATH
Чтобы узнать, что прописано в $PATH достаточно сделать
echo $PATH
/home/andrei/bin:/home/andrei/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath_target_1128437:/mnt/c/ProgramData/Oracle/Java/javapath_target_5252250:/mnt/c/Windows/System32:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Program Files/OpenVPN/bin:/mnt/c/Program Files (x86)/Microsoft SQL Server/Client SDK/ODBC/130/Tools/Binn:/mnt/c/Program Files (x86)/Microsoft SQL Server/140/Tools/Binn:/mnt/c/Program Files (x86)/Microsoft SQL Server/140/DTS/Binn:/mnt/c/Program Files (x86)/Microsoft SQL Server/140/Tools/Binn/ManagementStudio:/mnt/c/Program Files/MiKTeX 2.9/miktex/bin/x64:/mnt/c/Users/andreyolegovich_ru/Documents/Software/axis2-1.6.2:/mnt/c/Users/andreyolegovich_ru/Documents/Software/axis2-1.6.2/bin:/mnt/c/Windows/System32/OpenSSH:/mnt/c/Program Files/TortoiseSVN/bin:/mnt/c/Program Files/Microsoft SQL Server/Client SDK/ODBC/130/Tools/Binn:/mnt/c/Program Files/Microsoft SQL Server/140/Tools/Binn:/mnt/c/Program Files/Microsoft SQL Server/140/DTS/Binn:/mnt/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/DAL:/mnt/c/Program Files/Intel/Intel(R) Management Engine Components/DAL:/mnt/c/Program Files/TortoiseGit/bin:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/nodejs:/mnt/c/Program Files/Intel/WiFi/bin:/mnt/c/Program Files/Common Files/Intel/WirelessCommon:/mnt/c/Program Files/PuTTY:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Continuum/anaconda3:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Continuum/anaconda3/Library/mingw-w64/bin:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Continuum/anaconda3/Library/bin:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Continuum/anaconda3/Scripts:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Python/Python36/Scripts:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Python/Python36:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/andreyolegovich_ru/AppData/Local/atom/bin:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Python/Python36-32:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Python/Python36-32/Scripts:/mnt/c/Program Files (x86)/Nmap:/mnt/c/Program Files (x86)/Mozilla Firefox:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Fiddler:/mnt/c/Program Files/JetBrains/PyCharm Community Edition 2018.3.2/bin:/mnt/c/Users/andreyolegovich_ru/AppData/Roaming/npm:/mnt/c/Program Files/Intel/WiFi/bin:/mnt/c/Program Files/Common Files/Intel/WirelessCommon:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Microsoft VS Code/bin:/snap/bin
Инкрементальная сортировка
PostgreSQL 13 добавляет инкрементную сортировку. Это улучшение происходит от собственного алгоритма. Когда группа наборов данных (X, Y) сортируется как столбцы X и Y, если текущий набор данных был отсортирован по столбцу X, конкретная сортировка показана на следующем рисунке:
На данный момент вам нужно только сгруппировать наборы данных по столбцу X и отсортировать столбцы Y в каждой группе, чтобы получить набор результатов на основе сортировки по столбцам X и Y, как показано на следующем рисунке:
Преимущества этого алгоритма очевидны, особенно для больших наборов данных, поскольку он позволяет каждый раз уменьшать объем сортируемых данных. Вы можете использовать определенный элемент управления политикой, чтобы каждый раз объем данных при сортировке лучше соответствовал текущему work_mem. Более того, в исполнителе водопадных моделей PostgreSQL мы можем получить некоторые наборы результатов без сортировки всех данных, что очень подходит для запросов Top-N с ключевым словом Limit.
Конечно, оптимизатор в базе данных намного сложнее, чем в предыдущем сценарии. Если каждая группа большая и существует небольшое количество групп, затраты на добавочную сортировку относительно высоки. Если каждая группа небольшая и существует большое количество групп, требуется меньше времени и энергии для использования ранее отсортированных результатов на основе функции возрастающей сортировки. Чтобы нейтрализовать влияние этих двух случаев, в PostgreSQL 13 используются два шаблона:
- Выборка относительно безопасного количества строк не требует проверки предыдущих ключей сортировки для полной сортировки. Безопасность здесь основана на некоторых соображениях стоимости.
- Все строки выбираются, группируются и сортируются на основе предыдущих ключей сортировки.
В PostgreSQL оптимизатор предпочитает шаблон 1 и эвристически использует шаблон 2.
В следующей части описывается, как использовать добавочную сортировку, и сравнивается план запроса, в котором эта функция включена, и план запроса, где эта функция отключена.
Версия PostgreSQL
PostgreSQL имеет версии по следующей схеме:
Например, в PostgreSQL 12.1 12 – это основная версия и 1 – дополнительная версия.
- MAJOR- Начиная с PostgreSQL 10, каждый новый основной выпуск увеличивает часть версии MAJOR на единицу, например, на 10, 11 или 12. До PostgreSQL 10 основные версии были представлены десятичным числом, например, 9.0 или 9.6.
- MINOR- Незначительный номер релиза является последней частью номера версии. Например, 11.4 и 11.6 являются второстепенными версиями, которые являются частью PostgreSQL версии 11 9.6.15 и 9.6.16 являются частью PostgreSQL версии 9.6.
Основные выпуски PostgreSQL с новыми функциями обычно выпускаются раз в год. Каждый основной релиз поддерживается в течение 5 лет.
Платные версии MS SQL и PostgreSQL
Для многих стало неожиданностью, что Postgres стал платным и начал себя ценить. На слайде приведены цифры из открытого источника – из прайса фирмы «1С», скачивайте и сравнивайте, вдруг я где-то ошибся.
Давайте сравним, во сколько обойдется покупка MS SQL Enterprise сервера и Postgres Pro Enterprise сервера на 16 ядер. Мы видим, что:
-
лицензия MS SQL Enterprise – почти 6 млн.
-
лицензия на Postgres Pro Enterprise – 1,5 млн.
Postgres Pro Enterprise – это форк от компании Postgres Professional, который предназначен для работы на очень больших инсталляциях и тысячах пользователей.
Postgres Pro Enterprise не быстрее бесплатного Postgres, если в базу с бесплатной версией зашел один человек, и отчет формируется 1,5 часа, то и в Postgres Pro Enterprise он тоже будет формироваться 1,5 часа.
Да, Postgres Pro Enterprise имеет некоторые улучшения планировщика запросов для очень специфичных ситуаций, рожденных именно в 1С. Все остальные ситуации, характерные не для 1С, уже давно решены в ванильном Postgres, там проблем не бывает. Но поскольку у нас только в одной базе может быть 7 тысяч таблиц, 30 тысяч индексов, а еще мы любим, когда на один сервер приходится по 100 баз – в Postgres Pro Enterprise сделано несколько оптимизаций специально для таких случаев.
Остальные преимущества Postgres Pro Enterprise – это многопоточность и многопользовательность. А так же он может сжимать данные в 5-8 раз, и скорость многопоточной работы также возрастает.
Но я бы более корректно сравнил Postgres Pro Enterprise с MS SQL Standard. По набору функциональности MS SQL Standard аналогичен Postgres Pro Enterprise. Умеет делать такие же репликации, не имеет ограничений на ядра и на память… Если сравнивать так – цена почти одинаковая, 1,5 млн.
Есть еще Postgres Pro Standard. Эта сборка не Postgres Pro Enterprise, но уже и не бесплатная. Она не имеет нескольких функций, которые есть у Postgres Pro Enterprise, например, сжатие и PTRACK для pg_probackup. Но ценовая политика Postgres Pro такая, что для 1С Postgres Pro Standard дороже чем Postgres Pro Enterprise. Поэтому, если покупать, то покупать именно Postgres Pro Enterprise.
Теперь давайте посчитаем стоимость лицензий клиент+сервер на 50 пользователей.
С лицензированием на пользовательские места для MS SQL в прайсе 1С только одна позиция – это MS SQL Server Runtime, на нем можно запускать только 1С.
Стоимость клиентских лицензий и отдельного сервера для MS SQL Server Runtime и Postgres Pro Enterprise одинаковая: разница в 3-4 тысячи.
С ценами и возможностями бесплатных версий разобрались, теперь давайте пойдем дальше.
В моем понимании вот такая картинка символизирует мысли тех, кто находится на перепутье: идти ли на Postgres. Кажется, что с MS SQL все понятно, есть только маленькая кучка проблем, но мы знаем, как их решать. При этом с Postgres – кошмар, мы это никогда не разгребем.
Но это не так. На больших инсталляциях проблемы есть везде – и с MS SQL , и с PostgreSQL. Даже с платформой 1С у нас бывают проблемы, хотя, казалось бы, идеальный продукт ))).
Поэтому хочу немного развеять такое понимание проблем о возможных проблемах с СУБД. Начну с самого простого – с установки.
Вопросы
Насколько полезна сертификация на Postgres, что она дает?
Сертификация очень полезна, дает почти то же самое, что сертификация на 1С:Эксперта в фирме «1С». Вы вроде и так все знаете без сертификатов, но ваш путь поиска проблем, когда они возникнут, очень долгий, поскольку он неправильный, он идет не так. А тут учат именно структурированию – как правильно искать, что где искать, как пользоваться инструментами, которые дают гораздо более быстрый результат, чем те, к которым вы привыкли. Поэтому крайне полезно. Фактически, это некий чек-лист и список инструментов, который можно использовать. При том, что подготовка к сертификации – это просмотр бесплатных видео, которые у них на сайте лежат. Просматривайте видео, выполняете задания, которые там даны, и вперед на сертификацию.
Дает ли возможность 1С перенести базу с MS SQL на PostgreSQL?
Конечно, выгружаем в dt-ник и загружаем. Если база очень большая, нужно просто посмотреть, что там лежит. Я не удивлюсь, что это вложенные файлы — уберите их из БД на дисковые тома Есть ещё лайфхак – почистите итоги перед переносом в dt-ник (truncate таблиц итогов на СУБД — делать только если точно понимаешь что делаешь). А после того, как вы загрузили в dt-ник, посчитайте их заново. Заодно порядок в итогах наведете. Тем более, что в платформе 8.3.18 включили многопоточный расчет итогов.
*************
Данная статья написана по итогам доклада (видео), прочитанного на онлайн-митапе «PostgreSQL VS Microsoft SQL». Больше статей можно прочитать здесь.
ERROR: WAL level not sufficient for making an online backup
Вы хотите настроить онлайн бэкап, например с помощью команды
-bash-4.2$ psql -c «SELECT pg_start_backup(‘replbackup’);»
Но получаете ошибку
ERROR: WAL level not sufficient for making an online backup
HINT: wal_level must be set to «archive» or «hot_standby» at server start.
Нужно узнать расположение конфигурационного файла
postgresql.conf
-bash-4.2$ su — postgres -c «psql -c ‘SHOW config_file;'»
Password:
config_file
————————————-
/var/lib/pgsql/data/postgresql.conf
(1 row)
vi /var/lib/pgsql/data/postgresql.conf
Нужно установить wal_level = hot_standby
Установка RedHat Enterprise Linux 8 (RHEL 8.4). Подключение RHEL8 к домену Active Directory. Запуск терминального клиента.
Операционная система – это один из краеугольных камней в фундаменте организации. От нее напрямую зависит надежность и безопасность корпоративной IT-инфраструктуры. Red Hat Enterprise Linux разработана с учетом всех требований и особенностей коммерческой эксплуатации Linux в производственной среде. Она проста в администрировании и управлении при развертывании приложений в физических, виртуальных и облачных средах. Обеспечивает высокую производительность и доступность приложений, а также обладает достаточной гибкостью, чтобы поддерживать рост организации и внедрение новых решений. Red Hat Enterprise Linux ценят за надежность, безопасность, стабильность, высокую производительность и масштабируемость, которые платформа предоставляет организациям. Клиентские решения Red Hat Enterprise Linux переносят эти инновации на рабочий стол.
ERROR: date/time field value out of range
Если вы пытаетесь прочитать из .csv файла, а получаете
ERROR: date/time field value out of range: «» HINT: Perhaps you need a different «datestyle» setting. CONTEXT: «» SQL state: 22008
Скорее всего ваш текущий datestyle не совпадает с тем, который используется в .csv файле.
datestyle — это порядок записи даты. Может быть День — Месяц — Год (DDMMYYYY), Год — Месяц — День (YYYYMMDD) или,
например американский стиль Месяц — День — Год (MMDDYYYY)
Это всё актуально если тип столбца указан как дата date. Можно изменить тип на char тогда datestyle уже не нужно настраивать.
Стилей много и если они не совпадают — получается что месяц принимает значение больше 12.
Как вариант — можно перед выполнение скрипта временно изменить свой datestyle.
Например, если нужно импортировать данные из .csv с американским стилем — перед импортом добавьте
set datestyle to «US»;
Failed to stop postgresql.service: Unit postgresql.service not loaded
Причин может быть много но среди новичков самая распространённая — попытка остановить postgresql
из под пользователя postges
Например, в моём терминале я по приглашению bash-4.2$ вижу, что зашёл как postgres
Нужно выполнить
exit
Приглашение изменится на
$
И затем уже можно останавливать сервер
sudo systemctl stop postgresql
sudo systemctl status postgresql
● postgresql.service — PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Jun 09 12:20:24 localhost.localdomain systemd: Unit postgresql.service entered failed state.
Jun 09 12:20:24 localhost.localdomain systemd: postgresql.service failed.
Jun 09 12:21:59 localhost.localdomain systemd: Starting PostgreSQL database server…
Jun 09 12:22:00 localhost.localdomain systemd: Started PostgreSQL database server.
Jun 10 19:10:02 localhost.localdomain systemd: Stopping PostgreSQL database server…
Jun 10 19:10:03 localhost.localdomain systemd: Stopped PostgreSQL database server.
Jun 10 22:14:18 localhost.localdomain systemd: Starting PostgreSQL database server…
Jun 10 22:14:19 localhost.localdomain systemd: Started PostgreSQL database server.
Jun 11 10:11:15 localhost.localdomain systemd: Stopping PostgreSQL database server…
Jun 11 10:11:16 localhost.localdomain systemd: Stopped PostgreSQL database server.
Функции для работы с JSON
Но этих операторов маловато, чтобы можно было полноценно использовать json. В pg есть ещё целая куча функций для работы с ним.
json_each
позволяет преобразовать объекты в пары ключ-значение, к примеру:
Мы выбираем объекты, где имя покупателя начинается с , проходим по верхнеуровневым ключам и возвращаем пары ключ-значение.
Если нам нужны не объекты, а их строковое представление, есть парная функция .
jsonobjectkeys
позволяет вернуть набор верхнеуровневых ключей:
В этом примере мы выбираем все присутствующие ключи из поля и возвращаем только уникальные ().
json_typeof
позволяет вернуть текстовое представление типа значения для заданного ключа. Он может быть number, boolean, null, object, array, или string.
Как видим, в у нас везде хранятся объекты.
Пока что всё, больше функций описано в оф. доках. Также мы не коснулись работы с JSONB. По большому счёту, разница невелика. Есть только два ключевых отличия:
- JSON на физическом уровне хранится как текст, а JSONB хранится в виде особого, более эффективного, бинарного формата
- JSONB имеет больше функций для работы с ним.
Удач!
Переполнение счётчика транзакций и заморозка
Счетчик транзакций 32-битный – это примерно 4 миллиарда значений. И он постоянно растёт! Если счетчик транзакций переполнится и начтет считать с нуля, то это приведет к большим проблемам на сервере. Для борьбы с этой проблемой существует процесс “Заморозка“.
При заморозке берутся версии строчек, в которых номер транзакции достаточно старый. То есть эта транзакция должна быть видна во всех новых снимках. Этот номер транзакции меняется на “минус бесконечность“. Система понимает, что эта строчка была создана когда-то давно и номер транзакции создавший её уже не имеет значения. Значит этот номер транзакции можно использовать повторно. Замороженные номера транзакций можно повторно использовать.
Почему не сделать счетчик 64 битным? В каждой версии строчки есть заголовок. Если счетчик будет 64 битным, то будет слишком много служебной информации на каждую версию строки.
Заморозкой тоже занимается VACUUM.
Сводка
Имя статьи
Процедура очистки VACUUM в PostgreSQL
Описание
В этой статье познакомимся поближе с процессом VACUUM и теми задачами, которые этот процесс решает в PostgreSQL. Он чистит таблицы, обновляет статистику
Как доработать производительный RLS
Неоднократно в последнее время поступали задачи, когда требовалось доработать новый производительный RLS. В своей статье Ретунский Александр, программист компании АО «Корпоративные ИТ-проекты» (официальный партнер ИнфоСофт) опишет последовательность действий при доработке нового RLS, ключевые моменты и сложности, с которыми столкнулся. В Интернете статей или инструкций, которые подробно и просто описывают – как доработать производительный RLS, не так много и автор делиться своим опытом.
В данной статье не будут описаны различия и плюсы/минусы между стандартным и производительным RLS, в Интернете по этому вопросу есть много информации.
Установка и настройка
В данном разделе представлена инструкция по установки и настройке PostgreSQL для разных ОС
Установка
Если установка происходит на macOS, то процесс установки можно запустить командой:
brew install postgresql
На Linux СУБД устанавливается так:
sudo apt-get install postgresql postgresql-contrib
После того, как все загружено и установлено, можно проверить, все ли в порядке, и какая стоит версия PostgreSQL. Для этого выполните следующую команду:
postgres --version
Инструкция по установке в цифровом формате
Настройка
Работа с PostgreSQL может быть произведена через командную строку (терминал) с использованием утилиты psql – инструмент командной строки PostgreSQL.
Необходимо ввести следующую команду:
psql postgres (для выхода из интерфейса используйте \q)
Этой командой запускается утилита psql. Хотя есть много сторонних инструментов для администрирования PostgreSQL, нет необходимости их устанавливать, т. к. psql удобен и отлично работает.
Если нужна помощь, введите (или ) в psql-терминале. Появится список всех доступных параметров справки. Вы можете ввести , если вам нужна помощь по конкретной команде. Например, если ввести в консоли psql, отобразится синтаксис команды .
1 Description update rows of a table 2 WITH RECURSIVE with_query [, 3 UPDATE ONLY table_name * AS alias 4 SET { column_name = { expression | DEFAULT } | 5 ( column_name [, ) = ( { expression | DEFAULT } [, ) | 6 ( column_name [, ) = ( sub-SELECT ) 7 } [, 8 FROM from_list 9 WHERE condition | WHERE CURRENT OF cursor_name 10 RETURNING * | output_expression AS output_name [,
Для начала необходимо проверить наличие существующих пользователей и баз данных. Выполните следующую команду, чтобы вывести список всех баз данных:
\list или \l
Рисунок 1 — Результат выполнения операции \l
На рисунке выше вы видите три базы данных по умолчанию и суперпользователя postgres, которые создаются при установке PostgreSQL.
Чтобы вывести список всех пользователей, выполните команду . Атрибуты пользователя postgres говорят нам, что он суперпользователь.
Рисунок 2 — Результат выполнения операции \du
Мета-команды PostgreSQL
Теперь, когда ты все настроил и готов приступить к работе с базой данных, осталось разобрать несколько мета-команд.
Это не SQL запросы, а команды специфичные для PostgreSQL.
В других системах управления базами данных есть их аналоги, но их синтаксис немного отличается.
Всем мета-командам предшествует обратная косая черта , за которой следует фактическая команда.
Список всех баз данных
Чтобы получить список всех баз данных на сервере, ты можешь использовать команду .
Ввод этой мета-команды в оболочке Postgres выведет:
Это список всех имеющихся баз данных и служебная информация, такая как владелец базы данных, кодировка и права доступа.
На данный момент мы пока ничего не создали, а базы данных которые ты видишь на экране — создаются по умолчанию при установке Postgres.
- postgres — это просто пустая база данных.
- «template0» и «template1» — это служебные базы данных, которые служат шаблоном для создания новых баз.
Тебе пока не стоит беспокоиться о них. Если хочешь изучить все детали, то проверь официальную документацию.
Подключаемся к базе данных PostgreSQL
Некоторые команды SQL требуют, чтобы ты сначала вошел в базу данных (например, для создания новой таблицы).
Ты можешь выбрать, в какую базу данных входить, при запуске SQL Shell.
Когда ты находишься внутри оболочки (shell), то можешь использовать команду (или ), за которой следует имя
базы данных. Если бы у тебя была другая база данных под названием , то подключиться к ней можно было бы так:
Полностью в терминале у тебя получится что-то такое:
Обрати внимание, что приглашение оболочки изменилось с на. Это значит, что теперь ты
подключен к базе данных , а не
Получить список всех таблиц в базе данных
Как и в случае со списком существующих баз данных, ты можешь получить список таблиц внутри конкретной базы данных
с помощью команды .
Перед выполнением этой команды вам необходимо войти в базу данных.
Предположим, ты уже находишься внутри базы , и в ней есть таблица с именем. Набрав , ты
получишь следующее:
Ты можешь увидеть имя таблицы и некоторую другую информацию, такую как схема (мы обсудим схемы в более сложных
руководствах) и владельца.
Владелец (owner) — это пользователь, который создал таблицу.
Если ты создаешь других пользователей и используешь их для создания таблиц, то в последнем столбце будут именно они.
Список пользователей и ролей
Как ты уже знаешь, при установке Postgres создается суперпользователь с именем .
Список всех пользователей базы данных можно вывести на экран используя команду .
Обрати внимание, что первый столбец называется — роль (role name).
И весь вывод на экран называется “список ролей” (List of roles), а не список пользователей. В PostgreSQL пользователи и роли практически
одинаковы
В PostgreSQL пользователи и роли практически
одинаковы.
У ролей есть атрибуты, которые определяют их разрешения, такие как создание баз данных или даже создание
других новых ролей.
Любая роль с атрибутом LOGIN может рассматриваться, как пользователь.
Здесь мы видим только одну роль, суперпользователя по умолчанию.
В реальном мире все будет иначе, потому что использовать только суперпользователя все время опасно.
Вместо этого создают другие роли с меньшими привилегиями.
Это гарантирует, что никто не совершит нежелательных действий по ошибке.
Если у одной из ролей есть доступ только на чтение данных, то с помощью этой роли будет невозможно удалить таблицу или поле.
Настройки на Master
В данной статье мы будем настраивать серверы с IP-адресами 192.168.1.10 (первичный или master) и 192.168.1.11 (вторичный или slave).
Переходим на сервер, с которого будем реплицировать данные (мастер) и выполняем следующие действия.
Создаем пользователя в PostgreSQL
Входим в систему под пользователем postgres:
su — postgres
Создаем нового пользователя для репликации:
createuser —replication -P repluser
* система запросит пароль — его нужно придумать и ввести дважды. В данном примере мы создаем пользователя repluser.
Выходим из оболочки пользователя postgres:
exit
Настраиваем postgresql
Смотрим расположение конфигурационного файла postgresql.conf командой:
su — postgres -c «psql -c ‘SHOW config_file;'»
В моем случае система вернула строку:
/etc/postgresql/9.6/main/postgresql.conf
* конфигурационный файл находится по пути /etc/postgresql/9.6/main/postgresql.conf.
Открываем конфигурационный файл postgresql.conf.
vi /etc/postgresql/9.6/main/postgresql.conf
* мы открываем файл, который получили sql-командой SHOW config_file;.
Редактируем следующие параметры:
listen_addresses = ‘localhost, 192.168.1.10’
wal_level = replica
max_wal_senders = 2
max_replication_slots = 2
hot_standby = on
hot_standby_feedback = on
* где
- 192.168.1.10 — IP-адрес сервера, на котором он будем слушать запросы Postgre;
- wal_level указывает, сколько информации записывается в WAL (журнал операций, который используется для репликации);
- max_wal_senders — количество планируемых слейвов;
- max_replication_slots — максимальное число слотов репликации (данный параметр не нужен для postgresql 9.2 — с ним сервер не запустится);
- hot_standby — определяет, можно или нет подключаться к postgresql для выполнения запросов в процессе восстановления;
- hot_standby_feedback — определяет, будет или нет сервер slave сообщать мастеру о запросах, которые он выполняет.
Открываем конфигурационный файл pg_hba.conf — он находитсяч в том же каталоге, что и файл postgresql.conf:
vi /etc/postgresql/9.6/main/pg_hba.conf
Добавляем следующие строки:
host replication repluser 127.0.0.1/32 md5
host replication repluser 192.168.1.10/32 md5
host replication repluser 192.168.1.11/32 md5
* данной настройкой мы разрешаем подключение к базе данных replication пользователю repluser с локального сервера (localhost и 192.168.1.10) и сервера 192.168.1.11.
Перезапускаем службу postgresql:
systemctl restart postgresql
* обратите внимание, что название для сервиса в системах Linux может различаться
Кому не надо переходить на Postgres
Итак, кому на Postgres переходить точно не нужно:
-
Первая причина – если вам сильно страшно. Если сильно боитесь Linux, текстовых конфигурационных файлов, а не не галочек и параметров в визуальной части как у MS Management Studio, вы сильно не готовы тратить на это хоть какое-то время, даже 2-3 дня – не надо. Тут работает принцип – лучше та СУБД, которую вы знаете. Знаете другую СУБД – не надо.
-
Второй момент – у вас есть лицензионный MS SQL, он работает и вы не собираетесь разворачивать новый продукт СУБД для новых инсталляций баз. Тут работает другой принцип: работает – не трогай. Не ожидайте, что после перехода с MS на Postgres будет взрывной рост производительности обе СУБД сейчас почти сравнялись по скорости в работе с 1С и показывают результаты +-10% на разных запросах. Начитаетесь вредных советов по настройке Postgres и примените все подряд, не разбираясь, зачем вы это сделали, а просто потому, что какому-то чуваку это помогло победить один отчет, а он просто не в курсе, что у него легла остальная система.
В общем, если страшно или все работает, спокойно работайте на MS SQL.
Использование командной строки
Чтобы узнать, какая версия PostgreSQL работает в вашей системе, вызовите команду postgres с параметром –version или -V:
postgres --version
Команда выведет версию PostgreSQL:
postgres (PostgreSQL) 10.6
В этом примере используется версия сервера PostgreSQL 10.6.
Если двоичный файл postgres отсутствует в системном PATH, вы получите сообщение об ошибке «postgres: command not found». Обычно это происходит, когда пакет PostgreSQL не установлен из стандартных репозиториев дистрибутива.
Вы можете найти путь к двоичному файлу с помощью команды locate или find:
sudo find /usr -wholename '*/bin/postgres'
sudo updatedb locate bin/postgres
Вывод должен выглядеть примерно так:
/usr/lib/postgresql/9.6/bin/postgres
Как только вы найдете путь к двоичному файлу, вы можете использовать его для получения версии сервера PostgreSQL:
/usr/lib/postgresql/9.6/bin/postgres -V
Версию клиентской утилиты psql в PostgreSQL можно найти с помощью следующей команды:
psql --version
Вывод будет выглядеть примерно так:
postgres (PostgreSQL) 10.6
psql – интерактивная утилита командной строки, которая позволяет вам взаимодействовать с сервером PostgreSQL.