Postgresql server что это за программа и нужна ли

Содержание

Установка PostgreSQL в Ubuntu

Реляционные системы управления базами данных (РСУБД) — это ключевой компонент многих веб-сайтов и приложений. Они обеспечивают структурированный способ хранения данных и организацию доступа к информации. PostgreSQL- это объектно-реляционная система управления базами данных, которая все больше и больше вытесняет MySQL и производственных серверов.

Её преимущество в множестве дополнительных функций и улучшений, таких как надежная передача данных и параллелизация без блокировок чтения. Вы можете использовать эту СУБД с различными языками программирования, а её синтаксис запросов PL/pgSQL очень похож на MySQL от Oracle. В этой статье мы рассмотрим, как выполняется установка PostgreSQL в Ubuntu 20.04 из официальных репозиториев и репозитория PostgreSQL (PPA) а так же, как выполнить первоначальную настройку и подготовку к работе c данной СУБД.

Установка PostgreSQL в Ubuntu 20.04

1. Установка из официальных репозиториев

Это очень популярная СУБД, потому программа присутствует в официальных репозиториях. Для установки выполните следующие команды. Сначала обновите списки пакетов:

MySQL и PostgreSQL: что «под капотом» и почему это важно знать прикладному разработчику

sudo apt update

Установите СУБД PostgreSQL:

sudo apt -y install postgresql

Bxu6MavjgSm6AAAAAElFTkSuQmCC

2. Установка из официальных репозиториев PostgreSQL

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

sudo sh -c ‘echo «deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main» > /etc/apt/sources.list.d/pgdg.list’

wget —quiet -O — https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add —

wWqXkIy35biQwAAAABJRU5ErkJggg==

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

sudo apt update

Установка PostgreSQL из PPA или официальных репозиториев выглядит одинаково:

sudo apt -y install postgresql

vQQAAAABJRU5ErkJggg==

Настройка PostgreSQL в Ubuntu 20.04

После установки СУБД откройте терминал и переключитесь на пользователя postgres с помощью команды:

sudo -i -u postgres

2s8PoiwrxRHO3tOHf8f3BQ31KaKItuAAAAAElFTkSuQmCC

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

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

Нужна ли веб-разработчику PostgreSQL?

qB7YIAAAAASUVORK5CYII=

И посмотреть информацию о соединении:

AZl3R9oWNdWtmo0mbESvqGD9PFvtk1KNMMUU4yH8P7pEDPO2B5uMAAAAAElFTkSuQmCC

Чтобы выйти наберите:

Теперь рассмотрим, как создать другие роли и базы данных.

Создание роли postgresql

Вы уже можете полноценно работать с базой данных с помощью учетной записи postgres, но давайте создадим дополнительную роль. Учетная запись postgres является администратором, поэтому имеет доступ к функциям управления. Для создания пользователя выполните команду:

AAAAAElFTkSuQmCC

Скрипт задаст лишь два вопроса, имя новой роли и нужно ли делать ее суперпользователем.

Создание базы данных

Точно также как имена ролей сопоставляются с системными пользователями, имя базы данных будет подбираться по имени пользователя. Например, если мы создали пользователя alex, то по умолчанию система попытается получить доступ к базе данных alex. Мы можем ее очень просто создать:

Дальше, чтобы подключиться к этой базе данных нам нужно войти от имени одноименного пользователя:

8HKGPz6sRI9TQAAAAASUVORK5CYII=

Заходим в консоль и смотрим информацию о подключении:

Q7ZDAZkeD5IHqxR00myNauwopyDnHitgFLZgaQq9yhmbBt6baxOs6xOK+43npgKfspGgIMAAlA9f8S4fTT5td9DO0AAAAASUVORK5CYII=

Все верно сработало. Мы подключились с помощью роли alex к базе alex. Если нужно указать другую базу данных, вы можете сделать это с помощью опции -d, например:

psql -d postgres

AXu3ZA3MmjUvAAAAAElFTkSuQmCC

Все сработало верно, при условии, что все компоненты были настроены как описано выше.

Создание таблиц

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

CREATE TABLE имя_таблицы (имя_колонки1 тип_колонки (длина) ограничения, имя_колонки2 тип_колонки (длина), имя_колонки3 тип_колонки (длина));

Как видите, сначала мы задаем имя таблицы, затем описываем каждый столбец. Столбец должен иметь имя, тип и размер, также можно задать ограничения для данных, которые там будут содержаться. Например:

CREATE TABLE playground (equip_id serial PRIMARY KEY, type varchar (50) NOT NULL, color varchar (25) NOT NULL, location varchar(25) check (location in (‘north’, ‘south’, ‘west’, ‘east’, ‘northeast’, ‘southeast’, ‘southwest’, ‘northwest’)), install_date date );

BJQpdSr1BRyAAAAAAElFTkSuQmCC

Мы создали таблицу детской площадки для описания оборудования, которое на ней есть. Сначала идет идентификатор equip_id, который имеет тип serial, это значит, что его значение будет автоматически увеличиваться, ключ primary key значит, что значения должны быть уникальны.

