Сервер PostgreSQL

Описание программного обеспечения

На рисунке показана архитектура PostgreSQL:

image$postgresql architecture

В таблице описаны основные процессы:

Основной процесс Название Описание

Основной процесс

postmaster

Процесс postmaster управляет всеми экземплярами базы данных в целом и отвечает за их запуск и остановку

Резидентный процесс

postgres (резидентный процесс)

Этот процесс управляет внутренними резидентными процессами и также называется postmaster. По умолчанию этот процесс прослушивает сокеты домена Unix и порт TCP/IP 5432, а также ожидает обработки подключений внешним интерфейсом. Номер порта прослушивания можно изменить в PostgreSQL в файле postgresql.conf.

Подпроцесс

postgres (подпроцесс)

Подпроцесс определяет, следует ли разрешить подключение в соответствии с политикой безопасности, определенной в файле pg_hba.conf. В соответствии с политикой безопасности подпроцесс отклоняет определенные IP-адреса и сети, разрешает подключение к базам данных только определенным пользователям или разрешает подключение только к определенным базам данных. + Postgres получает запрос от внешнего интерфейса, выполняет поиск в базе данных и возвращает результаты. Иногда он также обновляет базу данных. Обновленные данные протоколируются в журналах транзакций (журналы WAL для PostgreSQL). Этот метод используется, когда система отключена, сервер вышел из строя или перезагружается. Кроме того, журналы также можно использовать для восстановления данных в других сценариях. В PostgreSQL 9.0 или более поздней версии журналы WAL можно передавать в другие системы PostgreSQL для репликации базы данных в режиме реального времени.

Вспомогательные процессы

SysLogger (системный журнал)

Основной процесс запускает вспомогательный процесс Syslogger только тогда, когда параметру logging_collection в файле postgres.conf присвоено значение on.

BgWriter (запись в фоновом режиме)

Этот процесс записывает "грязные" страницы из общей памяти на диск. Это необходимо для повышения производительности при вставке, обновлении и удалении данных.

WALWriter (журнал с упреждающей записью)

Этот процесс записывает операции изменения на диски до того, как данные будут изменены, поэтому данные не нужно сохранять в файлах при последующих обновлениях данных в режиме реального времени.

PgArch (архив)

Журналы с упреждающей записью (WAL) удаляются. Процесс PgArch создает резервные копии журналов WAL перед их архивацией. После резервного копирования всей базы данных для архивации журналов WAL можно использовать технологию восстановления на определенный момент времени (PITR). Базу данных можно восстановить в любой момент после полного резервного копирования, используя данные полного резервного копирования и последующие заархивированные журналы WAL.

AutoVacuum (автоматическая очистка)

В базе данных PostgreSQL после выполнения операции DELETE в отношении таблицы старые данные удаляются не сразу. При добавлении новых данных система создает строку данных вместо перезаписи старых данных. Старые данные только отмечаются как удалённые и будут очищены только при отсутствии других параллельных транзакций, считывающих данные. В этом случае данные очищаются процессом AutoVacuum.

PgStat (сбор статистики)

Этот процесс собирает статистику данных. Он используется для оценки затрат во время оптимизации запросов, включая количество операций вставки, обновления и удаления, выполняемых в таблице или индексе, количество операций чтения и записи блоков диска и количество операций чтения строк. Информация, собранная процессом PgStat, хранится в pg_statistic.

CheckPoint (контрольная точка)

Контрольная точка — это точка последовательности транзакций, заданная системой. Она используется для обеспечения того, чтобы информация в журнале перед контрольной точкой записывалась на диски.

Настройка среды

Следующая конфигурация среды представлена исключительно для справки. Настройте среду в соответствии со своими требованиями.

Отключение брандмауэра и автоматического запуска

Рекомендуется отключить брандмауэр в тестовой среде, чтобы исключить нарушение работы сети. Настройте брандмауэр в соответствии с фактическими требованиями.

  1. Остановите службу брандмауэра от имени пользователя root.

    systemctl stop firewalld
  2. Отключите службу брандмауэра от имени пользователя root.

    systemctl disable firewalld
    Автоматический запуск будет автоматически отключен, поскольку отключен брандмауэр.

