Postgres в ретроспективе

Новая версия Postgres для 1С

Вы сейчас работаете на Postgres 9.6, несмотря на то, что скоро выйдет Postgres 11. Но пока на него ни один серьезный человек не перейдет, нужно подождать, по крайней мере, несколько минорных релизов, потому что база данных – вещь серьезная. Поэтому наиболее актуальная для вас версия 10.

Что вас ожидает нового в этой версии, когда мы завершим тестирование? Вас ждут такие вещи, как:

параллельная обработка запросов — она уже была, но сейчас стала очень интересной;

многопараметрическая статистика добавлена

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

До сих пор до версии 10 статистика была однопараметрическая, т.е. для какой-то определенной колонки. А сейчас стала многопараметрической, так что вы можете делать статистику для связанных колонок. Это важно для 1С, потому что в 1С бывают сложные запросы, когда колонки друг с другом связаны, и это надо учитывать;

логическая репликация и секционирование таблиц. Это очень важно, когда у вас база данных становится большой. Тогда ее начинают разбивать на секции. И в Postgres 10 добавлено надежное секционирование, которое позволяет масштабироваться. Не на уровне приложения, а на уровне баз данных.

Расскажу немного подробнее про параллельную обработку запросов. В версии 9.3 появились background workers – это «демоны», которые делают задачки в фоновом режиме. В версии 9.6 появились Parallel sequential scans, когда диск читается параллельно сразу несколькими запросами. Т.е. если у вас 1С генерит 10 запросов к одной и той же таблице, то раньше эти все 10 запросов «дрались» за диск, и тогда там очень много overhead. А с параллельной обработкой один процесс читает, а все остальные ждут и пользуются результатами этого «чтения». Это сильно облегчает работу базы данных.

Появились еще Hash joins и Nested Loops – все это обрабатывается в системе параллельно. Наверное, ни у кого не осталось ноутбука или сервера, у которого только 1 ядро. Сейчас нормально, когда сервера имеют 8-12 ядер, и Postgres их эффективно использует. В этом и заключается параллелизм. Все ядра используются для выполнения вашего запроса.

В версии 10 появилось еще больше поддержки параллелизма – Bitmap heap scans, Index scans, Merge joins…

Я хочу отметить одну вещь. Известно, что 1С-ники пишут запросы на “своем” языке. В первый раз, когда я столкнулся с запросами 1С в 2008 году, я был шокирован. Несколько дней мы занимались тем, что пытались сократить запрос размером в 100 кБ и сделать его удобоваримым. Сейчас к нам приходят запросы длиной даже в 1 мБ. Я всегда поражаюсь, когда прихожу к вам, смотрю, неужели вот этот человек может описать вот такой запрос? И я очень горд за Postgres, потому что он справляется с такими запросами и при этом не умирает. Перечисленные выше функции и помогают решать такие проблемы.

В версии 11 появятся еще более удивительные вещи: улучшилась параллельная обработка запросов, появилась JIT-компиляция — Just-in-time compilation, компиляция «на лету». 

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

Одной из наиболее сильных сторон СУБД PostgreSQL является архитектура. Как и в случаях со многими коммерческими СУБД, PostgreSQL можно применять в среде клиент-сервер — это предоставляет множество преимуществ и пользователям, и разработчикам.

В основе PostgreSQL — серверный процесс базы данных, выполняемый на одном сервере. Также стоит сказать, что в Postgres пока не реализована технология высокой готовности, как это сделано в ряде других коммерческих систем управления базами данных уровня предприятия (они способны распределять нагрузку между некоторым количеством серверов, достигая дополнительной масштабируемости и повышенной устойчивости к внешним воздействиям).

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

Таким образом мы получаем разделение клиентов и сервера, что даёт возможность создавать распределённые системы. К примеру, мы можем отделить клиентов от сервера с помощью сети, разрабатывая клиентские приложения в среде, которая удобна для пользователя. Допустим, появляется возможность реализовать базу данных под UNIX, создав клиентские приложения, которые станут работать в ОС Microsoft Windows.

Давайте посмотрим на типичную модель распределенного приложения СУБД PostgreSQL:

Мы видим, что несколько клиентов подсоединены к серверу по сети. СУБД PostgreSQL ориентирована на протокол TCP/IP (локальная сеть либо Интернет), при этом каждый клиент соединён с главным серверным процессом БД (на схеме этот процесс называют Postmaster). Именно Postmaster создаёт новый серверный процесс специально в целях обслуживания запросов на доступ к данным определённого клиента.

Так как манипулирование с данными сосредотачивается на сервере, СУБД PostgreSQL не приходится контролировать многочисленных клиентов, которые получают доступ в совместно используемый серверный каталог. В результате база данных PostgreSQL способна поддерживать целостность данных даже в случае одновременного доступа большого числа пользователей.

Соединение с базой данных клиентских приложений осуществляется по специальному протоколу СУБД PostgreSQL. В принципе, никто не мешает инсталлировать на стороне клиента ПО, предоставляющее стандартный интерфейс, обеспечивающий работу с нужным приложением, допустим, по стандарту ODBC/JDBC. И это хорошо, ведь доступность ODBC-драйвера даёт возможность использовать СУБД PostgreSQL в качестве базы данных для множества уже существующих приложений, включая продукты Microsoft Office — Excel и Access.

Идём дальше. Клиент-серверная архитектура, реализованная в СУБД PostgreSQL, делает возможным разделение труда. То есть машина-сервер прекрасно подходит для хранения и управления доступом к огромным объёмам данных, то есть её можно использовать в качестве надёжного репозитория. При этом для клиентов возможна разработка сложных графических приложений. Также можно создать внешний онлайн-интерфейс, предоставляющий доступ к данным и возвращающий результат в виде web-страниц в стандартный web-браузер, не требуя при этом никакого дополнительного клиентского ПО.

Улучшения для JSON

JSON – популярный структурированный текстовый формат обмена данными, который был разработан Дугласом Крокфордом для использования в JavaScript-приложениях. Разработчики оценили простоту и понятность описания информации с помощью JSON и стали задействовать его в самых разных приложениях – от веб-сервисов до высоконагруженных корпоративных систем.

В PostgreSQL поддержку JSON добавили еще в версии 9.2. Но в свежем релизе с форматом можно работать через подписки. Запросы формата:

используют примерно тот же синтаксис, который обычно применяется для извлечения информации из JSON. А платформу индексирования в PostgreSQL 14 можно расширить на другие вложенные структуры данных.

Как проводится тестирование на совместимость с 1С

Что собой представляют тесты? Это тестовые конфигурации 1С, которые выполняют типовые операции с платформой. Они поддерживаются Postgres Professional, мы их разрабатываем и тестируем. А приемку результатов тестирования осуществляет компания 1С. 

Если у вас есть какие-то идеи или свои тесты, давайте сотрудничать. От этого будет зависеть качество нашего продукта. Мы, конечно, можем сами написать тесты и сотрудничаем с компаниями, но то многообразие данных и многообразие  ситуаций, которые существуют в сообществе 1С, мы не можем охватить. Поэтому призываю, если вы проводите свои тесты, например, «Операционный день» или «Операционный месяц», и у вас есть тестовые данные, есть результаты — поделитесь с нами. Можете сделать данные предварительно анонимными. Мы включим их в наши тесты, и вы будете уверены, что мы вашу ситуацию точно проверили, протестировали. Нам очень не хватает фидбэка от всех вас.

Часто встречающиеся ошибки 1С и общие способы их решения Промо

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

Запуск Apache 2.4 с модулем 1С внутри Docker контейнера

Про Apache и про Linux слышали, наверное, все. А вот про Docker пока нет, но он сильно набирает популярность последнее время и не зря. Поделюсь своим опытом и дам пошаговую инструкцию настройки веб-сервера Apache с модулем 1С внутри Docker контейнера на Linux хосте. При этом сам сервер 1С может находиться совсем на другой машине и на другой операционной системе

Это не важно, главное чтобы Apache смог достучаться до сервера 1С по TCP. В статье дам подробное пояснение по каждой используемой команде со ссылками на документацию по Docker, чтобы не создавалось ощущение непонятной магии

Также прилагаю git репозиторий с описанием всей конфигурации, можете попробовать развернуть у себя буквально за 10 минут.

Истории успеха

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

  • в Skype PostgreSQL используется для хранения чатов и истории дей­ствий. Компания Skype разработала для PostgreSQL много инструментов под общим названием SkyTools;
  • Instagram — социальная сеть для обмена фотографиями;
  • Американское химическое общество (ACS) использует PostgreSQL для хранения архивов журнала объемом свыше терабайта.
  • Помимо этих компаний, PostgreSQL используется в HP, VMware и Heroku, а также многими научными обществами и организациями, в частности NASA.

Этап второй. Настройка системы и установка PostgreSQL

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

Для этого необходимо скачать Putty Это специальная утилита как раз для таких подключений. Настраиваем подключение:

Где надо указать IP адрес ВМ, порт по-умолчанию 22. Для соединения нажать кнопку Open, а тип подключения SSH.

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

Удаленный доступ под пользователем root по-умолчанию запрещен. 

Первым делом — поставим последние обновления ОС. Для этого необходимо переключиться на пользователя root и обновиться, выполнив команды:

Следующий шаг — изменение локали системы.

Так как ранее устанавливали систему «по-умолчанию» и выбрали английскую локаль, а в подавляющем большинстве разработчики и пользователи 1С работают на русском языке, то перед установкой PostgreSQL и его настройкой, необходимо изменить локаль системы также на русскую. Для этого необходимо ввести следующую команду:

тут выбрано en_US.UTF-8 и надо выбрать еще ru_RU.UTF-8, выбрав ее основной и после это необходимо перезагрузить ОС для принятия изменений

Configure PostgreSQL Server

PostgreSQL listens on loopback adapter (127.0.0.1) only. Sometimes the application hosted on external may need to connect to the database. For that, we need to configure PostgreSQL to listen on all adaptors.

### PostgreSQL 11 ###

sudo nano /etc/postgresql/11/main/postgresql.conf

### PostgreSQL 10 ###

sudo nano /etc/postgresql/10/main/postgresql.conf

Set the to or .

listen_addresses = '*'

Restart PostgreSQL service.

sudo systemctl restart postgresql

Confirm the PostgreSQL listening on port 5432 using netstat command.

sudo netstat -antup | grep 5432

Output:

tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      3712/postgres
tcp6       0      0 :::5432                 :::*                    LISTEN      3712/postgres

READ: netstat command not found on Ubuntu – Quick Fix

Установка RedHat Codeready Studio на ОС RedHat Enterprise Linux 8.4 (RHEL 8.4)

Red Hat CodeReady Studio — это бесплатная для участников программы RedHat Developer open source интегрированная среда (IDE), предоставляет широкий набор функционала разработки для нескольких платформ Red Hat, которые включают контейнеры CodeReady (развертывание через OpenShift4), Quarkus, JAX-RS, внедрение зависимостей контекстов (CDI) и инструменты Red Hat Fuse. Студия включает последние версии Eclipse и Web Tools Project (WTP), предоставляет инструменты для JEE и веб-разработки, такие как: инструменты Java EE, JSF и JSP; инструменты JPA; серверные инструменты; веб-сервисы и инструменты WSDL; инструменты HTML , CSS и JavaScript; инструменты XML , XML Schema и DTD. Студия Code Ready Studio также поддерживает популярные технологии, такие как Enterprise Application Platform (EAP 7.3) — платформа корпоративных приложений Red Hat, Hibernate и Wildfly 21, и обеспечивает встроенное усиление для Kubernetes, OpenShift (включая S2i), docker и клиента REST для микропрофайлов.

Сервер 1С:Предприятие на Ubuntu 16.04 и PostgreSQL 9.6, для тех, кто хочет узнать его вкус. Рецепт от Капитана

Если кратко описать мое отношение к Postgres: Использовал до того, как это стало мейнстримом.
Конкретнее: Собирал на нем сервера для компаний среднего размера (до 50 активных пользователей 1С).
На настоящий момент их набирается уже больше, чем пальцев рук пары человек (нормальных, а не фрезеровщиков).
Следуя этой статье вы сможете себе собрать такой же и начать спокойную легальную жизнь, максимально легко сделать первый шаг в мир Linux и Postgres.
А я побороться за 1. Лучший бизнес-кейс (лучший опыт автоматизации предприятия на базе PostgreSQL).
Если, конечно, статья придется вам по вкусу.

Настройка PostgreSQL

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

Только что инициализированная система всегда содержит одну предопределенную роль, называемую postgres, и имеет то же имя, что и учетная запись пользователя операционной системы, называемая postgres, которая используется для доступа к psql (оболочка Postgres) и другим программам баз данных.

Учетная запись пользователя системы Postgres не защищена паролем, для ее защиты вы можете создать пароль с помощью утилиты passwd.

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

Далее выйдите из учетной записи postgres, чтобы продолжить настройку. Основной файл конфигурации Postgres находится по пути /etc/postgresql/11/main/postgresql.conf. В дополнение к этому файлу Postgres использует два других файла конфигурации, которые управляют аутентификацией клиента.

Аутентификация клиента контролируется файлом конфигурации /etc/postgresql/11/main/pg_hba.conf. Postgres предоставляет множество различных методов аутентификации клиента, включая аутентификацию на основе пароля. Клиентские соединения аутентифицируются на основе адреса хоста клиента, базы данных и пользователя.

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

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

В этом руководстве мы покажем, как настроить аутентификацию по паролю md5 для аутентификации клиента.

Найдите следующую строку и измените метод аутентификации на md5, как показано на скриншоте.

Сохраните изменения в файле и выйдите из него. Затем примените последние изменения, перезапустив службу Postgres следующим образом.

Создание новой базы данных и роли базы данных/пользователя в PostgreSQL
В этом последнем разделе мы покажем, как создать нового пользователя базы данных и роль базы данных для управления им. Сначала переключитесь на учетную запись postgres и откройте оболочку Postgres следующим образом.

Чтобы создать базу данных с именем «test_db», выполните следующую SQL команду:

Затем создайте пользователя базы данных (роль с правом входа), который будет управлять новой базой данных:

На этом настройка postgresql Debian 10 практически завершена. Чтобы подключиться к test_db от имени пользователя test_user, выполните:

Для получения дополнительной информации см. Документацию PostgreSQL 11.

История

PostgreSQL создана на основе некоммерческой СУБД Postgres, разработанной как open-source проект в Калифорнийском университете в Беркли. К разработке Postgres, начавшейся в 1986 году, имел непосредственное отношение Майкл Стоунбрейкер, руководитель более раннего проекта Ingres, на тот момент уже приобретённого компанией Computer Associates. Название расшифровывалось как «Post Ingres», и при создании Postgres были применены многие уже ранее сделанные наработки.

Стоунбрейкер и его студенты разрабатывали новую СУБД в течение восьми лет с 1986 по 1994 год. За этот период в синтаксис были введены процедуры, правила, пользовательские типы и другие компоненты. В 1995 году разработка снова разделилась: Стоунбрейкер использовал полученный опыт в создании коммерческой СУБД Illustra, продвигаемой его собственной одноимённой компанией (приобретённой впоследствии компанией Informix), а его студенты разработали новую версию Postgres — Postgres95, в которой язык запросов POSTQUEL — наследие Ingres — был заменен на SQL.

Разработка Postgres95 была выведена за пределы университета и передана команде энтузиастов. Новая СУБД получила имя, под которым она известна и развивается в текущий момент — PostgreSQL.

Создание второго кластера

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

postgres@s-pg13:~$ exit

# mkdir /usr/local/pgsql/data2/
# chown postgres:postgres /usr/local/pgsql/data2/
# chmod 750 /usr/local/pgsql/data2/
# su - postgres

postgres@s-pg13:~$ initdb -k -D /usr/local/pgsql/data2/

При инициализация кластера, если путь к каталогу PGDATA отличается от переменной $PGDATA или если такая переменная не задана. То нужно с помощью ключа -D указать путь к этому каталогу.

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

postgres@s-pg13:~$ nano /usr/local/pgsql/data2/postgresql.conf
port = 5433

Теперь можем запустить второй кластер:

postgres@s-pg13:~$ pg_ctl -w -D /usr/local/pgsql/data2/ -l /home/postgres/logfile2 start
waiting for server to start.... done
server started

Посмотрим на процессы:

postgres@s-pg13:~$ ps ax | grep bin/postgres
24119 ?        Ss     0:00 /usr/local/pgsql/bin/postgres
24480 ?        Ss     0:00 /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data2

Первый кластер запущен без ключа -D и используется переменная PGDATA, а во втором кластере путь к PGDATA прописан в строке запуска.

Сводка

Имя статьи
Установка PostgreSQL 13 из исходников и управление им

Описание
В этой статье я покажу как собрать PostgreSQL из исходников, инициализировать кластер и запустить его на сервере Ubuntu 20.04. А также установим из исходников одно из расширений PostgreSQL.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: