```sh sudo apt install postgres sudo apt install-contrib # Debian sudo systemctl start posgresql.service sudo systemctl status posgresql.service sudo -u postgres createuser --interactive # вводим имя # даем права sudo man createuser sudo -u postgres createdb metall sudo adduser metall sudo -u metall psql # переключиться на другую БД: psql -d postgres ``` ### Установка из исходников: ```sh # качаем с сайта нужную версию: # https://www.postgresql.org/ftp/source/v16.2/postgresql-16.2.tar.gz mkdir Downloads cd Downloads # Качаем: wget https://ftp.postgresql.org/pub/source/v16.2/postgresql-16.2.tar.gz # Скачать скрипт и сразу выполнить: wget -O - http://www.tecmint.com/wp-content/scripts/Colorfull.sh | bash # Также можно использовать curl: curl -O https://github.com/torvalds/linux/archive/v4.11-rc6.tar.gz tar -xzvf postgresql-16.2.tar.gz cd postgresql-16.2 ./configure --prefix=/var/lib/postgresql # Поиск пакетов в Linux: sudo apt-cache search lib<пакет> # нужен пакет -dev sudo apt install -dev brew install pkg-config ./configure --prefix=/var/lib/postgresql sudo make install-world cd /var/lib/postgresql sudo chown -R vlapa ../postgresql ./bin/pg_ctl initdb export PGDATA=/var/lib/postgresql/main ./bin/pg_ctl initdb ./bin/pg_ctl -D /var/lib/postgresql/main start ./bin/psql -h localhost -U vlapa. postgres # Создать БД: CREATE DATABASE #=========================================================== # создадим конфигурацию перед сборкой. Для этого используем команду configure с тремя опциями: # prefix — укажем каталог для установки PostgreSQL; # libdir — укажем каталог с библиотеками PostgreSQL, это необходимо, так как PostgreSQL устанавливается в нестандартное расположение и не будет знать где ему искать библиотеки; # with-pgport — укажем нестандартный порт на котором будет работать этот экземпляр PostgreSQL. ./configure --prefix=/home/alex/pgsql-16 --libdir=/home/alex/pgsql-16/lib/ --with-pgport=5555 mkdir ~/pgsql-16/data/ echo "export PGDATA=~/pgsql-16/data/" >> .bashrc . .bashrc ls -d $PGDATA echo "export PGDATA=~/pgsql-16/data/" >> .bashrc . .bashrc whereis psql initdb -k pg_ctl -l ~/pgsql-16/postgres.log start # -l -файл логов pg_ctl status psql -d postgres -c 'select now()' pg_ctl stop ``` ### Создание и запуск второго кластера ```sh mkdir ~/pgsql-16/data2/ initdb -k -D ~/pgsql-16/data2/ pg_ctl -D /home/alex/pgsql-16/data2/ -l logfile start # При инициализация кластера, если путь к каталогу PGDATA отличается от переменной $PGDATA или если такая переменная не задана. То нужно с помощью ключа -D указать путь к этому каталогу. # Чтобы запустить второй кластер одновременно с первым, нужно поменять порт, на котором работает PostgreSQL. Изменим этот порт для второго кластера: echo port = 5556 >> ~/pgsql-16/data2/postgresql.conf pg_ctl -D ~/pgsql-16/data2/ -l ~/pgsql-16/data2/postgres.log start ps ax | grep postgresql # Первый кластер запущен без ключа -D и используется переменная $PGDATA, а во втором кластере путь к PGDATA прописан в строке запуска. # Перед дальнейшей работой выключим оба кластера: pg_ctl stop pg_ctl -D /home/alex/pgsql-16/data2 stop ``` # 📑 Шпаргалка по основным командам PostgreSQL Вся работа с PostgreSQL осуществляется под пользователем `postgres` `$sudo su postgres` Работать с `PosgreSQL` можно как в интерактивном режиме, так и из командной строки. Программа — `psql` ## Основные команды PostgreSQL в интерактивном режиме: - `\connect db_name` – подключиться к базе с именем db_name - `\du` – список пользователей - `\dp` (или `\z`) – список таблиц, представлений, последовательностей, прав доступа к ним - `\di` – индексы - `\ds` – последовательности - `\dt` – список таблиц - `\dt+` — список всех таблиц с описанием - `\dt *s*` — список всех таблиц, содержащих s в имени - `\dv` – представления - `\dS` – системные таблицы - `\d+` – описание таблицы - `\o` – пересылка результатов запроса в файл - `\l` – список баз данных - `\i` – читать входящие данные из файла - `\e` – открывает текущее содержимое буфера запроса в редакторе (если иное не указано в окружении переменной _EDITOR_, то будет использоваться по умолчанию vi) - `\d` “table_name” – описание таблицы - `\i` запуск команды из внешнего файла, например \i /my/directory/my.sql - `\pset` – команда настройки параметров форматирования - `\echo` – выводит сообщение - `\set` – устанавливает значение переменной среды. Без параметров выводит список текущих переменных (\unset – удаляет). - `\?` – справочник psql - `\help` – справочник SQL - `\q` (или `Ctrl+D`) – выход с программы ## Удаленное подключение к Postgres: - **postgresql.conf** - **pg_hba.conf** Вы можете найти эти два файла в папке: - **/etc/postgresql/13/main** (Linux) - **C:/Program Files/PostgreSQL/13/data** (Windows) ![[Снимок экрана 2024-03-14 в 13.21.49.png]] ![[Снимок экрана 2024-03-14 в 13.22.17.png]] ![[Снимок экрана 2024-03-14 в 13.25.59.png]] ![[Снимок экрана 2024-03-14 в 13.27.58.png]] ![[Снимок экрана 2024-03-14 в 13.29.48.png]] ![[Снимок экрана 2024-03-14 в 13.32.01.png]] ###################################################################### ### Первичный ключ: _должен быть: - уникальным - заполненным (not Null) _бывают: - простые - составные - естественные - искусственные -