Отключение SELinux

Измените файл конфигурации от имени пользователя root.

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

Создание группы пользователей и пользователя

В серверной среде в целях безопасности каждому процессу назначаются отдельные пользователи для реализации изоляции разрешений. Группа пользователей и пользователь создаются для ОС, а не для базы данных.

  1. Создайте пользователя или группу пользователей PostgreSQL от имени пользователя root.

    • Создание группы:

      groupadd postgres
    • Добавление пользователя в группу:

      useradd -g postgres postgres
  2. Задайте пароль для пользователя postgres от имени пользователя root. (Введите пароль дважды для подтверждения.)

    passwd postgres

Создание дисков данных

При тестировании максимальной производительности рекомендуется установить твердотельные накопители NVMe с более высокой производительностью ввода-вывода для создания тестовых экземпляров PostgreSQL, чтобы избежать влияния скорости ввода-вывода диска на результаты теста производительности. В этом разделе в качестве примера используются твердотельные накопители NVMe. Подробнее см. в шагах 1–4.

В тесте, отличном от теста производительности, выполните команду от имени пользователя root, чтобы создать каталог данных. Затем пропустите этот раздел:

mkdir /data
  1. Создайте файловую систему (в качестве примера используется XFS от имени пользователя root; создайте файловую систему в соответствии со своими требованиями). Если для диска была создана файловая система, при выполнении этой команды отобразится сообщение об ошибке. Можно использовать параметр -f для принудительного создания файловой системы.

    mkfs.xfs /dev/nvme0и1
  2. Создайте каталог данных.

    mkdir /data
  3. Подключите диски.

    mount -o noatime,nobarrier /dev/nvme0n1 /data

Авторизация каталога данных

Измените разрешение каталога от имени пользователя root.

chown -R postgres:postgres /data/

Установка, запуск и удаление PostgreSQL

Установка PostgreSQL

  1. Настройте локальный источник YUM. Подробнее см. в разделе Настройка сервера репозитория.

  2. Очистите кеш:

    dnf clean all
  3. Создайте кеш:

    dnf makecache
  4. Установите сервер PostgreSQL от имени пользователя root.

    dnf install postgresql-server
  5. Проверьте установленный пакет RPM.

    rpm -qa | grep postgresql

Запуск PostgreSQL

Инициализация базы данных

Выполните этот шаг от имени пользователя postgres.
  1. Переключитесь на созданного пользователя postgres.

    su - postgres
  2. Инициализируйте базу данных. Параметр /usr/bin в команде — это каталог, в котором находится команда initdb:

    /usr/bin/initdb -D /data/

Запуск базы данных

  1. Включите базу данных PostgreSQL:

    /usr/bin/pg_ctl -D /data/ -l /data/logfile start
  2. Проверьте, правильно ли запущен процесс базы данных PostgreSQL:

    ps -ef | grep postgres

    Если отображается следующая информация, процессы PostgreSQL запущены:

    root     11232    2230  0 10:09 pts/0    00:00:00 su - postgres
    postgres 11233   11232  0 10:09 pts/0    00:00:00 -bash
    postgres 12319       1  0 11:22 pts/0    00:00:00 /usr/bin/postgres -D /data
    postgres 12321   12319  0 11:22 ?        00:00:00 postgres: checkpointer process
    postgres 12322   12319  0 11:22 ?        00:00:00 postgres: writer process
    postgres 12323   12319  0 11:22 ?        00:00:00 postgres: wal writer process
    postgres 12324   12319  0 11:22 ?        00:00:00 postgres: autovacuum launcher process
    postgres 12325   12319  0 11:22 ?        00:00:00 postgres: stats collector process
    postgres 12326   12319  0 11:22 ?        00:00:00 postgres: bgworker: logical replication launcher
    root     12348    7094  0 11:29 pts/1    00:00:00 grep postgres

Вход в базу данных

Войдите в базу данных:

