Postgresql#
Предупреждение
Является сертифицированным средством защиты информации
PostgreSQL — это мощная, открытая и объектно-реляционная система управления базами данных (СУБД), которая широко используется для работы с большими объемами данных. Она поддерживает расширенные функции, такие как транзакции, триггеры, хранимые процедуры и многое другое. PostgreSQL идеально подходит для сложных приложений, где требуется высокая производительность, надежность и гибкость.
Основные пакеты
Пакет |
Версия |
Репозиторий |
Описание |
---|---|---|---|
postgesql |
15+246astra3+ci1 |
installation |
объектно-реляционная база данных |
Дополнительные пакеты
Пакет |
Версия |
Репозиторий |
Описание |
---|---|---|---|
postgesql-contrib |
15+246astra3+ci1 |
installation |
дополнительные возможности для PostgreSQL |
postgesql-plpython3-15 |
15.10-astra.se1 |
installation |
процедурный язык PL/Python 3 lkz PostgreSQL 15 |
Примечание
В репозиториях большая часть пакетов, относящихся к PostgreSQL, имеют вид postgresql…
Установка PostgreSQL#
установите PostgreSQL:
sudo apt install postgresql postgresql-contrib
Пакет postgresql-contrib содержит дополнительные модули и утилиты.
проверьте статус службы:
sudo systemctl status postgresql
Убедитесь, что служба активна и работает.
инициализируйте базу данных:
sudo postgresql-setup --initdb
запустите и включите службу:
sudo systemctl start postgresql
sudo systemctl enable postgresql
Подключение к PostgreSQL#
после установки PostgreSQL создается пользователь postgres с правами суперпользователя, для подключения к серверу используйте:
sudo -u postgres psql
Это откроет интерактивную оболочку psql.
Предупреждение
Если после выполнения команды отображается ошибка «could not change directory to «/home/»: Отказано в доступе» и не появляется приглашение командной строки postgres=#, необходимо вместо su postgres использовать конструкцию su - postgres. Если приглашение postgres=# появилось, то сообщение об ошибке можно проигнорировать.
Если приглашение postgres=# не появляется, то вероятнее всего ОС Astra Linux Special Edition используется в более защищенном режиме, например, «Смоленск». В таком случае нужно для пользователя postgres назначить высокий уровень целостности:
sudo pdpl-user -i 63 postgres
Создание нового пользователя и базы данных#
создайте нового пользователя:
CREATE USER myuser WITH PASSWORD 'mypassword';
создайте базу данных и назначьте её новому пользователю:
CREATE DATABASE mydatabase OWNER myuser;
подключитесь к новой базе данных:
psql -U myuser -d mydatabase
Основные команды PostgreSQL#
Создание таблицы#
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
Вставка данных#
INSERT INTO users (name, email) VALUES ('Иван Иванов', 'ivan@example.com');
INSERT INTO users (name, email) VALUES ('Мария Петрова', 'maria@example.com');
Выборка данных#
SELECT * FROM users;
или
SELECT name, email FROM users WHERE id = 1;
Обновление данных#
UPDATE users SET email = 'ivan.new@example.com' WHERE id = 1;
Удаление данных#
DELETE FROM users WHERE id = 2;
Удаление таблицы#
DROP TABLE users;
Работа с PostgreSQL из командной строки, основные команды psql#
Подключение к базе данных:#
psql -U username -d databasename
Показать список таблиц:#
\dt
Показать структуру таблицы:#
\d users
Экспорт данных в файл:#
\copy (SELECT * FROM users) TO '/path/to/output.csv' WITH CSV HEADER;
Импорт данных из файла:#
\copy users FROM '/path/to/input.csv' WITH CSV HEADER;
Выход из psql:#
\q
Управление PostgreSQL, запуск и остановка службы#
Запуск:#
sudo systemctl start postgresql
Остановка:#
sudo systemctl stop postgresql
Перезапуск:#
sudo systemctl restart postgresql
Проверка статуса службы:#
sudo systemctl status postgresql
Использование PostgreSQL в скриптах#
Пример на Python:#
import psycopg2
# Подключение к базе данных
conn = psycopg2.connect(
dbname="mydatabase",
user="myuser",
password="mypassword",
host="localhost"
)
cursor = conn.cursor()
# Создание таблицы
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
)
''')
# Вставка данных
cursor.execute("INSERT INTO users (name, email) VALUES (%s, %s)", ('Петр Петров', 'petr@example.com'))
# Выборка данных
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
# Закрытие соединения
conn.commit()
cursor.close()
conn.close()
Логирование#
Для просмотра логов PostgreSQL в реальном времени есть возможность использовать утилиту tail. Это полезно для мониторинга активности базы данных, поиска ошибок или анализа запросов.
Пример команды для просмотра логов:
tail -f /var/lib/postgresql/15/main/pg_log/postgresql-Thu.log
Что происходит при вызове команды:
/var/lib/postgresql/15/main/pg_log, директория где хранятся логи PostgreSQL.
использование команды tail -f /путь к логам/postgresql-Thu.log, чтобы отслеживать изменения в лог-файле за четверг (Thu).
Как интерпретировать логи PostgreSQL
Логи PostgreSQL содержат информацию о различных событиях, таких как:
Запросы к базе данных (SELECT, INSERT, UPDATE, DELETE и т.д.).
Ошибки (например, синтаксические ошибки в запросах или проблемы с подключением).
Предупреждения (например, долгие запросы).
Информация о подключениях (кто подключился, кто отключился).
Пример строки лога:
2023-10-05 12:34:56 UTC LOG: connection received: host=127.0.0.1 port=5432
2023-10-05 12:34:57 UTC LOG: connection authorized: user=postgres database=test_db
2023-10-05 12:35:00 UTC ERROR: syntax error at or near "SELECT"
2023-10-05 12:35:01 UTC LOG: disconnection: session time: 0:00:05 user=postgres database=test_db host=127.0.0.1 port=5432
Графические инструменты для работы с PostgreSQL#
Если вы предпочитаете графический интерфейс, вот несколько популярных инструментов pgAdmin4, DBeaver.