Когда-то я рассказал про установку Ubuntu на VirtualBox. Настала пора рассказать про установку PostgreSQL из исходных кодов.
Сразу приступаем (считаю, что виртуальная или реальная машина с Ubuntu у вас уже имеется).
Что нас ждет:
- Информация о стенде
- Настройка операционной системы
- Получение исходного кода PostgreSQL
- До установки PostgreSQL
- Установка PostgreSQL
- Настройки для работы с PostgreSQL
- Установка расширений
- Сохранение переменных окружения
- Итоги
Уфф, сам удивился, что получилось очень много. Погнали!
1. ИНФОРМАЦИЯ О СТЕНДЕ
Для чистоты эксперимента еще покажу, какая у меня ВМка получилась по характеристикам: кратко — основной пользователь test, имя компьютера testPC, xUbuntu 20.04.01, 2 Гб ОЗУ, 1 ядро процессора, 20 ГБ жесткий диск SSD.
test@testPC:~$ lscpu | head -n 17 Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian Address sizes: 39 bits physical, 48 bits virtual CPU(s): 1 On-line CPU(s) list: 0 Thread(s) per core: 1 Core(s) per socket: 1 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 142 Model name: Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz Stepping: 12 CPU MHz: 1799.959 BogoMIPS: 3599.91 test@testPC:~$ free -h total used free shared buff/cache available Mem: 1,9Gi 1,1Gi 188Mi 32Mi 674Mi 683Mi Swap: 923Mi 0B 923Mi test@testPC:~$ sudo fdisk -l | grep '^/dev' [sudo] password for test: /dev/sda1 * 2048 1050623 1048576 512M b W95 FAT32 /dev/sda2 1052670 41940991 40888322 19,5G 5 Extended /dev/sda5 1052672 41940991 40888320 19,5G 83 Linux test@testPC:~$ sudo lshw -class display *-display description: VGA compatible controller product: VirtualBox Graphics Adapter vendor: InnoTek Systemberatung GmbH physical id: 2 bus info: pci@0000:00:02.0 version: 00 width: 32 bits clock: 33MHz capabilities: vga_controller rom configuration: driver=vboxvideo latency=0 resources: irq:18 memory:e0000000-e0ffffff memory:c0000-dffff test@testPC:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.1 LTS Release: 20.04 Codename: focal
Хм, команды (почерпнутые из интернета) на моём стенде говорят, что мой диск — HDD. Странно, но разбираться сейчас не буду. Он точно SSD 🙂
2. НАСТРОЙКА ОПЕРАЦИОННОЙ СИСТЕМЫ
После установки ОС нужно выполнить еще несколько шагов.
Сейчас образы (как минимум Ubuntu, но, наверное, и других дистрибутивов) стараются сделать поменьше размером и не включают многие нужные пакеты, особенно для компиляции из исходных кодов (так, отсутствуют GCC и MAKE, которые нам нужны).
Давайте проверим:
test@testPC:~$ gcc --version Command 'gcc' not found, but can be installed with: sudo apt install gcc test@testPC:~$ make --version Command 'make' not found, but can be installed with: sudo apt install make # version 4.2.1-1.2, or sudo apt install make-guile # version 4.2.1-1.2
Чтобы не устанавливать все нужные пакеты по отдельности, поставим один пакет-справочник build-essential, все нужное для компиляции подтянется при его установке (G++, GCC, dpkg-dev, make) и другие пакеты:
sudo apt update sudo apt install build-essential
После завершения установки, снова проверим версии:
test@testPC:~$ gcc --version gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. test@testPC:~$ make --version GNU Make 4.2.1 Built for x86_64-pc-linux-gnu Copyright (C) 1988-2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
Теперь всё в порядке и можно продолжать.
3. ПОЛУЧЕНИЕ ИСХОДНОГО КОДА POSTGRESQL
Устанавливать будем из исходного кода, а его нужно где-то взять. Для этого воспользуемся официальным репозитарием на GitHub`e (сервисе онлайн-хранения кода с контролем версий): https://github.com/postgres/postgres/
Можно прямо с этой страницы код нужной ветки скачать, но мы поступим по другому:
Сначала установим специальную утилиту GIT, с помощью которой можно отслеживать изменения в онлайн-репозитарии на GitHub`e, скачивать-закачивать изменения. Проверим, может она уже есть (так и называется git):
test@testPC:~$ git --version Command 'git' not found, but can be installed with: sudo apt install git
Отсутствует. Поэтому установим, как и рекомендуют:
sudo apt install git
Теперь можно скачивать с помощью этой утилиты исходный код из официального репозитария следующей командой:
git clone https://github.com/postgres/postgres
Клонируем (копируем себе) данный репозитарий. Клонирование занимает некоторое время (минут пять), поэтому, пока оно идет — можете быстро посмотреть полезный сайт с информацией о GIT`e: https://git-scm.com/book/ru/v2. Там много интересного материала по работе с GIT и GitHub.
test@testPC:~$ git clone https://github.com/postgres/postgres Cloning into 'postgres'... remote: Enumerating objects: 25, done. remote: Counting objects: 100% (25/25), done. remote: Compressing objects: 100% (25/25), done. remote: Total 811101 (delta 0), reused 1 (delta 0), pack-reused 811076 Receiving objects: 100% (811101/811101), 504.15 MiB | 2.96 MiB/s, done. Resolving deltas: 100% (665498/665498), done. Updating files: 100% (5794/5794), done.
Была создана директория postgres, перейдем туда:
cd postgres
В ней лежит много разных директорий (и файлов), о которых сейчас знать не обязательно:
test@testPC:~/postgres$ ls aclocal.m4 configure contrib doc HISTORY README src config configure.ac COPYRIGHT GNUmakefile.in Makefile README.git
Нужно проверить, в какой ветке мы находимся. Для этого используется команда:
test@testPC:~/postgres$ git status On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean
Мы в ветке по умолчанию (master), но устанавливать будем последнюю на данный момент стабильную версию — 13-ю. Посмотреть все ветки в репозитарии можно либо командой:
git branch -a
test@testPC:~/postgres$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/REL2_0B remotes/origin/REL6_4 remotes/origin/REL6_5_PATCHES remotes/origin/REL7_0_PATCHES remotes/origin/REL7_1_STABLE remotes/origin/REL7_2_STABLE remotes/origin/REL7_3_STABLE remotes/origin/REL7_4_STABLE remotes/origin/REL8_0_STABLE remotes/origin/REL8_1_STABLE remotes/origin/REL8_2_STABLE remotes/origin/REL8_3_STABLE remotes/origin/REL8_4_STABLE remotes/origin/REL8_5_ALPHA1_BRANCH remotes/origin/REL8_5_ALPHA2_BRANCH remotes/origin/REL8_5_ALPHA3_BRANCH remotes/origin/REL9_0_ALPHA4_BRANCH remotes/origin/REL9_0_ALPHA5_BRANCH remotes/origin/REL9_0_STABLE remotes/origin/REL9_1_STABLE remotes/origin/REL9_2_STABLE remotes/origin/REL9_3_STABLE remotes/origin/REL9_4_STABLE remotes/origin/REL9_5_STABLE remotes/origin/REL9_6_STABLE remotes/origin/REL_10_STABLE remotes/origin/REL_11_STABLE remotes/origin/REL_12_STABLE remotes/origin/REL_13_STABLE remotes/origin/Release_1_0_3 remotes/origin/WIN32_DEV remotes/origin/ecpg_big_bison remotes/origin/master
большой список выводится. Либо можно и на веб-странице репозитария в GitHub`e посмотреть:
Теперь нужно переключиться на нужную ветку. Для этого существует команда git checkout, которой передается название ветки:
test@testPC:~/postgres$ git checkout REL_13_STABLE Branch 'REL_13_STABLE' set up to track remote branch 'REL_13_STABLE' from 'origin'. Switched to a new branch 'REL_13_STABLE' test@testPC:~/postgres$ git status On branch REL_13_STABLE Your branch is up to date with 'origin/REL_13_STABLE'. nothing to commit, working tree clean
Теперь всё так, как нам нужно — активна тринадцатая ветка, именно эту версию и будем устанавливать.
4. ДО УСТАНОВКИ POSTGRESQL
Рекомендую почитать страницу документации с требованиями при установке из исходного кода.
На этой странице нужно обратить внимание на следующие несколько моментов:
По умолчанию при сборке используется библиотека GNU Readline. Она позволяет запоминать все вводимые команды в psql (SQL-интерпретатор командной строки для PostgreSQL) и затем, пользуясь клавишами-стрелками, возвращаться к ним и редактировать их.
Если вы не желаете использовать эту возможность, вы должны добавить указание —without-readline для configure.
Если не указать —wihout-readline, при выполнении команды ./configure появится следующая ошибка:
... configure: error: readline library not found If you have readline already installed, see config.log for details on the failure. It is possible the compiler isn't looking in the proper directory. Use --without-readline to disable readline support.
Если не устанавливать эту возможность, тогда в psql`е будет не очень удобно работать. Например, выполняем отображение версии сервера, затем хотим повторить эту команду — если нажать на стрелку вверх (как это обычно делаем в терминале) появляются вот такие цифробуквы, которые нам ничем не помогут (^[[A):
postgres@testPC:~$ psql psql (12.5) Type "help" for help. postgres=# select version(); version ---------------------------------------------------------------------------------------------------- PostgreSQL 12.5 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1 ~20.04) 9.3.0, 64-bit (1 row) postgres=# ^[[A
В интернете рекомендуют ставить libreadline-dev.
Еще момент со страницы документации:
По умолчанию для сжатия данных используется библиотека zlib.
Если вы не хотите её использовать, вы должны передать configure указание —without-zlib.
А если не указать —wihout-zlib, при выполнении команды ./configure появится вот такая ошибка:
... configure: error: zlib library not found If you have zlib already installed, see config.log for details on the failure. It is possible the compiler isn't looking in the proper directory. Use --without-zlib to disable zlib support.
Если не устанавливать эту возможность, тогда не получиться заархивировать дамп базы данных (при использовании pg_dump). При выполнении данной команды с параметром установки сжатия данных (-Z 0..9) появится следующее сообщение:
postgres@testPC:/usr/local/pgsql/data$ pg_dump -d postgres -F c -Z 2 -f mydump pg_dump: warning: requested compression not available in this installation -- archive will be uncompressed
В интернете рекомендуют ставить zlib1g-dev.
И заключительный момент:
Если вы хотите скомпилировать код из дерева Git, а не из специального пакета исходного кода, либо вы хотите работать с этим кодом, вам также понадобятся следующие пакеты:
Flex и Bison потребуются для сборки из содержимого Git или если вы меняете собственно файлы определений анализа и разбора.
Flex — средством для генерации программ. которые распознают шаблоны в тексте.
Bison — является генератором парсеров, генерирует программу, которая анализирует структуру текстовых файлов.
Мы ставим именно из дерева Git, поэтому сначала нужно поставить еще и их.
Итого — нужно доставить следующие пакеты:
- libreadline-dev
- zlib1g-dev
- flex
- bison
следующим стандартным образом:
sudo apt install libreadline-dev sudo apt install zlib1g-dev sudo apt install flex sudo apt install bison
После завершения установки этих пакетов проверьте, чтобы вы находились в директории postgres, так как далее команды будем выполнять именно оттуда.
5. УСТАНОВКА POSTGRESQL
Процесс установки из исходного кода состоит из трех этапов:
- Конфигурирование — запуск команды ./configure. Эта команда ищет необходимые библиотеки и заголовочные файлы, осуществляет настройку особых параметров и подключается дополнительные библиотеки (описанные выше —without-параметры из этой области). В результате работы создается файлы Makefiles, содержащий всю необходимую информацию для сборки, его можно просмотреть в текстовом редакторе.
- Сборка (компиляция) — запуск команды make. Запускается компиляция программы из исходного кода. При работе используется Makefiles, в которых описаны все параметры сборки приложения. Результат работы — собранная программа в текущей директории.
- Установка — команда make install. Запускается непосредственная установка собранного приложения. Результат — работоспособная программа (если не было ошибок).
Пройдем эти шаги (в документации они тоже описаны):
Запускаем конфигурирование. Так как я установил и readline и gzip, я просто запускаю команду:
./configure
Выполнение этой команды у меня занимается около пятнадцати секунд. Последние пять строк вывода:
config.status: linking src/backend/port/tas/dummy.s to src/backend/port/tas.s config.status: linking src/backend/port/posix_sema.c to src/backend/port/pg_sema.c config.status: linking src/backend/port/sysv_shmem.c to src/backend/port/pg_shmem.c config.status: linking src/include/port/linux.h to src/include/pg_config_os.h config.status: linking src/makefiles/Makefile.linux to src/Makefile.port
Далее — сборка:
make
Опять же, если вы поставили и bizon, и flex — тогда ошибок не будет. Но, если этих программ не хватает, ошибки будут выглядеть следующим образом:
Не установлен bison:
ERROR: `bison' is missing on your system. It is needed to create the file `gram.c'. You can either get bison from a GNU mirror site or download an official distribution of PostgreSQL, which contains pre-packaged bison output. *** make[2]: *** [../../../src/Makefile.global:750: gram.c] Error 1 make[2]: Leaving directory '/home/test/postgres/src/backend/parser' make[1]: *** [Makefile:137: parser/gram.h] Error 2 make[1]: Leaving directory '/home/test/postgres/src/backend' make: *** [src/Makefile.global:388: submake-generated-headers] Error 2
Не установлен flex:
ERROR: `flex' is missing on your system. It is needed to create the file `bootscanner.c'. You can either get flex from a GNU mirror site or download an official distribution of PostgreSQL, which contains pre-packaged flex output. *** make[3]: *** [../../../src/Makefile.global:745: bootscanner.c] Error 1 make[3]: Leaving directory '/home/test/postgres/src/backend/bootstrap' make[2]: *** [common.mk:39: bootstrap-recursive] Error 2 make[2]: Leaving directory '/home/test/postgres/src/backend' make[1]: *** [Makefile:42: all-backend-recurse] Error 2 make[1]: Leaving directory '/home/test/postgres/src' make: *** [GNUmakefile:11: all-src-recurse] Error 2
Если произошли такие ошибки, можно откатиться к начальному состоянию и запустить конфигурирование и установку заново. Для этого используется команда:
make distclean
После нее снова нужно запускать ./configure с указанием необходимых параметров (если они есть). И потом — опять make.
Кстати, если вы хотите сохранить всё, что выводит команда make, её вывод можно отправить в файл следующим образом: make > make.txt
А если вы хотите собрать всё, что может быть собрано, включая документацию (страницы HTML и man) и дополнительные модули (contrib), выполните команду: Финальное сообщение будет следующим:
make world
PostgreSQL, contrib and documentation successfully made. Ready to install.
На моей виртуальной машине сборка шла около семи минут (плюс-минус минута). Если сборка завершилась успешно, вы увидите следующее сообщение:
All of PostgreSQL successfully made. Ready to install.
Далее можно запустить команду make check. С помощью этой команды можно протестировать собранный сервер до его установки с помощью регрессионных тестов. Регрессионные тесты — это комплект тестов, проверяющих, что PostgreSQL работает на вашем компьютере так, как задумано разработчиками. Давайте проверим:
make check ======================= All 201 tests passed. =======================
По видимому, всё хорошо (проверка длилась около минуты). Идем дальше.
Установка — запускаем команду:
sudo make install
И через пару секунд я получил сообщение:
PostgreSQL installation complete.
Ура! Установка PotsgreSQL 13-й версии успешно завершена!
Но пользоваться данной СУБД еще не получиться… Нужно произвести настройки (и в документации об этом говориться: Подготовка к работе и сопровождение сервера, ссылку даю на оглавление раздела).
6. НАСТРОЙКИ ДЛЯ РАБОТЫ С POSTGRESQL
Если кратко — нужно создать отдельного пользователя для PostgreSQL, инициализировать кластер баз данных, проверить работоспособность сервера, создать и сохранить переменные окружения и установить дополнительные модули (contrib).
А теперь — подробнее.
Не рекомендуется запускать сервер PostgreSQL от имени суперпользователя ОС. Поэтому — создадим для этого отдельного пользователя с помощью следующей команды:
test@testPC:~/postgres$ sudo adduser postgres Adding user `postgres' ... Adding new group `postgres' (1001) ... Adding new user `postgres' (1001) with group `postgres' ... Creating home directory `/home/postgres' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for postgres Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y
Нужно будет указать пароль и дополнительные параметры.
Далее нужно создать директорию, где PostgreSQL будет хранить файлы баз данных и дополнительную информацию. Выполним команду создания директории:
sudo mkdir /usr/local/pgsql/data
/usr/local/pgsql/data — каталог с данными, можно указать любой. Я использую именно эту директорию.
И теперь нужно поменять владельца этой директории, ведь PostgreSQL у нас работать будет под пользователем postgres:
sudo chown postgres /usr/local/pgsql/data/
После этого работаем от пользователя postgres. Переключиться на него можно с помощью следующей команды:
sudo su - postgres
Перед началом использования сервера, необходимо инициализировать кластер БД (подсказать PostgreSQL, что созданная выше директория будет являеться каталогом с данными сервера). Для этого используется утилита initdb.
При моих настройках, нужно перейти в директорию, где находятся исполняемые файлы PostgreSQL (можно руками поменять этот путь, но мы ничего не меняли и оставили значение по умолчанию):
cd /usr/local/pgsql/bin ls postgres@testPC:/usr/local/pgsql/bin$ ls clusterdb pg_archivecleanup pg_dump pg_rewind postmaster createdb pg_basebackup pg_dumpall pg_test_fsync psql createuser pgbench pg_isready pg_test_timing reindexdb dropdb pg_checksums pg_receivewal pg_upgrade vacuumdb dropuser pg_config pg_recvlogical pg_verifybackup ecpg pg_controldata pg_resetwal pg_waldump initdb pg_ctl pg_restore postgres
Все нужные нам команды — initdb, psql, pg_dump и другие.
Но запускать эти команды просто так нельзя (без доп.настроек). Нужно зайти в эту директорию и запускать через точку: ./initdb; ./psql
Чтобы было удобнее, необходимо настроить переменную окружения $PATH.
$PATH — это переменная окружения, используемая для указания оболочке, где искать исполняемые файлы.
Но — сначала убедимся, что (ну мало ли?) ничего не настроена. Попробуем выполнить команду инициализации кластера. В документации описаны ключи этой команды, самый главный здесь D — путь до директории с данными, которую создали на предыдущем шаге:
initdb -k -D /usr/local/pgsql/data/ postgres@testPC:/usr/local/pgsql/bin$ initdb -k -D /usr/local/pgsql/data/ initdb: command not found
Не настроено ничего. Но настроить довольно просто:
export PATH=/usr/local/pgsql/bin/:$PATH
Данной командой мы к переменной $PATH добавляем в начало путь до нашей директории с программами.
А теперь снова проверим команду инициализации кластера:
postgres@testPC:/usr/local/pgsql/bin$ initdb -k -D /usr/local/pgsql/data/ The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locales COLLATE: en_US.UTF-8 CTYPE: en_US.UTF-8 MESSAGES: en_US.UTF-8 MONETARY: ru_RU.UTF-8 NUMERIC: ru_RU.UTF-8 TIME: ru_RU.UTF-8 The default database encoding has accordingly been set to "UTF8". The default text search configuration will be set to "english". Data page checksums are enabled. fixing permissions on existing directory /usr/local/pgsql/data ... ok creating subdirectories ... ok selecting dynamic shared memory implementation ... posix selecting default max_connections ... 100 selecting default shared_buffers ... 128MB selecting default time zone ... Europe/Moscow creating configuration files ... ok running bootstrap script ... ok performing post-bootstrap initialization ... ok syncing data to disk ... ok initdb: warning: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb. Success. You can now start the database server using: pg_ctl -D /usr/local/pgsql/data/ -l logfile start
Всё отлично! Теперь можно запускать сервер (даже команду нам подсказали). Но я воспользуюсь самой минимальной записью этой команды:
postgres@testPC:/usr/local/pgsql/bin$ pg_ctl start pg_ctl: no database directory specified and environment variable PGDATA unset Try "pg_ctl --help" for more information.
Ой… Не заработало. Не сработала эта команда потому, что я важный ключ -D не указал (каталог с данными). Можно его руками прописать, в ключе. А можно настроить переменную окружения $PGDATA. Если она заполнена — то pg_ctl будет оттуда информацию забирать. Ну и наличие такой переменной — это удобно. Настроим следующим образом:
export PGDATA=/usr/local/pgsql/data/
И снова попробуем запустить сервер:
postgres@testPC:/usr/local/pgsql/bin$ pg_ctl start waiting for server to start....2020-11-15 00:22:43.215 MSK [44295] LOG: starting PostgreSQL 13.1 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit 2020-11-15 00:22:43.218 MSK [44295] LOG: listening on IPv4 address "127.0.0.1", port 5432 2020-11-15 00:22:43.224 MSK [44295] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432" 2020-11-15 00:22:43.230 MSK [44296] LOG: database system was shut down at 2020-11-15 00:12:50 MSK 2020-11-15 00:22:43.234 MSK [44295] LOG: database system is ready to accept connections done server started
Сервер запустился. Подключимся к серверу с помощью psql`a:
postgres@testPC:/usr/local/pgsql/bin$ psql psql (13.1) Type "help" for help. postgres=# select version(); version ------------------------------------------------------------------------------------------------------ PostgreSQL 13.1 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1 ~20.04) 9.3.0, 64-bit (1 row) postgres=#
Всё работает! Установлена версия PostgreSQL 13.1. Если стрелку вверх нажать в psql — будут подставляться предыдущие команды, удобно.
7. УСТАНОВКА РАСШИРЕНИЙ
Давайте еще попробуем проверить, какие расширения сейчас доступны:
postgres=# select * from pg_available_extensions order by name; name | default_version | installed_version | comment ---------+-----------------+-------------------+------------------------------ plpgsql | 1.0 | 1.0 | PL/pgSQL procedural language (1 row)
Всего одно расширение. Не густооооааа, так ведь расширения (лично я) и не ставил никакие!
Давайте вы уже сами всё поставите. Команды такие:
- Возвращаемся в суперпользователя ОС
- cd ~/postgres/contrib
- make
- sudo make install
А теперь вернемся в пользователя postgres:
sudo su - postgres
8. СОХРАНЕНИЕ ПЕРЕМЕННЫХ ОКРУЖЕНИЯ
И проверим доступные расширения. Запускаем psql:
postgres@testPC:~$ psql Command 'psql' not found, but can be installed with: apt install postgresql-client-common Please ask your administrator.
Ну что ж такое! Только что всё работало! Проверим ка мы переменную $PATH:
postgres@testPC:~$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Нет нашего адреса! Как так?
А вот так — когда мы же создавали переменную окружения, мы создали её для текущего сеанса пользователя. Закрыли терминал — переменная исчезла. Нужно её создать и сохранить. Я использую следующий способ — сохранение переменных в файле .bashrc (это файл с командами, которые выполняются при запуске оболочки bash).
Перейдите в домашнюю директорию пользователя postgres (для других пользователей можно сделать то же самое, так как .bashrc — это файл для конкретного пользователя) и проверьте, какие скрытые файлы там есть, точка в начале означает, что это скрытый файл:
cd ~ ls -a
У меня вывод получился такой:
postgres@testPC:~$ ls -a . .bash_history .bashrc .local .psql_history .xscreensaver .. .bash_logout .config .profile .Xdefaults
Не помню уже, кто и когда создал этот файл. Ну и ничего страшного. Если у вас такого файл нет — создайте его:
touch .bashrc
Открываем его любым удобным редактором на изменение (я использую nano):
nano .bashrc
И добавляем туда (в самый конец, если в файле уже что-то есть) объявление двух наших переменных окружения:
export PATH=/usr/local/pgsql/bin/:$PATH export PGDATA=/usr/local/pgsql/data/
Нажимаем Ctrl + x для выхода с сохранением, подтверждаем сохранения.
Чтобы переменные применились — нужно повторно запустить bash — я вернулся в моего пользователя test, а потом снова зашел в postgres и запустил команду psql:
test@testPC:~/postgres/contrib$ sudo su - postgres [sudo] password for test: postgres@testPC:~$ psql psql (13.1) Type "help" for help. postgres=#
И проверим доступные расширения (ранее у нас было только одно, но вы же установили всё из папки /contrib?):
postgres=# select count(1) from pg_available_extensions; count ------- 41 (1 row)
Сорок одно доступное расширение! Вот теперь всё работает так, как я и хотел.
9. ИТОГИ
Мы поставили необходимые библиотеки для корректной установки PostgreSQL, установили сервер, осуществили необходимые настройки (стрелка вверх в psql работает), убедились в работоспособности PostgreSQL, установили все доступные расширения.
Получилось очень много, но в одном месте.
Статья на 5+!