Установка PostgreSQL из исходных кодов

PostgreSQLКогда-то я рассказал про установку Ubuntu на VirtualBox. Настала пора рассказать про установку PostgreSQL из исходных кодов.

Сразу приступаем (считаю, что виртуальная или реальная машина с Ubuntu у вас уже имеется).

Что нас ждет:

  1. Информация о стенде
  2. Настройка операционной системы
  3. Получение исходного кода PostgreSQL
  4. До установки PostgreSQL
  5. Установка PostgreSQL
  6. Настройки для работы с PostgreSQL
  7. Установка расширений
  8. Сохранение переменных окружения
  9. Итоги

Уфф, сам удивился, что получилось очень много. Погнали!

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/

Можно прямо с этой страницы код нужной ветки скачать, но мы поступим по другому:

PG-DownloadZip

Сначала установим специальную утилиту 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
Вывод 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 посмотреть:

PG_Branches

Теперь нужно переключиться на нужную ветку. Для этого существует команда 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

Процесс установки из исходного кода состоит из трех этапов:

  1. Конфигурирование — запуск команды ./configure. Эта команда ищет необходимые библиотеки и заголовочные файлы, осуществляет настройку особых параметров и подключается дополнительные библиотеки (описанные выше —without-параметры из этой области). В результате работы создается файлы Makefiles, содержащий всю необходимую информацию для сборки, его можно просмотреть в текстовом редакторе.
  2. Сборка (компиляция) — запуск команды make. Запускается компиляция программы из исходного кода. При работе используется Makefiles, в которых описаны все параметры сборки приложения. Результат работы — собранная программа в текущей директории.
  3. Установка — команда 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 добавляем в начало путь до нашей директории с программами.

А теперь снова проверим команду инициализации кластера:

Вывод команды initdb:

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, установили все доступные расширения.

Получилось очень много, но в одном месте.


1 Comment on Установка PostgreSQL из исходных кодов

Leave a Reply

Ваш Mail не будет опубликован.


*