Следующие колонки — обычные строки, для них мы задаем длину поля, они не могут быть пустыми (NOT NULL). Следующий столбец тоже строка, но она может содержать только одно из указанных значений, последний столбец — дата создания.

Вы можете вывести все таблицы, выполнив команду:

w8xx87mvdlmxAAAAABJRU5ErkJggg==

Здесь мы видим, что кроме нашей таблицы, существует еще одна переменная -playground_equip_id_seq. В ней содержится последнее значение этого поля. Если нужно вывести только таблицы, выполните:

6QAAAABJRU5ErkJggg==

Выводы

Теперь установка Postgresql в Ubuntu 20.04 завершена, и вы прошли краткий экскурс в синтаксис PgSQL, который очень похож на привычный нам MySQL, но имеет некоторые отличия. Если у вас остались вопросы, спрашивайте в комментариях!

Похожие записи

Нет похожих записей.

Оцените статью

(11 оценок, среднее: 4,45 из 5)

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

Об авторе

Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.

Источник: losst.pro

Как установить PostgreSQL — решения для Windows, Mac OS X, Linux

Как установить PostgreSQL? Для Microsoft Windows , Mac OS X и Linux существует один установщик. Его можно скачать здесь . Кликните по иконке нужной версии установки PostgreSQL , соответствующей вашей операционной системе.

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

Запустите установку

Когда программа попросит выбрать один из вариантов, сделайте следующее:

  • Когда вас попросят выбрать локаль, выберите UTF-8 . Если варианта UTF-8 в списке нет, выберите вариант UTF-8 в списке локалей для языка. Например, en_US.UTF-8 для английского языка США;
  • Если программа попросит установить StackBuilder – он инсталлирует некоторые дополнительные инструменты Web , репликации и ODBC , которые не требуются для CollectionSpace . Но может потребоваться инсталляция некоторых модулей PostgreSQL , таких как PostGIS .

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

Настройка PostgreSQL

Чтобы установленный PostgreSQL работал с CollectionSpace, необходимо настроить пользователей и изменить некоторые параметры.

  • Найдите конфигурационный файл pg_hba.conf . Он расположен в подкаталоге data каталога, в котором установлена PostgreSQL ;
  • Откройте этот файл в текстовом редакторе и следуйте приведенным ниже инструкциям;

В Mac OS X по умолчанию это папка /Library/PostgreSQL/9.1.
В Mac OS X нужно иметь права супер пользователя, чтобы редактировать любой из следующих файлов конфигурации.

  • Убедитесь, что для » local section » указано последнее слово md5 , а не ident :

# «local» is for Unix domain socket connections only local all all md5

  • Измените раздел » IPv4 local connections » следующим образом:

# IPv4 local connections: host all csadmin samehost md5

Это ограничивает набор пользователей PostgreSQL , которым предоставляется локальный доступ к трем базам данных, используемым CollectionSpace: jbossdb , nuxeo и cspace . Например, только пользователь с именем cspace или супер пользователь PostgreSQL с именем postgres может получить доступ к базе данных cspace с локальной машины.

При установке PostgreSQL 9.x на Windows 7 может не принять термин samehost в столбце CIDR-ADDRESS . Если это произойдет, используйте адресную форму 127.0.0.1/32 :