/usr/bin/psql -U postgres

При успешном входе выводятся сообщения следующего вида:

psql (10.5)
Type "help" for help.

postgres=#
При первом входе в базу данных пароль вводить не нужно.

Настройка учётных записей и паролей базы данных

После входа в систему задайте пароль пользователя postgres.

ALTER USER postgres WITH PASSWORD '123456';

Выход из базы данных

Чтобы выйти из базы данных, введите команду:

\q

Остановка работы базы данных

Чтобы остановить работу СУБД, выполните команду:

/usr/bin/pg_ctl -D /data/ -l /data/logfile stop

Удаление PostgreSQL

  1. Остановите работу базы данных от имени пользователя postgres:

    /usr/bin/pg_ctl -D /data/ -l /data/logfile stop
  2. Чтобы удалить базу данных PostgreSQL, от имени пользователя root выполните команду:

    dnf remove postgresql-server

Управление ролями базы данных

Создание роли

Для создания роли можно использовать инструкцию CREATE ROLE или команду createuser. Команда createuser инкапсулирует инструкцию CREATE ROLE и должна выполняться в графическом интерфейсе оболочки, а не в графическом интерфейсе базы данных.

CREATE ROLE rolename [ [ WITH ] option [ ... ] ];
createuser rolename

В представленных выше данных:

  • rolename — имя роли.

  • Параметры для option:

    • SUPERUSER | NOSUPERUSER: определяет, назначаются ли новой роли права суперпользователя. Если этот параметр не задан, используется значение по умолчанию NOSUPERUSER, указывающее, что роли не предоставляются права суперпользователя.

    • CREATEDB | NOCREATEDB: указывает, может ли роль создавать базу данных. Если этот параметр не задан, используется значение по умолчанию NOCREATEDB, указывающее, что роль не может создавать базу данных.

    • CREATEROLE | NOCREATEROLE: определяет, может ли роль создавать роли. Если этот параметр не задан, используется значение по умолчанию NOCREATEROLE, указывающее, что роль не может создавать роли.

    • INHERIT | NOINHERIT: определяет, наследует ли роль разрешения других ролей в группе, в которую эта роль входит. Роль с атрибутом INHERIT может автоматически использовать любые разрешения, назначенные ее прямой или косвенной группе. Если этот параметр не указан, используется значение по умолчанию INHERIT.

    • LOGIN | NOLOGIN: определяет, может ли роль войти в систему. Роль с атрибутом LOGIN можно рассматривать как пользователя. Роль без этого атрибута может использоваться для управления разрешениями базы данных, но не является пользователем. Если этот атрибут не указан, используется значение по умолчанию NOLOGIN. Однако если для создания роли вместо CREATE ROLE используется инструкция CREATE USER, атрибут LOGIN используется по умолчанию.

    • [ENCRYPTED | UNENCRYPTED] PASSWORD 'password': пароль роли.

      Пароль действителен только для ролей с атрибутом LOGIN.

      ENCRYPTED | UNENCRYPTED определяет, следует ли шифровать пароль. Если этот параметр не указан, используется значение ENCRYPTED, то есть пароль зашифрован.

    • VALID UNTIL’timestamp': указывает метку времени окончания срока действия пароля роли. Если этот параметр не указан, пароль бессрочный.

    • IN ROLE rolename1: перечисляет одну или несколько существующих ролей. Будет добавлена новая роль rolename, которая станет членом rolename1.

    • ROLE rolename2: перечисляет одну или несколько существующих ролей. Эти роли будут автоматически добавлены в качестве членов новой роли rolename. То есть новая роль — это группа пользователей.

Для выполнения этой команды требуется разрешение CREATEROLE или права суперпользователя базы данных.

Пример

  • Создание роли roleexample1, которая может входить в систему:

    CREATE ROLE roleexample1 LOGIN;
  • Создание роли roleexample2 с паролем 123456:

    CREATE ROLE roleexample2 WITH LOGIN PASSWORD '123456';
  • Создание роли с именем roleexample3 (команду следует выполнять в оболочке командной строки, а не в интерпретаторе psql):

    createuser roleexample3

Просмотр ролей

Чтобы просмотреть роль, можно выполнить инструкцию SELECT или метакоманду PostgreSQL \du.

SELECT rolename FROM pg_roles;
\du

В предыдущей команде параметр rolename — это имя роли.

Пример

  • Просмотр роли roleexample1:

    SELECT roleexample1 from pg_roles;
  • Просмотр существующих ролей:

    \du

Изменение роли

Изменение имени пользователя

Чтобы переименовать существующую роль, используйте инструкцию ALTER ROLE:

ALTER ROLE oldrolername RENAME TO newrolename;

В представленных выше данных:

  • oldrolername — исходное имя роли;

  • newrolename — новое имя роли.

Пример изменения пользователя

  • Переименование роли roleexample1 на roleexapme2:

    ALTER ROLE roleexample1 RENAME TO roleexample2;

Изменение пароля пользователя

Чтобы изменить пароль для входа в систему для роли, используйте инструкцию ALTER ROLE:

ALTER ROLE rolename PASSWORD 'password';

В представленных выше данных:

  • rolename — имя роли.

  • password — пароль.

Пример изменения пароля роли

Изменение пароля роли roleexample1 на 456789.

ALTER ROLE roleexample1 WITH PASSWORD '456789';

Удаление роли

Для удаления роли можно использовать инструкцию DROP ROLE или команду dropuser. Команда dropuser инкапсулирует инструкцию DROP ROLE и должна выполняться в графическом интерфейсе оболочки, а не в графическом интерфейсе базы данных.

DROP ROLE rolename;
dropuser rolename

В предыдущей команде параметр rolename — это имя роли.

Пример

  • Удаление роли userexample1:

    DROP ROLE userexample1;
  • Удаление роли userexample2:

    dropuser userexample2

Разрешения роли

Для предоставления разрешений роли можно использовать инструкцию GRANT.

  • Предоставление роли разрешения на выполнение операций с таблицей.

    GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
  • Предоставление роли разрешения на выполнение операций с последовательностью:

    GRANT { { USAGE | SELECT | UPDATE } [,...] | ALL [ PRIVILEGES ] } ON SEQUENCE sequencename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
  • Предоставление роли разрешения на выполнение операций с базой данных:

    GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE databasename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
  • Предоставление роли разрешения на выполнение операций с функцией:

    GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION funcname ( [ [ argmode ] [ argname ] argtype [, ...] ] ) [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
  • Предоставление роли разрешения на выполнение операций процедурного языка:

    GRANT { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE langname [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
  • Предоставление роли разрешения на выполнение операций со схемой:

    GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schemaname [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
  • Предоставление роли разрешения на выполнение операций с табличным пространством:

    GRANT { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespacename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
  • Назначение отношений членства в роли rolename1 для роли rolename2:

    GRANT rolename1 [, ...] TO rolename2 [, ...] [ WITH ADMIN OPTION ]

В представленных выше данных:

  • SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER, USAGE, CREATE, CONNECT, TEMPORARY, TEMP, EXECUTE и ALL [ <PRIVILEGES> ]: указывают разрешения пользователя на выполнение операций. ALL [ <PRIVILEGES>]: указывает все разрешения, ключевое слово PRIVILEGES является необязательным в PostgreSQL, но требуется в строгих инструкциях SQL.

  • Предложение ON: указывает объект, в отношении которого предоставляется разрешение.

  • tablename: имя таблицы.

  • Предложение TO: указывает роль, которой предоставляется разрешение.

  • rolename, rolename1 и rolename2: имена ролей.

  • groupname: имя группы ролей.

  • PUBLIC: указывает, что разрешение предоставляется всем ролям, включая пользователей, которые могут быть созданы позже.

  • WITH GRANT OPTION: указывает, что получатель разрешения может предоставлять разрешение другим. Этот параметр невозможно назначить для PUBLIC.

  • sequencename: имя последовательности.

  • databasename: имя базы данных.

  • funcname ([[argmode] [argname] argtype [, ...]]): имя функции и ее параметры.

  • langname: название процедурного языка.

  • schemaname: имя схемы.

  • tablespacename: имя табличного пространства.

  • WITH ADMIN OPTION: участник может назначать отношения членства в роли другим ролям и отменять отношения членства в других ролях.

Пример

  • Предоставление разрешения CREATE для базы данных database1 пользователю userexample:

    GRANT CREATE ON DATABASE database1 TO userexample;
  • Предоставление всех разрешений для работы с таблицей table1 всем пользователям:

    GRANT ALL PRIVILEGES ON TABLE table1 TO PUBLIC;

Удаление разрешений пользователя

Чтобы отозвать разрешения, предоставленные ранее одной или нескольким ролям, можно использовать инструкцию REVOKE.

  • Отзыв у роли разрешения на выполнение операций с таблицей.

    REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...]
  • Отзыв у роли разрешения на выполнение операций с последовательностью.

    REVOKE [ GRANT OPTION FOR ] { { USAGE | SELECT | UPDATE } [,...] | ALL [ PRIVILEGES ] } ON SEQUENCE sequencename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
  • Отзыв у роли разрешения на выполнение операций с базой данных.

    REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE databasename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
  • Отзыв у роли разрешения на выполнение операций с функцией:

    REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION funcname ( [ [ argmode ] [ argname ] argtype [, ...] ] ) [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
  • Отзыв у роли разрешения на выполнение операций процедурного языка:

    REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE langname [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
  • Отзыв у роли разрешения на выполнение операций со схемой:

    REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schemaname [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
  • Отзыв у роли разрешения на выполнение операций с табличным пространством:

    REVOKE [ GRANT OPTION FOR ] { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespacename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
  • Отзыв у роли rolename2 отношений членства в роли rolename1:

    REVOKE [ ADMIN OPTION FOR ] rolename1 [, ...] FROM rolename2 [, ...] [ CASCADE | RESTRICT ]

В представленных выше данных:

  • GRANT OPTION FOR: разрешение невозможно предоставить другим, однако само разрешение не отзывается.

  • SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER, USAGE, CREATE, CONNECT, TEMPORARY, TEMP, EXECUTE и ALL [ <PRIVILEGES> ]: указывают разрешения пользователя на выполнение операций. ALL [ <PRIVILEGES> ]: указывает все разрешения, ключевое слово PRIVILEGES является необязательным в PostgreSQL, но требуется в строгих инструкциях SQL.

  • Предложение ON: указывает объект, в отношении которого отзывается разрешение.

  • tablename — имя таблицы.

  • Предложение FROM: указывает роль, разрешение которой отзывается.

  • rolename, rolename1 и rolename2 — имена ролей.

  • groupname — имя группы ролей.

  • PUBLIC: отзывает неявно определенные группы со всеми ролями. Однако это не означает, что все роли теряют разрешения. Разрешения, полученные напрямую, и разрешения, полученные через группу, остаются в силе.

  • sequencename — имя последовательности.

  • CASCADE: отзыв всех зависимых разрешений.

  • RESTRICT: все зависимые разрешения не отзываются.

  • databasename — имя базы данных.

  • funcname (`[[argmode] [argname] argtype [, ...]]): имя функции и ее параметры.

  • langname — название процедурного языка.

  • schemaname — имя схемы.

  • tablespacename — имя табличного пространства.

  • ADMIN OPTION FOR: переданная авторизация не отзывается автоматически.

Пример

  • Предоставление разрешения CREATE для базы данных database1 пользователю userexample:

    GRANT CREATE ON DATABASE database1 TO userexample;
  • Предоставление всех разрешений для работы с таблицей table1 всем пользователям:

    GRANT ALL PRIVILEGES ON TABLE table1 TO PUBLIC;

Управление базами данных

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

Для создания базы данных можно использовать инструкцию CREATE DATABASE или команду createdb. Команда createdb инкапсулирует инструкцию CREATE DATABASE и должна выполняться в графическом интерфейсе оболочки, а не в графическом интерфейсе базы данных.

CREATE DATABASE databasename;
createdb databasename

В предыдущей команде параметр databasename — это имя базы данных.

Для использования этой команды требуется разрешение CREATEDB.

Пример

Создание базы данных с именем database1.

CREATE DATABASE database1;

Выбор базы данных

Используйте инструкцию \c для выбора базы данных:

\c databasename;

В предыдущей команде параметр databasename — это имя базы данных.

Пример

Выбор базы данных databaseexample:

\c databaseexample;

Просмотр базы данных

Используйте инструкцию \l для просмотра базы данных:

\l;

Пример

Просмотр всех баз данных:

\l;

Удаление базы данных

Чтобы удалить базу данных, можно выполнить инструкцию DROP DATABASE или команду dropdb. Команда dropdb инкапсулирует инструкцию DROP DATABASE и должна выполняться в графическом интерфейсе оболочки, а не в графическом интерфейсе базы данных.

Будьте осторожны при удалении базы данных. После удаления базы данных все таблицы и данные в базе данных будут утеряны.

DROP DATABASE databasename;
dropdb databasename

В предыдущей команде параметр databasename — это имя базы данных.

Инструкция DROP DATABASE удаляет элементы системного каталога базы данных и файловые каталоги, содержащие данные.

Инструкцию DROP DATABASE может выполнить только суперадминистратор или владелец базы данных.

Пример

Удаление базы данных databaseexample:

DROP DATABASE databaseexample;

Резервное копирование базы данных

Выполните команду pg_dump, чтобы создать резервную копию базы данных и записать ее дамп в файл сценария или другой файл архива.

pg_dump [option]... [databasename] > outfile

В представленных выше данных:

  • databasename — имя базы данных. Если этот параметр не указан, используется переменная среды PGDATABASE. Если эта переменная среды не задана, используйте имя пользователя, которое инициирует подключение.

  • outfile — файл резервной копии базы данных.

  • option — параметр команды pg_dump. Можно ввести несколько параметров через пробел. Общие параметры команды pg_dump:

    • -f, --file: указанный выходной файл. Если этот параметр пропущен, используется стандартный вывод.

    • -d, --dbname: база данных для записи дампа.

    • -h, --host: имя хоста.

    • -p, --port: номер порта.

    • -U, --username: имя пользователя подключения.

    • -W, --password: принудительный запрос PostgreSQL пароля перед подключением к базе данных.

Пример

Создание резервной копии базы данных database1 пользователя postgres на порту 3306 хоста с IP-адресом 192.168.202.144 в файл db1.sql:

pg_dump \
   -h 192.168.202.144 \
   -p 3306 \
   -U postgres \
   -W database1 > db1.sql

Восстановление базы данных

Чтобы восстановить базу данных, выполните команду psql:

psql [option]... [databasename [username]] < infile

В представленных выше данных:

  • databasename — имя базы данных. Если этот параметр не указан, используется переменная среды PGDATABASE. Если эта переменная среды не задана, используйте имя пользователя, которое инициирует подключение.

  • username — имя пользователя.

  • infile — параметр outfile в команде pg_dump.

  • option — параметр команды psql. Можно ввести несколько параметров через пробел. Общие параметры команды psql:

    • -f, --file: указанный выходной файл. Если этот параметр пропущен, используется стандартный вывод.

    • -d, --dbname: база данных для записи дампа.

    • -h, --host: имя хоста.

    • -p, --port: номер порта.

    • -U, --username: имя пользователя подключения.

    • -W, --password: принудительный запрос PostgreSQL пароля перед подключением к базе данных.

Команду psql нельзя использовать для автоматического создания базы данных databasename. Поэтому базу данных databasename необходимо создать перед выполнением команды psql для восстановления базы данных.

Пример

Импорт файла сценария db1.sql в базу данных newdb пользователя postgres на хосте 192.168.202.144 через порт 3306:

createdb newdb
psql \
   -h 192.168.202.144 \
   -p 3306 \
   -U postgres \
   -W \
   -d newdb < db1.sql