Установка PostgreSQL, создание пользователя и базы данных

Откройте терминал и выполните следующие команды:

  1. Обновите список пакетов:
   sudo apt update
  1. Установите PostgreSQL:
   sudo apt install postgresql postgresql-contrib
  1. Проверьте статус сервиса PostgreSQL:
   sudo systemctl status postgresql

Если сервис работает, вы увидите сообщение о том, что PostgreSQL активен.

2. Настройка PostgreSQL

PostgreSQL по умолчанию создает пользователя с именем postgres. Для взаимодействия с базой данных от имени этого пользователя выполните:

  1. Войдите под пользователем postgres:
   sudo -i -u postgres
  1. Откройте PostgreSQL shell:
   psql

Теперь вы находитесь в консоли PostgreSQL.

3. Создание базы данных

  1. Создайте новую базу данных:
   CREATE DATABASE имя_базы;
  1. Создайте нового пользователя и установите пароль:
   CREATE USER имя_пользователя WITH PASSWORD 'пароль';
  1. Предоставьте пользователю права на базу данных:
   GRANT ALL PRIVILEGES ON DATABASE имя_базы TO имя_пользователя;
  1. Выйдите из PostgreSQL shell:
   \q

4. Подключение к базе данных

Теперь вы можете подключиться к базе данных как пользователь, которого вы создали:

  1. Отключитесь от пользователя postgres:
   exit
  1. Подключитесь к базе данных:
   psql -U имя_пользователя -d имя_базы

Теперь вы подключены к вашей базе данных и можете начинать с ней работать.

Дополнительно

  • Чтобы проверить список баз данных:
  \l
  • Для выхода из psql:
  \q

Теперь PostgreSQL установлен, база данных создана, и вы можете взаимодействовать с ней.

Основные команды

Список основных команд для работы с базой данных в psql:

1. Подключение и выход

  • Подключение к базе данных:
  psql -U имя_пользователя -d имя_базы
  • Выход из psql:
  \q

2. Работа с базами данных

  • Создание базы данных:
  CREATE DATABASE имя_базы;
  • Удаление базы данных:
  DROP DATABASE имя_базы;
  • Просмотр списка баз данных:
  \l

3. Работа с пользователями

  • Создание пользователя:
  CREATE USER имя_пользователя WITH PASSWORD 'пароль';
  • Удаление пользователя:
  DROP USER имя_пользователя;
  • Изменение пароля пользователя:
  ALTER USER имя_пользователя WITH PASSWORD 'новый_пароль';
  • Предоставление прав на базу данных:
  GRANT ALL PRIVILEGES ON DATABASE имя_базы TO имя_пользователя;

4. Работа с таблицами

  • Создание таблицы:
  CREATE TABLE имя_таблицы (
    id SERIAL PRIMARY KEY,
    имя_поля тип_данных,
    ...
  );
  • Просмотр структуры таблицы:
  \d имя_таблицы
  • Просмотр всех таблиц в базе данных:
  \dt
  • Удаление таблицы:
  DROP TABLE имя_таблицы;

5. Вставка данных

  • Вставка данных в таблицу:
  INSERT INTO имя_таблицы (имя_поля1, имя_поля2, ...) VALUES (значение1, значение2, ...);

6. Чтение данных

  • Выбор всех данных из таблицы:
  SELECT * FROM имя_таблицы;
  • Выбор данных с условием:
  SELECT * FROM имя_таблицы WHERE имя_поля = 'значение';

7. Обновление данных

  • Обновление данных в таблице:
  UPDATE имя_таблицы SET имя_поля = 'новое_значение' WHERE имя_поля = 'значение';

8. Удаление данных

  • Удаление строки из таблицы:
  DELETE FROM имя_таблицы WHERE имя_поля = 'значение';

9. Управление транзакциями

  • Начало транзакции:
  BEGIN;
  • Завершение транзакции (подтверждение изменений):
  COMMIT;
  • Откат транзакции (отмена изменений):
  ROLLBACK;

10. Дополнительные команды

  • Просмотр версии PostgreSQL:
  SELECT version();
  • Смена базы данных:
  \c имя_базы

Транзакции

Транзакции в PostgreSQL (и в других СУБД) — это логическая единица работы, которая состоит из одного или нескольких SQL-запросов, выполняемых последовательно. Транзакция гарантирует, что все изменения в базе данных, которые происходят в рамках этой транзакции, будут выполнены полностью или не будут выполнены вовсе. Это помогает обеспечить целостность данных.

Основные свойства транзакций

Транзакции обладают четырьмя важными свойствами, известными как ACID:

  1. Atomicity (Атомарность): Транзакция выполняется как единое целое. Либо все операции внутри транзакции завершаются успешно, либо ни одна не завершается.
  2. Consistency (Согласованность): Транзакция переводит базу данных из одного согласованного состояния в другое. В случае неудачи база данных должна вернуться к исходному состоянию.
  3. Isolation (Изолированность): Каждая транзакция изолирована от других. Текущие изменения транзакции не видны другим транзакциям до тех пор, пока транзакция не завершится (не произойдет фиксация).
  4. Durability (Долговечность): После завершения транзакции (фиксации) ее изменения сохраняются и не теряются даже в случае сбоя системы.

Как работают транзакции в PostgreSQL

В PostgreSQL транзакции начинаются с команды BEGIN и завершаются с помощью команд COMMIT или ROLLBACK.

  1. BEGIN: Начало транзакции. Все SQL-операции, которые будут выполнены после этой команды, будут частью транзакции.
   BEGIN;
  1. COMMIT: Завершает транзакцию и подтверждает все изменения, сделанные в базе данных. После этого изменения становятся видимыми для всех пользователей и других транзакций.
   COMMIT;
  1. ROLLBACK: Откатывает все изменения, сделанные в рамках транзакции, возвращая базу данных к состоянию, которое было до начала транзакции.
   ROLLBACK;

Пример использования транзакции:

Предположим, у нас есть таблица accounts, и мы хотим перевести средства с одного счета на другой:

BEGIN;

UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

COMMIT;

В этом примере два обновления (дебет одного счета и кредит другого) объединены в одну транзакцию. Если одно из обновлений не удастся (например, баланс станет отрицательным), можно отменить всю транзакцию с помощью ROLLBACK.

Зачем нужны транзакции

  1. Целостность данных: Если в процессе выполнения произошла ошибка, можно откатить все изменения и вернуть базу данных к исходному состоянию.
  2. Изолированность операций: Пока транзакция не завершена, её изменения не видны другим пользователям, что предотвращает возможные конфликты.
  3. Логическая группировка операций: Позволяет сгруппировать несколько операций, чтобы они были выполнены как единое целое.

Транзакции — это важный механизм для обеспечения надежности и согласованности данных в базе данных.