# IPv4 local connections: host all csadmin 127.0.0.1/32 md5

  • Убедитесь, что записи в разделе » IPv6 local connections » отключены. В качестве первого символа в строках указывается символ хэш ( # ), если только в вашей системе не активен IPv6 :
Читайте также:
Лента виджетов что это за программа и нужна ли она на телефоне

# IPv6 local connections: #host all all ::1/128 md5

Современные системы, работающие под управлением Windows 7 и Windows Vista , могут поставляться с включенным по умолчанию IPv6 . Если в вашей системе включен IPv6 , можно поэкспериментировать со следующей конфигурацией — указать ::1/128 для адреса localhost :

# IPv6 local connections: host all csadmin ::1/128 md5

  • Если нужно разрешить создание отчетов при подключении к БД с удаленных хостов, тогда следует добавить запись, подобную приведенной ниже, но указав свой адрес подсети. Приведенная ниже конфигурация позволит создавать отчеты удаленно с хостов в определенной подсети UC Berkeley . Для получения дополнительной информации о том, как указать адрес подсети, ознакомьтесь с документацией по pg_hba.conf для используемого релиза PostgreSQL .

host all cspace_reader 169.229.0.0/16 md5

Чтобы автор отчетов мог работать, придется внести еще одно изменение в значение listen_addresses в файле postgresql.conf . Подробнее о поиске этого файла рассказано ниже.

Если вы можете контролировать доступ к PostgreSQL через брандмауэр, то проще ввести значение listen_addresses «*» . Для большей безопасности можно ввести список разделенных запятыми IP-адресов , с которых будут связываться авторы отчетов.

Далее после PostgreSQL установки и настройки Windows нужно внести изменения в конфигурационный файл PostgreSQL :

  • Найдите файл postgresql.conf , находящийся в папке data каталога, в котором установлен PostgreSQL ;
  • Откройте этот файл в текстовом редакторе и внесите следующие изменения:

max_prepared_transactions = 64

Значение переменной max_prepared_transactions , равное 64 , может оказаться большим для вашей системы. Если это так, установите меньшее значение.

Если это значение действительно слишком велико для вашей системы, вы получите сообщение об ошибке при перезапуске PostgreSQL :
Restarting PostgreSQL . database server: main The PostgreSQL server failed to start. Please check the log output . FATAL: could not create shared memory segment: .

Перезапустите службу PostgreSQL

Если при запуске сервера после установки PostgreSQL выводятся сообщения об ошибках, обратитесь к разделу « Сбои при запуске сервера » в документации PostgreSQL по запуску сервера .

Если вы являетесь пользователем root или sudo , можно выполнить следующую команду:

service postgresql restart

Убедитесь, что вы являетесь пользователем postgres :

sudo su — postgres pg_ctl restart -D /Library/PostgreSQL/9.1/data

Флаг -D указывает местоположение каталога данных PostgreSQL, который также может быть установлен как переменная среды PGDATA. По умолчанию его можно найти по адресу /Library/PostgreSQL/9.1/data.

Если при попытке запустить pg_ctl вы получаете сообщение об ошибке «not found», попробуйте указать полный путь к этому файлу в подкаталоге bin каталога, в котором установлен PostgreSQL. Например: /Library/PostgreSQL/9.1/bin/pg_ctl restart -D /Library/PostgreSQL/9.1/data

Чтобы добавить PGDATA в качестве глобальной переменной среды в / etc / profile , выполните следующие шаги:

sudo vi /etc/profile

Затем добавьте следующую строку:

После этого можно будет выполнить предыдущую команду для перезапуска сервера PostgreSQL без флага -D .

При установке PostgreSQL Windows у вас должны быть права администратора. Кликните правой кнопкой мыши по ярлыку « Мой компьютер » и выберите пункт « Управление ». В пользовательском интерфейсе « Управление » выберите « Службы и приложения » — « Службы ». Найдите службу PostgreSQL ( «postgresql-9.0 — PostgreSQL Server 9.0» ), выберите ее и нажмите на кнопку « Перезапустить службу ».

Настройка типов данных

Откройте консоль PostgreSQL для базы данных template1 :

Если при попытке запустить psql на экране появится сообщение not found», попробуйте указать полный путь к этому файлу в подкаталоге bin; например на Mac OS X: /Library/PostgreSQL/9.1/bin/psql.

Выполните в консоли две следующие команды:

su — postgres psql -d template1 #open the database template1

Под пользователем postgres выполните следующие две команды:

Sudo su — postgres Psql -d template1

При первом запуске команды psql на OS X 10.8.X вы можете увидеть сообщение об ошибке:

Это связано с тем, как Homebrew в Mac OS X и Mountain Lion конфликтуют с определенными системными библиотеками. Решение этой проблемы заключается в том, чтобы скопировать и связать версии библиотеки. PostgreSQL упакован в /usr/lib , где библиотеки хранятся в Mountain Lion .

sudo cp /Library/PostgreSQL/9.1/lib/libssl.1.0.0.dylib /usr/lib sudo cp /Library/PostgreSQL/9.1/lib/libcrypto.1.0.0.dylib /usr/lib sudo ln -fs /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib sudo ln -fs /usr/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib

Еще одним решением может стать пересмотр Homebrew и проверка совместимости с Mountain Lion .

При установке PostgreSQL на Mac OS X в один клик создается ярлык для оболочки PostgreSQL в каталоге Applications / PostgreSQL 9.0 / . Нажмите SQL Shell (psql).app , чтобы открыть новое окно терминала с запущенным psql .

Из этого окна терминала можно получить доступ к базе данных template1 , введя:

psql c template1

psql запускается из командной строки ( cmd ) Windows . Убедитесь, что путь к папке postgres bin хранится в переменной PATH , или просто вызовите ее с полным путем к месту расположения исполняемого файла psql :

psql -d template1 -U postgres

Выполните команды консоли:

CREATE FUNCTION pg_catalog.text(integer) RETURNS text STRICT IMMUTABLE LANGUAGE SQL AS ‘SELECT textin(int4out($1));’; CREATE CAST (integer AS text) WITH FUNCTION pg_catalog.text(integer) AS IMPLICIT; COMMENT ON FUNCTION pg_catalog.text(integer) IS ‘convert integer to text’; CREATE FUNCTION pg_catalog.text(bigint) RETURNS text STRICT IMMUTABLE LANGUAGE SQL AS ‘SELECT textin(int8out($1));’; CREATE CAST (bigint AS text) WITH FUNCTION pg_catalog.text(bigint) AS IMPLICIT; COMMENT ON FUNCTION pg_catalog.text(bigint) IS ‘convert bigint to text’;

Создайте пользователя csadmin

Для PostgreSQL установки и настройки в командной строке psql ( заканчивающейся на # ) переключитесь с базы данных template1 на postgres , введя следующее:

Введите следующую команду, чтобы создать пользователя csadmin с соответствующими привилегиями. Не забудьте заменить пароль replacemewithyourpassword в приведенном ниже примере на пароль по вашему выбору.

CREATE ROLE csadmin LOGIN PASSWORD ‘replacemewithyourpassword’ SUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;

В результате вы должны увидеть сообщение, подобное этому: CREATE ROLE .

Закройте программу psql , введя q ( или нажав Ctrl + d ).

Теперь перезапустите сервер PostgreSQL еще раз ( как описано выше ).

Дополнительная настройка

Дополнительная настройка базы данных является необязательной! CollectionSpace будет выполняться, даже если ни одно из описанных ниже действий не будет выполнено.

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

PostgreSQL установка и настройка Windows выполняется через postgresql.conf . Откройте этот файл в текстовом редакторе и отредактируйте следующие значения:

Теперь через командную строку задайте значение kernel.shmmax . Оно должно как минимум равняться shared_buffer + 128MB :

Затем перезапустите сервер PostgreSQL . Если на экране появится сообщение об ошибке, то нужно будет увеличить значение kernel.shmax .

Затем необходимо определить окончательное значение shmmax :

Откройте файл /etc/sysctl.conf .

И добавьте следующую строку — заменив значение для shmmax :

Наконец, установите необходимое значение cache_size :

Для этого запустите ( и выведите статистику в мегабайтах ):

В результате на экране вы увидите что-то наподобие этого:

free -m total used free shared buffers cached Mem: 4096 3302 793 0 253 1226 -/+ buffers/cache: 1822 2273 Swap: 511 216 295

Эффективное значение для cache_size определяется путем сложения значений buffers и cached . В приведенном выше примере:

253 + 1226 = 1479

К этому числу добавляется значение shared_buffers , поэтому в общей сложности мы получаем:

1479 + 512 = 1991 ~ 2 ГБ

Снова отредактируйте файл postgres.conf и установите эффективный размер кэша — значение, выведенное нами в предыдущих шагах:

effective_cache_size = 2GB

Также задайте следующие значения:

work_mem = 16MB # min 64kB maintenance_work_mem = 32MB # min 1MB random_page_cost = 2.0

Перезагрузите установленный PostgreSQL , чтобы изменения вступили в силу.

Мы закончили настройку PostgreSQL . Обратите внимание, что приведенные в этом разделе значения являются примерными. Их необходимо устанавливать в соответствии с настройками вашей системы. Более подробную информацию о настройках можно найти здесь .

Источник: www.internet-technologies.ru

Работа с PostgreSQL: от полного нуля до полного просветления

Мой комп

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

PostgreSQL – это опенсорсная реляционная СУБД. В статье будет рассматриваться процесс установки, настройки / управления, а также базовые операции с БД.

Если на вашей машине стоит MacOS, то процесс установки можно запустить командой:

brew install postgresql

На Linux СУБД устанавливается так:

sudo apt-get install postgresql postgresql-contrib

Если у вас другая ОС, есть непонятные моменты или вопросы – обращайтесь в официальный хелп.

После того, как все загружено и установлено, можно проверить, все ли в порядке, и какая стоит версия PostgreSQL. Для этого выполните следующую команду:

Работа с PostgreSQL может быть произведена через командную строку (терминал) с использованием утилиты psql – инструмент командной строки PostgreSQL. Попробуйте ввести следующую команду:

psql postgres (для выхода из интерфейса используйте q)

Этой командой вы запустите утилиту psql. Хотя есть много сторонних инструментов для администрирования PostgreSQL, нет необходимости их устанавливать, т. к. psql удобен и отлично работает.

Если вам нужна помощь, введите help (или -h) в psql-терминале. Появится список всех доступных параметров справки. Вы можете ввести help [имя команды], если вам нужна помощь по конкретной команде. Например, если ввести help UPDATE в консоли psql, вы увидите синтаксис команды update.

Description: update rows of a table [ WITH [ RECURSIVE ] with_query [, …] ] UPDATE [ ONLY ] table_name [ * ] [ [ AS ] alias ] SET < column_name = < expression | DEFAULT >| ( column_name [, …] ) = ( < expression | DEFAULT >[, …] ) | ( column_name [, …] ) = ( sub-SELECT ) > [, …] [ FROM from_list ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ RETURNING * | output_expression [ [ AS ] output_name ] [, …] ]

Читайте также:
Create bootable usb что это за программа

Если у вас возникает много вопросов – не стоит отчаиваться. Поиск в интернете предоставит массу примеров, ну и официальную документацию psql никто не отменял.

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

Работа с PostgreSQL

На рисунке выше вы видите три базы данных по умолчанию и суперпользователя postgres, которые создаются при установке PostgreSQL.

Чтобы вывести список всех пользователей, выполните команду du. Атрибуты пользователя postgres говорят нам, что он суперпользователь.

Чтобы выполнять базовые действия в СУБД, нужно знать Structured Query Language (SQL).

Navicat — это, наверное, самая богатая фичами программа. Она умеет всё, что умеют другие GUI для БД: дизайнер объектов, просмотрщик таблиц, автокомплит, инструменты проектирования базы, отладка pl/pgsql, импорт/экспорт и так далее.

Поистине всеобъемлющий софт, который работает практически на любой ОС. Навскидку, намного удобнее EMS Studio.

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

Ценник, правда, что называется, «конский» — в два раза дороже, чем EMS. Но тут, похоже, это полностью оправдано.

PGCLI

Те, кто пробует работать с psql, сразу начинают мечтать о более богатом функционале, например, автодополнении. Для реализации этих хотелок существует pgcli.

pgcli умеет автодополнять ключевые слова, функции, таблицы, колонки, колонки в алисах. Умеет подсвечивать синтаксис, редактировать SQL в многострочном режиме без отдельного редактора и т.д.

Короче, pgcli — это, по сути, psql на стероидах.

Новая база данных и передача прав

После появления нового пользователя первым делом нужно организовать базу данных и позволить ему редактировать ее. Для этого:

  • Не выходя из терминала после предыдущих шагов, введите create database mybase; mybase – название базы.
  • Передайте права новому пользователю командой grant all privileges on database mybase to username.
  • Готово, можно выходить из консоли q.

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

Создание пользователя PostgreSQL в Ubuntu

  • Откройте терминал и вбейте команду sudo su postgres Таким образом выполняется вход в учетную запись postgres Ubuntu стандартного пользователя.
  • Зайдите в консоль управление командой psql.
  • Укажите пароль для текущего пользователя password postgres.
  • Создайте новую роль, введя команду create user username with password ‘123qwe’. Предварительно замените username на желаемый логин и 123qwe на нужный пароль.

В примере роль с именем fotpc уже была создана, поэтому консоль вернула ошибку. В случае удачного создания, на ее месте будет надпись CREATE.

Доступ к PostgreSQL по сети, правила файерволла

Чтобы разрешить сетевой доступ к вашему экземпляру PostgreSQL с других компьютеров, вам нужно создать правила в файерволе. Вы можете создать правило через командную строку или PowerShell.

Запустите командную строку от имени администратора. Введите команду:

netsh advfirewall firewall add rule name=»Postgre Port» dir=in action=allow protocol=TCP localport=5432

  • Где rule name – имя правила
  • Localport – разрешенный порт

Либо вы можете создать правило, разрешающее TCP/IP доступ к экземпляру PostgreSQL на порту 5432 с помощью PowerShell:

New-NetFirewallRule -Name ‘POSTGRESQL-In-TCP’ -DisplayName ‘PostgreSQL (TCP-In)’ -Direction Inbound -Enabled True -Protocol TCP -LocalPort 5432

После применения команды в брандмауэре Windows появится новое разрешающее правило для порта Postgres.

правила бранжмауэра для доступа к PostgreSQL по сети

Совет. Для изменения порта в установленной PostgreSQL отредактируйте файл postgresql.conf по пути C:Program FilesPostgreSQL11data. Измените значение в пункте port = 5432. Перезапустите службу сервера postgresql-x64-11 после изменений. Можно перезапустить службу с помощью PowerShell:

Restart-Service -Name postgresql-x64-11

служба postgresql-x64-11

Более подробно о настройке параметров в конфигурационном файле postgresql.conf с помощью тюнеров смотрите в статье.

Что такое PostgreSQL и зачем она нужна

PostgreSQL – система управления базами данных, после появления которой стал постепенно вытесняться более привычный MySQL. Дело в том, что в отличие от него PostgreSQL имеет ряд непоколебимых преимуществ, среди которых:

  1. Доступные улучшенные или отсутствующие в MySQL функции.
  2. Поддержка расширения возможностей.
  3. Надежная передача данных.
  4. Отсутствие блокировок чтения при параллелизации.

Стоит отметить также то, что привыкать к новому синтаксису почти не придется, ведь используемый в данной СУБД PL/pgSQL является практически братом близнецом Oracle MySQL.

Встроенная библиотека SQLite идеально подходит для построения базы данных, используемой в локальном приложении с постоянным, прямым доступом к жесткому диску. Ведь все данные будут находиться в одном единственном файле, что очень положительно сказывается на скорости чтения находящихся в нем данных.

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

PgAdmin: Визуальный редактор для PostgresSQL

Редактор PgAdmin служит для упрощения управления базой данных PostgresSQL в понятном визуальном режиме.

  • Для запуска редактора запустите PgAdmin 4 в меню Пуск
  • Для доступа нужно ввести пароль суперпользователя postgres
  • В панели Servers вы можете раскрыть список активных БД.
  • В панели управления возможно быстро создать нового пользователя и группу, предоставить ему права. Для этого Откройте меню Object -> Create -> Create Login/Group. PgAdmin 4 создать пользователя
  • Для создания новой базы данных достаточно выбрать: Database в меню Object -> Create. В новом поле указать имя базы и владельца.

По умолчанию все созданные базы хранятся в каталоге base по пути C:Program FilesPostgreSQL11database.

Для каждой БД существует подкаталог внутри PGDATA/base, названный по OID базы данных в pg_database. Этот подкаталог по умолчанию является местом хранения файлов базы данных; в частности, там хранятся её системные каталоги. Каждая таблица и индекс хранятся в отдельном файле.

Для резервного копирования и восстановления лучше использовать инструмент Backup в панели инструментов Tools. Для автоматизации бэкапа PostgreSQL из командной строки используйте утилиту pg_dump.exe.

Источник: mycomp.su

Ускорение работы 1С с postgresql и диагностика проблем производительности

Некоторое время назад я настраивал работу 1С предприятия с базой данных postgresql. Во время тестирования столкнулся с проблемой медленной работы некоторых запросов. Хочу поделиться полезной информацией, которая позволит разобраться в таких ситуациях и попытаться ускорить работу и избавиться от узких мест в базе.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти вступительный тест.

Данная статья является частью единого цикла статьей про сервер Debian.

Введение

Сервер postgresql настроен по предыдущей статье — Установка и настройка postgresql на debian 8 для работы с 1С. Основные моменты по ускорению работы базы там приведены. Они существенно увеличивают производительность по сравнению с настройками по-умолчанию. В большинстве случаев этого бывает достаточно. Если нет — то у вас уже не типичный случай и надо разбираться более детально.

Проблема, с которой столкнулся я, кроется в особенности работы postgresql и отсутствии оптимизации 1С для работы с этой бд. База данных postgresql, в отличие от mssql, не умеет распараллеливать выполнение одного запроса не несколько ядер процессора.

Даже если у вас очень высокопроизводительный сервер с большим числом ядер, вы можете попасть в ситуацию, когда какой-то тяжелый запрос будет очень сильно тормозить, нагружая только одно ядро. Остальные мощности процессора будут простаивать при этом. Увеличение ресурсов сервера никак не поможет вам ускорить работу базы. Она будет всегда спотыкаться на этом запросе.

Параллельное выполнение запросов на нескольких ядрах в postgresql

Я использовал версию postgresql 9.6. Если верить новости — http://www.opennet.ru/opennews/art.shtml?num=43313 в ней добавлена поддержка распараллеливания запросов. Я стал пробовать на практике это распараллеливание. Информации в интернете, к моему сожалению, не так много. Вроде проблема популярная, много где видел вопросов на эту тему.

Например, вот тут обсуждают тему использования нескольких ядер процессора для выполнения запроса — http://www.sql.ru/forum/1002408/zadeystvovanie-neskolkih-processorov.

Наиболее популярные рекомендации, это изменить запросы и логику работы приложения с БД, чтобы не попадать в ситуацию, когда возникает один большой запрос, который невозможно разбить и обработать параллельно на нескольких ядрах. Пример такого подхода есть на хабре — https://habrahabr.ru/post/76309/. У меня нет ни должных знаний sql, ни тем более 1С, чтобы на уровне приложения что-то менять. Стал разбираться с возможностями postgresql.

Есть несколько параметров, которые как раз отвечают за параллельную обработку запросов:

max_worker_processes = 16 max_parallel_workers_per_gather = 8 min_parallel_relation_size = 0 parallel_tuple_cost = 0.05 parallel_setup_cost = 1000

Их необходимо подбирать под свое количество ядер. В данном случае настройки представлены для 16-ти ядерной системы.

Далее необходимо применить скрипт на базе 1С, который позволит оптимизатору постгреса использовать параллельную обработку тех запросов 1С где участвуют текстовые поля (большинство запросов), путём изменения определений функций. Текст скрипта очень длинный, поэтому не привожу его здесь, чтобы не нагружать статью. Качаем его с сайта — postgre.sql.

Читайте также:
Just manager что это за программа

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

Подключаемся к серверу с postgresql по ssh. Заходим под юзером postgres:

# su postgres

Переходим в домашний каталог пользователя:

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

# touch postgre.sql

Если будете копировать готовый файл, убедитесь, что у пользователя postgres есть доступ к этому файлу.

Подключаемся к серверу бд:

# psql -U postgres

Подключаемся к нужной базе данных:

connect base1c

Выполняем sql запрос из файла:

i postgre.sql

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

Разбираемся дальше.

Логирование sql запросов в postgresql

Для того, чтобы разобраться, что же конкретно у нас тормозит, надо посмотреть на сами запросы. Для этого нам нужно включить логирование запросов к базе данных. Запросов будет очень много, нам не нужны все подряд. Сделаем ограничение на логирование только тех запросов, которые выполняются дольше, чем 3 секунды. Для этого рисуем следующие параметры в конфиге БД:

log_destination = ‘syslog’ syslog_facility = ‘LOCAL0’ syslog_ident = ‘postgres’ log_min_duration_statement = 3000 # 3000 мс = 3 секунды log_duration = off log_statement = ‘none’

И добавляем описание канала для логов LOCAL0 в конфиг rsyslog в файле /etc/rsyslog.conf, в самый конец:

LOCAL0.* -/var/log/postgresql/sql.log

Если оставить настройки rsyslog в таком виде, то лог запросов будет писаться не только в файл /var/log/postgresql/sql.log, но и в messages, и в syslog. Я не люблю спамить в системные логи, поэтому отключим запись sql логов туда. Добавляем в описание этих лог файлов значение LOCAL0.none. Должно получиться примерно так:

*.*;auth,authpriv.none;LOCAL0.none -/var/log/syslog *.=info;*.=notice;*.=warn; auth,authpriv.none; cron,daemon.none; mail,news.none; LOCAL0.none -/var/log/messages

Перезапускаем postgresql и rsyslog:

# systemctl restart postgresql # systemctl restart rsyslog

Идем в базу 1С и вызываем свой запрос, который тормозит. Если его выполнение занимает больше, чем 3 секунды, вы увидите текст запроса в лог файле. Можете подольше попользоваться базой, чтобы собрать список запросов для анализа. Запросы 1С настолько громоздкие, что даже просто скопировать их из лога и обработать непростая задача.

Воспользуемся для этого специальной программой.

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

Анализ запросов postgresql с помощью pgFouine

Устанавливаем pgFouine в debian:

# apt-get install pgfouine

Это старая программа, но для наших целей сойдет. Пользоваться ей очень просто. Я не вдавался в подробности настройки и не смотрел возможные параметры. Мне было достаточно сделать вот так:

# pgfouine -file /var/log/postgresql/sql.log > /root/report.html

Забираем файл report.html к себе на компьютер и открываем в браузере. У меня получилось примерно так:

Текст sql запроса 1С в postgresql

Запрос впечатляет 🙂 Не удивительно, что он тормозит! Сказать, что я был удивлен, это ничего не сказать. Глядя на эти запросы, я понимал, что никакой оптимизации в 1С для работы с postgresql нет. Хотя я очень плохо разбираюсь в sql, знаком поверхностно с синтаксисом, и сам составлял только очень простые запросы.

Но даже я вижу, что проблема тормозов в том, что этот запрос просто безобразно огромный. Парсер запроса нахватал в код мусорных символов. В моем случае это символы #011, они присутствую в логе sql.log. Я не знаю, откуда они там берутся, но чтобы получить чистый запрос, их надо убрать. Я скопировал текст запроса в текстовый редактор и сделал замену символов #011 на пробел.

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

SELECT CASE WHEN (T1._Folder = FALSE) THEN CASE WHEN T1._Marked = TRUE THEN 13 ELSE 12 END ELSE ((-1 + CASE WHEN T1._Marked = TRUE THEN 1 ELSE 0 END) + CASE WHEN (T1._Fld607 = FALSE) THEN 1 ELSE 3 END) END, T1._IDRRef, ‘\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000’::bytea, T1._ParentIDRRef, T1._Description, CASE WHEN T2.Fld4011_TYPE IS NULL THEN CASE WHEN T1._Fld591RRef IS NOT NULL THEN ‘\010’::bytea END ELSE T2.Fld4011_TYPE END, CASE WHEN T2.Fld4011_TYPE IS NULL THEN CASE WHEN T1._Fld591RRef IS NOT NULL THEN ‘\000\000\000%’::bytea END ELSE T2.Fld4011_RTRef END, CASE WHEN T2.Fld4011_TYPE IS NULL THEN T1._Fld591RRef ELSE T2.Fld4011_RRRef END, T1._Fld595RRef, T1._Fld601RRef, T1._Fld606RRef, T1._Fld607, T1._Fld608, T1._Fld4737RRef, T1._Fld610, COALESCE(CAST(CAST((CAST(CAST((T2.Fld4009_ * 1) AS NUMERIC(22, 8)) / 1 AS NUMERIC(22, 8))) AS NUMERIC(15, 2)) AS NUMERIC(15, 2)),0), CASE WHEN (T2.Fld4011_TYPE = ‘\010’::bytea AND T2.Fld4011_RTRef = ‘\000\000\000 ‘::bytea) THEN (CAST(CAST(COALESCE(CAST(T6.Fld4265Balance_ AS NUMERIC(27, 3)),0) AS NUMERIC(35, 8)) / CASE WHEN T2.Fld4011_TYPE = ‘\010’::bytea AND T2.Fld4011_RTRef = ‘\000\000\000 ‘::bytea THEN T10._Fld483 ELSE CAST(NULL AS NUMERIC) END AS NUMERIC(35, 8))) ELSE COALESCE(CAST(T6.Fld4265Balance_ AS NUMERIC(27, 3)),0) END, CASE WHEN (COALESCE(CAST(T8.Fld4212Balance_ AS NUMERIC(27, 3)),0) = 0) THEN 1 ELSE 0 END, CASE WHEN (T2.Fld4011_TYPE = ‘\010’::bytea AND T2.Fld4011_RTRef = ‘\000\000\000 ‘::bytea) THEN (CAST(CAST((COALESCE(CAST(T6.Fld4265Balance_ AS NUMERIC(27, 3)),0) — COALESCE(CAST(T8.Fld4212Balance_ AS NUMERIC(27, 3)),0)) AS NUMERIC(36, 8)) / CASE WHEN T2.Fld4011_TYPE = ‘\010’::bytea AND T2.Fld4011_RTRef = ‘\000\000\000 ‘::bytea THEN T10._Fld483 ELSE CAST(NULL AS NUMERIC) END AS NUMERIC(36, 8))) ELSE (COALESCE(CAST(T6.Fld4265Balance_ AS NUMERIC(27, 3)),0) — COALESCE(CAST(T8.Fld4212Balance_ AS NUMERIC(27, 3)),0)) END, T1._Marked, CASE WHEN (T1._Folder = FALSE) THEN TRUE ELSE FALSE END FROM _Reference44 T1 LEFT OUTER JOIN (SELECT T5._Fld4007RRef AS Fld4007RRef, T5._Fld4011_TYPE AS Fld4011_TYPE, T5._Fld4011_RTRef AS Fld4011_RTRef, T5._Fld4011_RRRef AS Fld4011_RRRef, T5._Fld4009 AS Fld4009_ FROM (SELECT T4._Fld4006RRef AS Fld4006RRef, T4._Fld4007RRef AS Fld4007RRef, T4._Fld4008RRef AS Fld4008RRef, MAX(T4._Period) AS MAXPERIOD_ FROM _InfoRg4005 T4 WHERE ((T4._Fld5554 = 0)) AND (T4._Period 0) AND (T7._Fld4265 <> 0)) GROUP BY T7._Fld4260RRef HAVING (SUM(T7._Fld4265)) <> 0) T6 ON (T1._IDRRef = T6.Fld4260RRef) LEFT OUTER JOIN (SELECT T9._Fld4208RRef AS Fld4208RRef, SUM(T9._Fld4212) AS Fld4212Balance_ FROM _AccumRgT4232 T9 WHERE ((T9._Fld5554 = 0)) AND (T9._Period = ‘3999-11-01 00:00:00’::TIMESTAMP AND ((((T9._Fld4205RRef = ‘\224\206\245\237\200\356j\370Kp\252IFC\324a’::bytea) AND (T9._Fld4206_TYPE = ‘\010’::bytea AND T9._Fld4206_RTRef = ‘\000\000\000B’::bytea)) AND (T9._Fld4211RRef <> ‘\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000’::bytea))) AND (T9._Fld4212 <> 0) AND (T9._Fld4212 <> 0)) GROUP BY T9._Fld4208RRef HAVING (SUM(T9._Fld4212)) <> 0) T8 ON (T1._IDRRef = T8.Fld4208RRef) LEFT OUTER JOIN _Reference32 T10 ON (T2.Fld4011_TYPE = ‘\010’::bytea AND T2.Fld4011_RTRef = ‘\000\000\000 ‘::bytea AND T2.Fld4011_RRRef = T10._IDRRef) AND (T10._Fld5554 = 0) WHERE ((T1._Fld5554 = 0)) AND ((T1._Fld604RRef IN (‘\256″)\314\021G\321=\343U\243\367\344’::bytea, ‘\236\273\035\371;t\035kC<\024b\273W\037\206’::bytea)) AND (T1._Folder) = TRUE AND (T1._Fld14883 = FALSE) AND (T1._ParentIDRRef IN (SELECT T11._REFFIELDRRef AS REFFIELDRRef FROM tt9 T11))) ORDER BY (T1._Description), (T1._IDRRef) LIMIT 25;

Дальше вы можете разбираться со своими запросами, в зависимости от ваших знаний и возможностей.

Я не знал, что делать дальше, для решения своей проблемы. Попытался построить карту запроса с помощью EXPLAIN ANALYZE, но не получилось. Запрос использует какие-то временные таблицы, так что просто скопировать и повторить его не получалось. Выходила ошибка, что какой-то таблицы не существует.

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

Заключение

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

В данном случае объем базы всего 10 гб, она не очень большая. 15 секунд лопатить запрос на такой базе можно только, если этот запрос ужасен. На деле все так и оказалось.

В процессе разбора ситуации приобрел определенный опыт, который постарался зафиксировать в этой статье. Думаю, он пригодится в будущем, как мне, так и другим пользователям. В интернете не нашел хороших статей по анализу производительности постгрес. Пришлось все собирать по крохам в разных статьях, но больше на форумах. С учетом стоимости лицензии mssql, замена ее на postgresql выглядит весьма обоснованной, так что тема актуальна.

Буду рад любым замечаниям и советам в комментариях. Тема для меня новая, но полезная. Хотелось бы разобраться в работе постгрес.

Напоминаю, что данная статья является частью единого цикла статьей про сервер Debian.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом ««Administrator Linux. Professional» в OTUS. Вы научитесь делать профессиональный подбор конфигурации, управлять процессами, обеспечивать безопасность, выполнять развертывание, настройку и обслуживание сетей. Проверьте себя на вступительном тесте и смотрите подробнее программи ссылке.

Источник: serveradmin.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru