Конфигурация Postgresql, где находятся окна
Обновлено: 22.11.2024
Недавно я столкнулся с проблемой, из-за которой Postgres не запускался при вызове через стандартный «служебный» скрипт, /etc/init.d/postgresql. Это было на обычном Linux-боксе, Postgres был установлен через yum, а сценарий запуска вообще не менялся. Однако, запустив это как root:
…просто поставил «НЕ ПРОШЕЛ».
Изучение сценария показало, что результаты попытки запуска должны направляться в /var/lib/pgsql/pgstartup.log. Просмотр этого файла показал это сообщение:
Однако пользователь postgres может видеть этот файл, о чем свидетельствует su для учетной записи и просмотр файла. В чем дело? Что ж, каждый раз, когда вы видите что-то странное при использовании Linux, особенно если речь идет о разрешениях, вы должны подозревать SELinux. Первое, что нужно проверить, — работает ли SELinux и в каком режиме:
Да, он запущен и, что самое важное, находится в принудительном режиме. SELinux ведет журналы в /var/log/audit/ по умолчанию в большинстве дистрибутивов, хотя некоторые старые могут вести журнал напрямую в /var/log/messages. В данном случае я быстро нашел проблему в логах:
Похоже, SELinux не понравилась символическая ссылка, и действительно:
Здесь мы видим, что хотя пользователь postgres владеет символической ссылкой, владеет каталогом данных в /var/lib/pgsql/data и владеет рассматриваемым файлом /var/lib/pgsql/data/postgresql.conf, conf больше не находится в /var/lib/pgsql, а находится в /mnt/newpgdisk. SELinux не понравился тот факт, что процесс postmaster пытался прочитать эту символическую ссылку.
Теперь, когда мы знаем, что проблема в SELinux, что мы можем с этим поделать? На данный момент есть четыре возможных решения, позволяющих восстановить работу Postgres:
Во-первых, мы можем просто отредактировать назначение PGDATA в файле /etc/init.d/postgresql, чтобы оно указывало на фактический каталог данных, и обойти символическую ссылку. В этом случае мы изменили бы строку следующим образом:
Второе решение — просто отключить SELinux. Если вы не используете его специально для чего-то, это самое быстрое и простое решение.
Третье решение — изменить режим SELinux. Переключение с «принудительного» на «разрешающее» сохранит SELinux включенным, но вместо отказа в доступе он зарегистрирует попытку и по-прежнему позволит продолжить. Этот режим удобен для отладки, пока вы пытаетесь ввести новые правила принудительного применения или изменить существующие.
Четвертое решение самое правильное, но и самое сложное. Это, конечно, нужно, чтобы создать исключение SELinux для новой символической ссылки. Если вы снова будете что-то перемещать, вам придется снова изменить правила или, конечно же,.
В этом разделе представлен обзор того, как указываются и устанавливаются параметры конфигурации.
Каждый параметр конфигурации задается с помощью пары имя/значение. Имена параметров нечувствительны к регистру. Имя параметра обычно отделяется от его значения необязательным знаком равенства (=).
Ниже приведен пример некоторых настроек параметров конфигурации в файле postgresql.conf:
Значения параметров задаются одним из пяти типов:
- Булево значение. Допустимые значения могут быть записаны как on, off, true, false, yes, no, 1, 0 или любой однозначный префикс из них.
- Целое число. Число без дробной части.
- Плавающая точка. Число с необязательной дробной частью, разделенной десятичной точкой.
- Строка. Текстовое значение. Заключите в одинарные кавычки, если значение не является простым идентификатором или числом (то есть значение содержит специальные символы, такие как пробелы или другие знаки препинания).
- Перечисление. Конкретный набор строковых значений. Допустимые значения можно найти в системном представлении pg_settings.enumvals. Значения перечисления нечувствительны к регистру.
Некоторые настройки указывают значение памяти или времени. Каждый из них имеет неявную единицу измерения, которая представляет собой килобайты, блоки (обычно 8 килобайт), миллисекунды, секунды или минуты. Единицы измерения по умолчанию можно найти, обратившись к системному представлению pg_settings.unit. Можно явно указать другую единицу измерения.
Допустимыми единицами памяти являются кБ (килобайты), МБ (мегабайты) и ГБ (гигабайты). Допустимые единицы времени: ms (миллисекунды), s (секунды), min (минуты), h (часы) и d (дни). Множитель для блоков памяти равен 1024.
Настройки параметров конфигурации можно установить несколькими способами:
Существует ряд настроек параметров, которые устанавливаются при построении продукта базы данных Advanced Server. Это параметры только для чтения, и их значения нельзя изменить. Есть также несколько параметров, которые постоянно устанавливаются для каждой базы данных при создании базы данных. Эти параметры также доступны только для чтения и не могут быть впоследствии изменены для базы данных.
Исходные настройки почти всех настраиваемых параметров для всего кластера базы данных перечислены в файле конфигурации postgresql.conf . Эти настройки вступают в силу при запуске или перезапуске сервера баз данных.Некоторые из этих первоначальных настроек параметров можно переопределить, как описано в следующих пунктах. Все параметры конфигурации имеют встроенные настройки по умолчанию, которые действуют, если они не переопределены явным образом.
Параметры конфигурации в файле postgresql.conf переопределяются, если те же параметры включены в файл postgresql.auto.conf. Команда ALTER SYSTEM используется для управления параметрами конфигурации в файле postgresql.auto.conf.
Настройка параметров может быть изменена в файле конфигурации во время работы сервера базы данных. Если файл конфигурации затем перезагружается (что означает выдачу сигнала SIGHUP), для определенных типов параметров измененные настройки параметров немедленно вступают в силу. Для некоторых из этих типов параметров новые настройки доступны в текущем сеансе сразу после перезагрузки. Для других из этих типов параметров необходимо запустить новый сеанс, чтобы использовать новые настройки. И все же для других типов параметров измененные настройки не вступают в силу, пока сервер базы данных не будет остановлен и перезапущен. Информацию о том, как перезагрузить файл конфигурации, см. в следующем разделе документации PostgreSQL Core:
Команды SQL ALTER DATABASE , ALTER ROLE или ALTER ROLE IN DATABASE можно использовать для изменения настроек определенных параметров. Измененные настройки параметров вступают в силу для новых сеансов после выполнения команды. ALTER DATABASE влияет на новые сеансы, подключающиеся к указанной базе данных. ALTER ROLE влияет на новые сеансы, запущенные указанной ролью. ALTER ROLE IN DATABASE влияет на новые сеансы, запускаемые указанной ролью при подключении к указанной базе данных. Настройки параметров, установленные этими командами SQL, остаются в силе на неопределенный срок при перезапусках сервера базы данных, переопределяя настройки, установленные методами, описанными во втором и третьем пунктах списка. Настройки параметров, установленные с помощью команд ALTER DATABASE , ALTER ROLE или ALTER ROLE IN DATABASE, могут быть изменены только:
a) повторный запуск этих команд с другим значением параметра или
b) выдача этих команд с использованием либо предложения параметра SET TO DEFAULT, либо предложения параметра RESET. Эти предложения изменяют параметр обратно на использование настройки, установленной методами, изложенными в предыдущих пунктах списка. Точный синтаксис этих команд SQL см. в разделе «Команды SQL» главы VI «Справочник» в документации PostgreSQL Core:
Изменения некоторых настроек параметров в течение отдельных сеансов можно выполнять с помощью переменной среды PGOPTIONS или с помощью команды SET в терминальных программах командной строки EDB-PSQL или PSQL. Настройки параметров, выполненные таким образом, переопределяют настройки, установленные любым из методов, описанных во втором, третьем и четвертом пунктах списка, но только на время сеанса.
Изменение файла postgresql.confПараметры конфигурации в файле postgresql.conf определяют поведение сервера в отношении аудита, аутентификации, шифрования и других действий. На хостах Linux и Windows файл postgresql.conf находится в каталоге данных вашей установки Advanced Server.
Вывод: в этом руководстве вы шаг за шагом узнаете, как установить PostgreSQL в вашей локальной системе.
PostgreSQL был разработан для UNIX-подобных платформ, однако он предназначен для переноса. Это означает, что PostgreSQL также может работать на других платформах, таких как macOS, Solaris и Windows.
Начиная с версии 8.0, PostgreSQL предлагает программу установки для систем Windows, которая упрощает и ускоряет процесс установки. В целях разработки мы установим PostgreSQL версии 12 в Windows 10.
Для завершения установки PostgreSQL необходимо выполнить три шага:
- Загрузить программу установки PostgreSQL для Windows
- Установите PostgreSQL
- Проверьте установку
1) Загрузите установщик PostgreSQL для Windows
Во-первых, вам нужно перейти на страницу загрузки установщиков PostgreSQL в EnterpriseDB.
Во-вторых, нажмите на ссылку для скачивания, как показано ниже:
Для завершения загрузки потребуется несколько минут.
2) Шаг за шагом установите PostgreSQL в Windows
Для установки PostgreSQL в Windows необходимы права администратора.
Шаг 1. Дважды щелкните файл установщика, появится мастер установки, который проведет вас через несколько шагов, где вы можете выбрать различные параметры, которые вы хотели бы иметь в PostgreSQL.
Шаг 2. Нажмите кнопку "Далее"
Шаг 3.Укажите папку установки, выберите свою или оставьте папку по умолчанию, предложенную установщиком PostgreSQL, и нажмите кнопку «Далее».
Шаг 4. Выберите программные компоненты для установки:
- Сервер PostgreSQL для установки сервера базы данных PostgreSQL
- pgAdmin 4 для установки графического инструмента управления базой данных PostgreSQL.
- Инструменты командной строки для установки инструментов командной строки, таких как psql, pg_restore и т. д. Эти инструменты позволяют взаимодействовать с сервером базы данных PostgreSQL с помощью интерфейса командной строки.
- Stack Builder предоставляет графический интерфейс, позволяющий загружать и устанавливать драйверы, работающие с PostgreSQL.
Для работы с учебным пособием на этом веб-сайте вам не нужно устанавливать Stack Builder, поэтому снимите флажок и нажмите кнопку "Далее", чтобы выбрать каталог данных:
Шаг 5. Выберите каталог базы данных для хранения данных или примите папку по умолчанию. И нажмите кнопку Далее, чтобы перейти к следующему шагу:
Шаг 6. Введите пароль суперпользователя базы данных (postgres)
PostgreSQL работает как служба в фоновом режиме под учетной записью службы с именем postgres . Если вы уже создали учетную запись службы с именем postgres , вам необходимо указать пароль этой учетной записи в следующем окне.
После ввода пароля необходимо ввести его еще раз для подтверждения и нажать кнопку "Далее":
Шаг 7. Введите номер порта, который будет прослушиваться сервером базы данных PostgreSQL. Порт PostgreSQL по умолчанию — 5432. Необходимо убедиться, что другие приложения не используют этот порт.
Шаг 8. Выберите локаль по умолчанию, используемую базой данных PostgreSQL. Если вы оставите его в качестве локали по умолчанию, PostgreSQL будет использовать локаль операционной системы. После этого нажмите кнопку Далее.
Шаг 9. Мастер установки покажет сводную информацию о PostgreSQL. Вам необходимо просмотреть его и нажать кнопку «Далее», если все верно. В противном случае вам нужно нажать кнопку «Назад», чтобы соответствующим образом изменить конфигурацию.
Теперь вы готовы установить PostgreSQL на свой компьютер. Нажмите кнопку «Далее», чтобы начать установку PostgreSQL.
Установка может занять несколько минут.
Шаг 10. Нажмите кнопку "Готово", чтобы завершить установку PostgreSQL.
3) Проверьте установку
Есть несколько способов проверить правильность установки PostgreSQL. Вы можете попробовать подключиться к серверу базы данных PostgreSQL из любого клиентского приложения, например psql и pgAdmin.
Быстрый способ проверить правильность установки — использовать программу psql.
Сначала щелкните приложение psql, чтобы запустить его. Отобразится программа командной строки psql.
Во-вторых, введите всю необходимую информацию, такую как сервер, база данных, порт, имя пользователя и пароль. Чтобы принять значение по умолчанию, вы можете нажать Enter. Обратите внимание, что вы должны указать пароль, который вы ввели во время установки PostgreSQL.
В-третьих, введите команду SELECT version(); вы увидите следующий вывод:
Поздравляем! вы успешно установили сервер базы данных PostgreSQL в своей локальной системе. Давайте изучим различные способы подключения к серверу базы данных PostgreSQL.
В этом сообщении объясняется, как установить PostgreSQL на WSL2 для Windows, внести необходимые изменения в настройки PostgreSQL и получить доступ к базе данных с хоста Windows. Несмотря на то, что эти знания можно найти в разных фрагментах, разбросанных по всему Интернету, я хочу составить короткую и простую статью с практическими рекомендациями. Я хочу, чтобы вы могли выполнить все шаги с нуля, не пропуская все подряд.
Зачем мне нужен PostgreSQL на WSL2?
Несмотря на то, что есть стойкое ощущение, что настоящий программист использует в своей работе Linux, это утверждение не очень близко к истине. По крайней мере, согласно опросу Stack Overflow 2021:
Существует множество причин, по которым разработчик может захотеть использовать WSL2 с PostgreSQL на борту, но давайте назовем несколько:
- psql — это стандартный инструмент для изучения и работы с PostgreSQL. Однако в Windows есть некоторые ограничивающие проблемы, например отсутствие завершения табуляции, проблемы с кодировкой и т. д. Запуск psql под WSL2 обеспечит более плавную работу.
- Рекомендуется тестировать и отлаживать приложение в удаленной среде, а не на локальном узле. Таким образом, вы сможете сразу найти проблемы с аутентификацией клиента или с настройками подключения. Поскольку WSL2 — это автономная виртуальная машина под капотом, ее использование может быть самым простым способом добиться этого.
- WSL2 предоставит опытным разработчикам среду для создания и тестирования различных расширений PostgreSQL, недоступных в двоичной форме или созданных исключительно для Linux, например, pg_squeeze, pg_show_plans, pg_crash, pg_partman и т. д.
Установите WSL2
Чтобы установить WSL2 из PowerShell или командной строки Windows, просто запустите:
Из руководства:
- Эта команда активирует необходимые дополнительные компоненты, загрузит последнюю версию ядра Linux, установит WSL2 по умолчанию и установит для вас дистрибутив Ubuntu по умолчанию.
- При первом запуске только что установленного дистрибутива Linux откроется окно консоли, и вам будет предложено дождаться распаковки файлов и их сохранения на вашем компьютере. Все будущие запуски должны занимать менее секунды.
Предположим, вы предпочитаете изменить установленный дистрибутив, у вас есть возможность выбрать один из доступных. Чтобы получить список известных дистрибутивов, запустите:
После этого вы можете установить выбранный дистрибутив Linux на WSL2, выполнив команду:
В этом посте я буду использовать дистрибутив Ubuntu для демонстрационных целей.
⚠️ Все дальнейшие команды предполагается выполнять в сеансе Ubuntu WSL2.
Я настоятельно рекомендую использовать Windows Terminal для работы с сеансами консоли.
Установите PostgreSQL на WSL2 Ubuntu
Следуйте инструкциям на официальном сайте:
Обратите внимание: мы не используем systemctl, потому что WSL2 не использует systemd для работы:
Настройка PostgreSQL на WSL2
Теперь нам нужно настроить PostgreSQL, чтобы он:
- принимать подключения с хоста Windows;
- иметь специально созданных пользователей;
- разрешить аутентификацию с удаленных узлов.
Кстати, позвольте мне порекомендовать вам блог моей подруги Летиции Аврот, где освещаются все эти темы.
Как принимать подключения от хоста Windows для PostgreSQL на WSL2?
🔔 Я знаю, что новейшая версия WSL2 позволяет переадресацию на локальном хосте, но я думаю, что эту тему необходимо знать, особенно при создании среды разработки!
По умолчанию каждая установка PostgreSQL прослушивает только 127.0.0.1. Это означает, что вы не можете получить доступ к экземпляру базы данных с удаленного хоста, включая хост Windows. Это не ошибка. Это функция безопасности.
Чтобы изменить этот параметр, нам необходимо:
- редактировать postgresql.conf ;
- раскомментируйте (sic!) строку listen_address;
- измените его на listen_address = '*' для каждого доступного IP-адреса или списка адресов, разделенных запятыми;
- перезапустите экземпляр PostgreSQL, чтобы новые настройки вступили в силу.
В зависимости от вашего дистрибутива расположение файла postgresql.conf может отличаться. Самый простой способ узнать, где он находится, — это спросить у самого сервера. Однако здесь есть одна загвоздка.
Сейчас в новой установке PostgreSQL доступен только один пользователь: postgres . И есть только один способ подключения к экземпляру: одноранговая аутентификация.
Это означает, что операционная система (Ubuntu на WSL2) должна предоставить имя пользователя из ядра и использовать его в качестве разрешенного имени пользователя базы данных:
А теперь давайте сделаем что-нибудь веселое! Последняя версия WSL2 настолько крута, что позволяет запускать приложения Linux с графическим интерфейсом!Поэтому вместо использования редактора TUI, такого как nano или vim, мы будем использовать Gedit!
Как добавить пользователей в кластер PostgreSQL?
Как я уже сказал, по умолчанию доступен только один пользователь: postgres . Я настоятельно рекомендую создать отдельного пользователя.
Здесь мы воспользуемся тем же трюком для подключения к PostgreSQL с помощью psql и выполним команду CREATE USER:
Теперь мы можем указать только что созданного пользователя dev и подключиться к PostgreSQL, используя аутентификацию по паролю. Обратите внимание, что я явно использовал параметр -h 127.0.0.1 для принудительной аутентификации по паролю вместо одноранговой аутентификации.
Как разрешить аутентификацию с удаленных хостов для PostgreSQL на WSL2?
Проще всего добавить дополнительные строки в файл pg_hba.conf:
Это изменение будет применять аутентификацию по паролю scram-sha-256 для всех подключений IPv4 и IPv6.
Как подключиться к PostgreSQL на WSL2 с хоста Windows?
С последней версией WSL2 вы можете получить доступ к PostgreSQL из приложения Windows (например, psql или pgAdmin ) с помощью локального хоста (как обычно):
⚠️ Но если у вас есть конфликты, например, с локальной (Windows) установкой PostgreSQL, вы можете использовать конкретный IP-адрес WSL2. То же самое применимо, если вы используете более старую версию Windows (сборка 18945 или ниже).
Как я упоминал ранее, система WSL2 представляет собой автономную виртуальную машину с собственным IP-адресом. Итак, во-первых, нам нужно знать IP-адрес для подключения. Есть несколько способов сделать это. Выберите то, что вы предпочитаете.
Вы можете запустить такую команду в сеансе WSL2:
Или даже короче, если вам не нужны все эти подробности:
Или вы можете запустить одну из этих команд из PowerShell или из сеанса командной строки на хосте Windows:
Теперь, когда мы знаем IP-адрес, мы можем подключиться к PostgreSQL на WSL2 с помощью psql:
Или подключитесь к любому удобному графическому интерфейсу, например, к HeidiSQL:
Единственным недостатком является то, что IP-адрес машины WSL2 нельзя сделать статическим! Это означает, что вам нужно будет проверять IP-адрес после каждой перезагрузки или настроить какой-либо сценарий запуска, чтобы обновить переменную системной среды некоторого содержимого файла с текущим IP-адресом. Поскольку универсального решения не существует, я оставлю это домашнее задание читателю. 😉
Заключение
Из этого поста мы узнали:
- как установить WSL2;
- способ установки PostgreSQL в дистрибутив WSL2 Ubuntu по умолчанию;
- как настроить PostgreSQL для прослушивания всех IP-адресов;
- как настроить PostgreSQL для аутентификации пользователей со всех IP-адресов;
- некоторые хитрости, программное обеспечение и сервисы.
Сообщите мне, интересна ли вам эта тема и какие вопросы мы должны осветить в последующих статьях.
Здесь вы можете найти другие публикации о Windows, которые могут оказаться полезными.
В заключение желаю вам всего наилучшего! ♥️
Пожалуйста, берегите себя, чтобы мы могли встретиться лично на одной из конференций, митапов или тренингов!
Павло Голуб
Я эксперт по PostgreSQL и разработчик в компании Cybertec. Я работаю с PostgreSQL с 2002 года.
Читайте также: