Postgresql conf где находится linux
В дополнение к вышеупомянутому postgresql.conf , Postgres Pro обрабатывает два редактируемых вручную файла конфигурации, в которых настраивается аутентификация клиентов (их использование рассматривается в Главе 19). По умолчанию все три файла конфигурации размещаются в каталоге данных кластера БД. Параметры, описанные в этом разделе, позволяют разместить их и в любом другом месте. (Это позволяет упростить администрирование, в частности, выполнять резервное копирование этих файлов обычно проще, когда они хранятся отдельно.)
data_directory ( string )
Задаёт каталог, в котором хранятся данные. Этот параметр можно задать только при запуске сервера. config_file ( string )
Задаёт основной файл конфигурации сервера (его стандартное имя — postgresql.conf ). Этот параметр можно задать только в командной строке postgres . hba_file ( string )
Задаёт файл конфигурации для аутентификации по сетевым узлам (его стандартное имя — pg_hba.conf ). Этот параметр можно задать только при старте сервера. ident_file ( string )
Задаёт файл конфигурации для сопоставлений имён пользователей (его стандартное имя — pg_ident.conf ). Этот параметр можно задать только при запуске сервера. См. также Раздел 19.2. external_pid_file ( string )
Задаёт имя дополнительного файла с идентификатором процесса (PID), который будет создавать сервер для использования программами администрирования. Этот параметр можно задать только при запуске сервера.
При стандартной установке ни один из этих параметров не задаётся явно. Вместо них задаётся только каталог данных, аргументом командной строки -D или переменной окружения PGDATA , и все необходимые файлы конфигурации загружаются из этого каталога.
Если вы хотите разместить файлы конфигурации не в каталоге данных, то аргумент командной строки postgres -D или переменная окружения PGDATA должны указывать на каталог, содержащий файлы конфигурации, а в postgresql.conf (или в командной строке) должен задаваться параметр data_directory , указывающий, где фактически находятся данные. Учтите, что data_directory переопределяет путь, задаваемый в -D или PGDATA как путь каталога данных, но не расположение файлов конфигурации.
При желании вы можете задать имена и пути файлов конфигурации по отдельности, воспользовавшись параметрами config_file , hba_file и/или ident_file . Параметр config_file можно задать только в командной строке postgres , тогда как остальные можно задать и в основном файле конфигурации. Если явно заданы все три эти параметра плюс data_directory , то задавать -D или PGDATA не нужно.
Во всех этих параметрах относительный путь должен задаваться от каталога, в котором запускается postgres .
| Пред. | Наверх | След. |
| 18.1. Изменение параметров | Начало | 18.3. Подключения и аутентификация |
PostgreSQL
PostgreSQL — это объектно-реляционная система баз данных, которая обладает признаками традиционной коммерческой базы данных, с расширениями, которые будут доступны следующему поколению СУБД (систем управления базами данных).
Установка
Для установки PostgreSQL выполните следующую команду в терминале:
sudo apt-get install postgresql
Сразу после установки вы можете настроить сервер PostgreSQL по вашим потребностям, хотя стандартная настройка вполне жизнеспособна.
Настройка
По умолчанию соединения через TCP/IP заблокированы. PostgreSQL поддерживает множество методов аутентификации. Метод аутентификации IDENT используется для postgres и локальных пользователей пока не настроено что-то еще. Обратитесь к PostgreSQL Administrator’s Guide, если вы собираетесь использовать какую-либо альтернативу типа Kerberos.
Дальнейшее обсуждение предполагает, что вы собираетесь разрешить соединения по TCP/IP и используете аутентификацию клиентов на основе метода MD5. Файлы настроек PostgreSQL хранятся в каталоге /etc/postgresql/ /main. Например, если вы установили PostgreSQL 8.4, файлы настроек сохранятся в каталоге /etc/postgresql/8.4/main.
Для настройки аутентификации ident добавьте записи в файл /etc/postgresql/8.4/main/pg_ident.conf. В файле содержатся подробные комментарии чтобы направлять вас.
Чтобы разрешить соединения по TCP/IP, отредактируйте файл /etc/postgresql/8.4/main/postgresql.conf. Найдите строку
#listen_addresses = 'localhost'
и замените ее на:
listen_addresses = 'localhost'
Чтобы разрешить другим компьютерам соединяться с вашим PostgreSQL сервером, замените ‘localhost’ на IP адрес вашего сервера или в качестве альтернативы на 0.0.0.0, чтобы подключить все интерфейсы.
Вы можете также редактировать любые другие параметры, если знаете что вы делаете! Для подробностей смотрите комментарии файла настроек или документацию по PostgreSQL.
Теперь, поскольку мы можем подключиться к нашему серверу PostgreSQL, следующим шагом будет установка пароля для пользователя postgres. Выполните следующую команду в терминале для соединения со стандартной базой шаблонов PostgreSQL:
sudo -u postgres psql template1
Эта команда подключится к PostgreSQL базе данных template1 как пользователь postgres. После подключения к серверу PostgreSQL вы окажетесь в SQL консоли. Вы можете выполнить следующую SQL команду в консоли psql для настройки пароля пользователя postgres:
ALTER USER postgres with encrypted password 'your_password';
После настройки пароля, измените файл /etc/postgresql/8.4/main/pg_hba.conf на использование MD5 аутентификации для пользователя postgres:
local all postgres md5
Под конец вам потребуется перезапустить сервис PostgreSQL для применения новых настроек. Из терминала выполните следующее для перезапуска PostgreSQL:
sudo /etc/init.d/postgresql-8.4 restart
Настройка выше в любом случае неполная. Пожалуйста обратитесь к руководству PostgreSQL Administrator’s Guide для настройки других параметров.
Ссылки
1. Как упоминалось выше, Administrator’s Guide — великолепный ресурс. Руководство также доступно из пакета postgresql-doc-8.4. Выполните следующую команду в терминале для установки пакета:
sudo apt-get install postgresql-doc-8.4
Чтобы увидеть руководство, введите file:///usr/share/doc/postgresql-doc-8.4/html/index.html в адресную строку вашего браузера.
2. Для общей информации по SQL смотрите Using SQL Special Edition от Rafe Colburn.
3. Также смотрите страницу PostgreSQL Ubuntu Wiki для дополнительной информации.
- Сайт
- Об Ubuntu
- Скачать Ubuntu
- Семейство Ubuntu
- Новости
- Форум
- Помощь
- Правила
- Документация
- Пользовательская документация
- Официальная документация
- Семейство Ubuntu
- Материалы для загрузки
- Совместимость с оборудованием
- RSS лента
- Сообщество
- Наши проекты
- Местные сообщества
- Перевод Ubuntu
- Тестирование
- RSS лента
© 2018 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.
Postgresql conf где находится linux
Kaspersky Scan Engine GUI требует установленной СУБД PostgreSQL 10.7 или более поздней версии. Приведенная ниже процедура описывает установку и настройку PostgreSQL 10.7. Для более поздней версии СУБД процедура может отличаться от данной.
Чтобы установить и настроить PostgreSQL:
- Загрузите и установите PostgreSQL. Вы можете установить PostgreSQL одним из следующих способов:
- Установите пакет, загруженный с веб-сайта PostgreSQL. Зайдите на сайт https://www.postgresql.org/download/, чтобы ознакомиться со списком поддерживаемых операционных систем и инструкциями по установке для каждой из них.
- Установите PostgreSQL из исходного кода. Зайдите на сайт https://www.postgresql.org/docs/10/installation.html для получения инструкций по установке.
- Откройте конфигурационный файл postgresql.conf . Расположение этого файла зависит от используемой операционной системы:
- В дистрибутивах Linux, основанных на Debian, файл postgresql.conf находится в директории /etc/postgresql/10/main/ .
- В дистрибутивах Linux, основанных на Red Hat, файл postgresql.conf находится в директории /var/lib/pgsql/data/ .
Если вы используете иную операционную систему, расположение файла postgresql.conf может быть другим.
- Найдите следующую строку в файле pg_hba.conf : host all all 127.0.0.1/32 peer
- Отредактируйте эту строку следующим образом: host all all 127.0.0.1/32 md5
Если файл конфигурации pg_hba.conf не содержит строку host all all 127.0.0.1/32 peer , вам необходимо изменить строку host all all 127.0.0.1/32 ident .
| host all all %IP%/32 md5 |
- Из командной строки смените правильного пользователя на пользователя postgres : su postgres
- Из-под учетной записи postgres запустите утилиту psql, выполнив следующую команду в командной строке: psql
- В psql измените пароль пользователя postgres с помощью следующей команды: alter user postgres with password ‘%PASSWORD%’; Здесь %PASSWORD% – это новый пароль пользователя postgres .
- Закройте утилиту psql, выполнив следующую команду в psql: \q
Теперь вы можете установить Kaspersky Scan Engine GUI.
Чтобы установить Kaspersky Scan Engine GUI, вам нужен пользователь PostgreSQL с правами на создание новых баз данных и пользователей. Для этого вы можете использовать пользователя postgres или создать нового.
После установки PostgreSQL и задания пароля для пользователя postgres вы можете перейти к действиям, описанным в разделе Автоматическая установка (Linux) или Ручная установка (Linux).
Все данные хранятся в базе данных kavebase. Kaspersky Scan Engine не использует другие базы данных.
PostgreSQL (Русский)
Состояние перевода: На этой странице представлен перевод статьи PostgreSQL. Дата последней синхронизации: 21 ноября 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
PostgreSQL — это поддерживаемая сообществом система управления базами данных с открытым исходным кодом.
Установка
Важно: Смотрите раздел #Обновление PostgreSQL для выполнения обязательных шагов перед установкой обновлений пакета PostgreSQL.
Установите пакет postgresql . Он также создаст системного пользователя postgres.
Для переключения в пользователя postgres можно использовать программу для повышения привилегий.
Примечание: Команды, которые нужно запускать от имени пользователя postgres, в данной статье обозначены префиксом [postgres]$ .
Для переключения в пользователя postgres можно использовать одну из следующих команд:
-
Если у вас есть sudo и ваш пользователь прописан в sudoers:
$ sudo -iu postgres
$ su # su -l postgres
Смотрите также документацию sudo(8) или su(1) .
Начальная настройка
В первую очередь необходимо инициализировать кластер баз данных:
[postgres]$ initdb -D /var/lib/postgres/data
Где опция -D указывает на стандартное расположение данных кластера (если вы хотите использовать другой каталог, смотрите раздел #Изменение стандартного каталога данных). initdb принимает дополнительные аргументы:
- По умолчанию локаль и кодировка для кластера баз данных наследуются из вашего текущего окружения (используется значение $LANG). Если вас это не устраивает, вы можете прописать нужные параметры вручную с помощью опций —locale=локаль (где локаль должна быть одной из доступных системных локалей) и —encoding=кодировка для выбора кодировки (должна соответствовать выбранной локали). (После настройки базы данных вы сможете посмотреть используемые значения командой [postgres]$ psql -l .)
- Если каталог с данными расположен на файловой системе без контроля целостности данных, вы можете включить встроенный в PostgreSQL подсчёт контрольных сумм для повышения гарантий целостности — для этого добавьте аргумент —data-checksums . Дополнительная информация описана в разделе #Включение подсчёта контрольных сумм. (После настройки базы данных вы сможете посмотреть. включена ли эта функция, командой [postgres]$ psql -c «SHOW data_checksums» .)
- Другие доступные опции можно посмотреть в initdb —help или официальной документации.
Пример для русской локали:
[postgres]$ initdb --locale=ru_RU.UTF-8 --encoding=UTF8 -D /var/lib/postgres/data --data-checksums
После инициализации на экране появится много строчек, некоторых из которых оканчиваются на . ок :
Файлы, относящиеся к этой СУБД, будут принадлежать пользователю "postgres". От его имени также будет запускаться процесс сервера. Кластер баз данных будет инициализирован с локалью "ru_RU.UTF-8". Кодировка БД по умолчанию, выбранная в соответствии с настройками: "UTF8". Выбрана конфигурация текстового поиска по умолчанию "russian". Контроль целостности страниц данных отключён. исправление прав для существующего каталога /var/lib/postgres/data. ок создание подкаталогов. ок выбирается реализация динамической разделяемой памяти. posix выбирается значение max_connections по умолчанию. 100 выбирается значение shared_buffers по умолчанию. 128MB выбирается часовой пояс по умолчанию. Europe/Moscow создание конфигурационных файлов. ок выполняется подготовительный скрипт. ок выполняется заключительная инициализация. ок сохранение данных на диске. ок initdb: предупреждение: включение метода аутентификации "trust" для локальных подключений Другой метод можно выбрать, отредактировав pg_hba.conf или используя ключи -A, --auth-local или --auth-host при следующем выполнении initdb. Готово. Теперь вы можете запустить сервер баз данных: pg_ctl -D /var/lib/postgres/data -l файл_журнала start
Если вы видите подобное, значит инициализация прошла успешно. Можно вернуться в обычного пользователя, выполнив команду exit в сеансе пользователя postgres.
Примечание: Подробнее об этом предупреждении читайте в разделе #Ограничение доступа к суперпользователю по умолчанию.
Совет: Если вы хотите использовать путь отличный от /var/lib/postgres , нужно отредактировать файл службы systemd. Если вы помещаете его в /home , не забудьте отключить ProtectHome .
- Если база данных располагается на файловой системе Btrfs, стоит отключить копирование при записи для каталога перед созданием любых баз данных.
- Если база данных располагается на файловой системе ZFS, прочтите ZFS#Databases перед созданием любых баз данных.
Наконец, запустите и включите службу postgresql.service .
Создание первой базы данных
Совет: Если имя роли/пользователя совпадает с именем вашего пользователя в Linux, вы сможете получить доступ к оболочке PostgreSQL без явного указания имени пользователя (что весьма удобно).
Становимся пользователем postgres. Добавляем нового пользователя базы данных с помощью команды createuser:
[postgres]$ createuser --interactive
Создаём новую базу данных от имени пользователя, имеющего доступ на чтение-запись, с помощью команды createdb (выполните эту команду в оболочке вашего обычного пользователя, если имя будущего владельца базы данных совпадает с вашим именем пользователя в Linux, в ином случае добавьте опцию -O имя-пользователя )
$ createdb имяМоейБазы
Совет: Если вы не выдали разрешение на создание баз данных вашему свежесозданному пользователю, добавьте опцию -U postgres к этой команде.
Знакомство с PostgreSQL
Доступ к оболочке базы данных
Становимся postgres пользователем. Запускаем основную оболочку базы данных psql, в которой мы сможем создавать, удалять базы данных/таблицы, задавать права и запускать команды SQL. Используйте опцию -d , чтобы указать название базы данных, которую вы создали (если опцию не указать, то psql попытается подключиться к базе, имя которой совпадает с именем пользователя).
[postgres]$ psql -d имяМоейБазы
Некоторые полезные команды:
=> \help
Подключение к определённой базе данных:
Список всех пользователей и их уровни доступа:
Краткая информация о всех таблицах в текущей базе данных:
Выход из оболочки psql :
=> \q или CTRL+d
Есть, конечно, много других мета-команд, но именно эти должны помочь вам начать работу. Для просмотра всех мета-команд введите:
Дополнительные настройки
Файл настроек сервера баз данных PostgreSQL — postgresql.conf . Этот файл находится в папке данных сервера, обычно /var/lib/postgres/data . В этой же папке находятся основные файлы настроек включая и pg_hba.conf , который определяет параметры аутентификации, как для локальных пользователей, так и для пользователей с других хостов.
Примечание: По умолчанию эта папка не доступна даже для просмотра (или поиска) от лица обычного пользователя.
Ограничение доступа к суперпользователю по умолчанию
По умолчанию pg_hba.conf разрешает подключение любого локального пользователя к любому пользователю базы данных, в том числе суперпользователю. Скорее всего это не то, что вам нужно, поэтому, чтобы разрешить подключение только пользователю postgres, измените эту строку:
/var/lib/postgres/data/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust
/var/lib/postgres/data/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all postgres peer
Можно добавить дополнительные строки в зависимости от ваших потребностей.
Требование пароля при входе
Измените /var/lib/postgres/data/pg_hba.conf , прописав метод аутентификации для каждого пользователя (или «all» для всех пользователей) на scram-sha-256 (предпочтительно) или md5 (менее безопасно; по возможности стоит его избегать):
/var/lib/postgres/data/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all пользователь scram-sha-256
Если вы выбрали scram-sha-256 , также нужно изменить /var/lib/postgres/data/postgresql.conf :
/var/lib/postgres/data/postgresql.conf
password_encryption = scram-sha-256
Перезапустите службу postgresql.service и заново пропишите пароли для пользователей с помощью SQL-запроса ALTER USER пользователь WITH ENCRYPTED PASSWORD ‘пароль‘; .
Доступ только через Unix-сокет
В разделе «connections and authentication» пропишите:
/var/lib/postgres/data/postgresql.conf
listen_addresses = ''
Это полностью отключит доступ через сеть. Не забудьте перезапустить службу postgresql.service для применения изменений.
Доступ с удалённых хостов
В разделе «connections and authentication» раскомментируйте или исправьте строку listen_addresses по вашему желанию, например:
/var/lib/postgres/data/postgresql.conf
listen_addresses = 'localhost,мой_локальный_ip'
Можно использовать ‘*’ для прослушивания всех доступных сетевых интерфейсов.
Примечание: PostgreSQL по умолчанию использует TCP-порт 5432 для удалённого доступа. Убедитесь, что этот порт открыт в вашем межсетевом экране и может принимать входящие соединения. Изменить порт можно в этом же файле настроек, под строкой listen_addresses .
Затем измените настройки аутентификации:
/var/lib/postgres/data/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD # IPv4 local connections: host all all ip_адрес/32 md5
где ip_адрес — IP-адрес удалённого клиента.
Смотрите также документацию по pg_hba.conf.
Примечание: Ни отправка простого пароля, ни отправка md5-хэша (использованный в приведённом выше примере) через интернет не являются безопасными, если это не выполняется через защищенное SSL-соединение. Смотрите Secure TCP/IP Connections with SSL, чтобы узнать, как настроить PostgreSQL с использованием SSL.
Перезапустите службу postgresql.service для применения изменений.
В случае проблем посмотрите журнал сервера:
# journalctl -u postgresql.service
Настройка аутентификации через PAM
PostgreSQL предлагает несколько методов аутентификации. Если вы хотите разрешить пользователям аутентифицироваться с их системным паролем, необходимы дополнительные шаги. Сначала вам нужно включить PAM для соединения.
Например, та же конфигурация, что и выше, но с включенным PAM:
/var/lib/postgres/data/pg_hba.conf
# IPv4 local connections: host all all ip_адрес/32 pam
Однако сервер PostgreSQL работает без прав root и не сможет получить доступ к файлу /etc/shadow . Мы можем обойти это, разрешив группе postgres доступ к этому файлу:
# setfacl -m g:postgres:r /etc/shadow
Изменение стандартного каталога данных
По умолчанию PostgreSQL настроен на использование каталога /var/lib/postgres/data для хранения всех баз данных. Для его изменения выполните следующие шаги:
Создайте новый каталог и сделайте пользователя postgres его владельцем:
# mkdir -p /путь/к/pgroot/data # chown -R postgres:postgres /путь/к/pgroot
Войдите в пользователя postgres и выполните инициализацию кластера:
[postgres]$ initdb -D /путь/к/pgroot/data
Отредактируйте службу postgresql.service , создав drop-in файл и переопределив настройки Environment и PIDFile . Например:
/etc/systemd/system/postgresql.service.d/PGROOT.conf
[Service] Environment=PGROOT=/путь/к/pgroot PIDFile=/путь/к/pgroot/data/postmaster.pid
Если вы хотите использовать каталог в /home , добавьте ещё одну строку:
ProtectHome=false
Изменение кодировки новых баз данных на UTF-8
Примечание: Если вы выполнили initdb с опцией —encoding=UTF8 или с использованием локали UTF-8, выполнять эти шаги не нужно.
Когда создаётся новая база данных (например, командой createdb blog ), PostgreSQL просто копирует шаблон базы данных. Есть два стандартных шаблона: template0 — ванильный, и template1 , который используется по умолчанию и предназначен для редактирования администратором. Один из вариантов изменения кодировки новой базы данных — изменить шаблон template1 . Для этого зайдите в оболочку PostgreSQL ( psql ) и выполните следующее:
Сперва нужно удалить template1 . Шаблоны нельзя удалять, так что сперва нужно преобразовать его в обычную базу данных:
UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
Теперь можно удалить:
DROP DATABASE template1;
Затем создайте новую базу данных с новой кодировкой по умолчанию, в качестве шаблона используя template0 :
CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';
Теперь снова сделайте template1 шаблоном:
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';
По желанию, если вы не хотите, чтобы кто-либо подключался к этому шаблону, присвойте параметру datallowconn значение FALSE :
UPDATE pg_database SET datallowconn = FALSE WHERE datname = 'template1';
Примечание: Этот шаг может привести к проблемам при обновлении через pg_upgrade .
Теперь вы можете создать базу данных, используя стандартные команды в терминале:
[postgres]$ createdb blog
Если снова войти в psql и проверить базу данных, вы должны увидеть правильную кодировку новой базы данных:
List of databases Name | Owner | Encoding | Collation | Ctype | Access privileges -----------+----------+-----------+-----------+-------+---------------------- blog | postgres | UTF8 | C | C | postgres | postgres | SQL_ASCII | C | C | template0 | postgres | SQL_ASCII | C | C | =c/postgres : postgres=CTc/postgres template1 | postgres | UTF8 | C | C |
Включение подсчёта контрольных сумм
Если файлы вашей базы данных находятся на файловой системе, которая не использует контрольные суммы, то данные в ней могут незаметно повреждаться из-за битфлипов и аппаратных проблем. Хотя такие случаи редки, желательно включить встроенный в PostgreSQL подсчёт контрольных сумм, если вы заботитесь о целостности данных. Эта функция должна быть включена на уровне кластера, а не для отдельных баз данных или таблиц.
- Есть небольшое влияние на производительность, особенно при чтении больших массивов данных с диска. На операции в памяти это не влияет.
- PostgreSQL не может исправить повреждённые данные — он только прервёт транзакции, читающие с повреждённых страниц, чтобы предотвратить дальнейшее повреждение или получение некорректных результатов выполнения.
- Контрольные суммы охватывают только страницы данных (строк) на диске, но не метаданные или управляющие структуры. Страницы в памяти не проверяются. Хранилища с коррекцией ошибок и память с ECC по-прежнему полезны.
- Чтобы включить подсчёт контрольных сумм при создании кластера, добавьте аргумент —data-checksums к команде initdb .
- Чтобы проверить, включен ли подсчёт контрольных сумм, выполните [postgres]$ psql -c «SHOW data_checksums» (выведется off или on ).
- Чтобы включить подсчёт контрольных сумм на существующем кластере:
- Остановите службу postgresql.service .
- Выполните команду [postgres]$ pg_checksums —pgdata /var/lib/postgres/data —enable (или —disable , если вы хотите наоборот выключить эту функцию). Включение подсчёта контрольных сумм приведёт к перезаписи всех страниц базы данных, что займет некоторое время в больших базах данных.
- Запустите службу postgresql.service .
Графические инструменты
- phpPgAdmin — Веб-интерфейс для администрирования PostgreSQL.
- pgAdmin — Комплексный графический интерфейс для управления PostgreSQL.
- pgModeler — Инструмент для моделирования баз данных PostgreSQL.
Список инструментов, поддерживающих несколько разных СУБД, можно посмотреть в статье List of applications/Documents#Database tools.
Обновление PostgreSQL
This article or section needs expansion.
Reason: How to upgrade when using third party extensions? (Discuss in Talk:PostgreSQL#pg_upgrade problem if extensions (like postgis) are used)
Для обновления до новой мажорной версии PostgreSQL (например, с версии 13.x на версию 14.y) необходима специальная процедура.
Примечание: Следуйте официальной документации по обновлению.
Важно: Приведённые ниже инструкции потенциально могут привести к потере данных. Не запускайте эти команды вслепую без понимания того, что они делают. Сделайте резервную копию перед началом.
Посмотреть текущую версию базы данных можно так:
# cat /var/lib/postgres/data/PG_VERSION
Чтобы случайно не обновиться до несовместимой версии, рекомендуется запретить обновления пакетов PostgreSQL.
Минорные обновления вполне безопасны. Однако если вы случайно обновитесь до другой мажорной версии, то не сможете получить доступ к данным. Всегда проверяйте домашнюю страницу PostgreSQL, чтобы знать, какие шаги требуются для каждого обновления. Чтобы узнать, почему это так, смотрите политику управления версиями.
Есть два основных способа обновить базу данных PostgreSQL. Подробности читайте в официальной документации.
pg_upgrade
Утилита pg_upgrade пытается скопировать как можно больше совместимых данных между кластерами и обновить всё остальное. Как правило, это самый быстрый метод обновления большинства экземпляров, хотя он требует доступа к бинарным файлам исходной и целевой версий PostgreSQL. Прочтите справочную страницу pg_upgrade(1) , чтобы понять, какие действия он выполняет. Для нетривиальных экземпляров (например, с потоковой репликацией или трансляцией журналов) сперва ознакомьтесь с официальной документацией.
Для тех, кто хочет использовать pg_upgrade , доступен пакет postgresql-old-upgrade , который всегда отстаёт на одну мажорную версию от основного пакета PostgreSQL. Его можно установить параллельно с новой версией PostgreSQL. Для обновления более старых версий PostgreSQL доступны пакеты AUR, например postgresql-12-upgrade AUR . (Нужно использовать команду pg_upgrade из той версии PostgreSQL, на которую вы хотите обновиться.)
Обратите внимание, что каталог кластера баз данных не меняется от версии к версии, поэтому перед запуском pg_upgrade необходимо переименовать старый каталог данных и выполнить миграцию в новый каталог. Новый кластер баз данных необходимо инициализировать с теми же параметрами, что и старый.
Когда вы будете готовы к обновлению, выполните следующие шаги:
- Пока старая база данных всё ещё доступна, соберите аргументы для команды initdb , которые использовались при создании базы. Команды для просмотра текущих настроек кластера описаны в разделе #Начальная настройка.
- Остановите службу postgresql.service . (Проверьте статус юнита, чтобы убедиться, что PostgreSQL завершился корректно, иначе pg_upgrade не сможет отработать корректно.)
- Обновите пакеты postgresql , postgresql-libs и postgresql-old-upgrade .
- Переименуйте каталог со старым кластером и создайте каталог для нового кластера и временный каталог:
# mv /var/lib/postgres/data /var/lib/postgres/olddata # mkdir /var/lib/postgres/data /var/lib/postgres/tmp # chown postgres:postgres /var/lib/postgres/data /var/lib/postgres/tmp [postgres]$ cd /var/lib/postgres/tmp
[postgres]$ initdb -D /var/lib/postgres/data --locale=ru_RU.UTF-8 --encoding=UTF8 --data-checksums
[postgres]$ pg_upgrade -b /opt/pgsql-PG_VERSION/bin -B /usr/bin -d /var/lib/postgres/olddata -D /var/lib/postgres/data
Примечание: Не забудьте обновить файлы конфигурации (например, pg_hba.conf и postgresql.conf ) для соответствия старому кластеру.
Примечание: Если pg_upgrade завершается с ошибкой The source cluster was not shut down cleanly , значит PostgreSQL не был остановлен перед запуском обновления. Остановите его, затем перезапустите кластер со старыми бинарными файлами, чтобы восстановить старые файлы кластера:
[postgres]$ /opt/pgsql-PG_VERSION/bin/pg_ctl start -D /var/lib/postgres/olddata && /opt/pgsql-PG_VERSION/bin/pg_ctl stop -D /var/lib/postgres/olddata
После этого можно снова выполнить pg_upgrade . Если обновиться всё равно не получается, остановите все процессы СУБД, откатитесь на более старую версию PostgreSQL, восстановите предыдущие данные кластера из резервных копий и перезапустите процесс обновления.
Выгрузка и загрузка вручную
Ещё можно сделать что-то вроде такого (после обновления и установки postgresql-old-upgrade ):
- В примере показано обновление с PostgreSQL 13; посмотрите в /opt/ установленную у вас версию postgresql-old-upgrade и исправьте команды по необходимости.
- Если вы меняли файл pg_hba.conf , вам может понадобиться временно разрешить полный доступ к старому кластеру с локальной системы. После обновления не забудьте прописать нужные вам настройки в новом кластере и перезапустить службу postgresql.service .
# mv /var/lib/postgres/data /var/lib/postgres/olddata # mkdir /var/lib/postgres/data # chown postgres:postgres /var/lib/postgres/data [postgres]$ initdb -D /var/lib/postgres/data [postgres]$ /opt/pgsql-13/bin/pg_ctl -D /var/lib/postgres/olddata/ start # cp /usr/lib/postgresql/postgis-3.so /opt/pgsql-13/lib/ # Только если установлен postgis [postgres]$ pg_dumpall -h /tmp -f /tmp/old_backup.sql [postgres]$ /opt/pgsql-13/bin/pg_ctl -D /var/lib/postgres/olddata/ stop
[postgres]$ psql -f /tmp/old_backup.sql postgres
Решение проблем
Ускорение мелких транзакций
Если вы используете PostgreSQL на своей локальной машине для разработки и он медленный, то можете попробовать отключить synchronous_commit в конфигурации. Однако, не забывайте про его особенности.
/var/lib/postgres/data/postgresql.conf
synchronous_commit = off
Запретить запись на диск во время бездействия
PostgreSQL периодически обновляет свою статистику, лежащую в файле. По умолчанию этот файл находится на диске, что не даёт отдыхать жёсткому диску (и изнашивает его), заставляя его шуметь. Однако можно легко и безопасно переместить статистику в ОЗУ с помощью такой настройки:
/var/lib/postgres/data/postgresql.conf
stats_temp_directory = '/run/postgresql'
Проблемы с pgAdmin 4 после обновления до PostgreSQL 12
Если вы видите ошибки вроде string indices must be integers при навигации по дереву слева или column rel.relhasoids does not exist при просмотре данных, удалите сервер из списка соединений в pgAdmin и добавьте его заново. Без этого pgAdmin продолжает считать его сервером PostgreSQL 11, что и приводит к таким ошибкам.
PostgreSQL не может запуститься после обновления пакета при использовании расширений
Причина скорее всего в том, что существующий пакет не скомпилирован для новой версии (а она может быть актуальной), решение — пересобрать пакет вручную или дождаться обновления пакета расширения.
Не удаётся запустить PostgreSQL со старой версией базы данных при обновлении до новой версии с расширениями
Это происходит потому, что старая версия postgres из пакета postgresql-old-upgrade не имеет необходимых расширений (.so файлов) в своём каталоге lib. Предлагаемое здесь решение грязное и может вызвать много проблем, поэтому сохраните резервную копию базы данных на всякий случай. В целом, скопируйте необходимые .so файлы расширений из /usr/lib/postgresql/ в /opt/pgsql-XX/lib/ (не забудьте заменить XX на мажорную версию пакета postgresql-old-upgrade ).
Например, для timescaledb:
# cp /usr/lib/postgresql/timescaledb*.so /opt/pgsql-13/lib/
Важно: Хотя копирования .so файлов обычно достаточно, может понадобиться скопировать больше файлов в правильные расположения в /opt/pgsql-XX/ .
Чтобы узнать точные файлы для копирования, посмотрите содержимое пакета расширения с помощью команды:
$ pacman -Ql имя_пакета
Важно: Это очень грязное решение, которое может привести к потере данных в базе, поэтому создайте резервную копию перед выполнением этих действий.
Retrieved from «https://wiki.archlinux.org/index.php?title=PostgreSQL_(Русский)&oldid=793745»
- Pages with broken package links
- Pages or sections flagged with Template:Expansion